星慈光编程虫2号小车讲解第一篇--向前向后

星慈光编程虫2号小车是一款基于微控制器(如Arduino)的编程教学小车,常用于学习机器人控制和编程基础。本讲解将重点介绍小车的基本运动:前进、后退、左转和右转。这些运动通过控制电机实现,通常涉及调整电机的方向和速度。小编将逐步解释原理、编程实现和注意事项,帮助您快速上手。

目录

准备工作

硬件:

软件:

运动原理

麦克拉姆轮的运动原理

基本概念

向前运动

向后运动

向左平移(向左横移)

向右平移(向右横移)

旋转运动

代码

宏定义

设置引脚 setup()函数

辅助函数

up()

down()

完整代码:让小车不停向前移动5秒,向后移动5秒

准备工作

硬件:
  1. Arduino UNO R3 原装进口
  2. 星慈光 HJ-P20R34
  3. 驱动版编程虫2号小车套装
软件:

arduino IDEhttps://www.arduino.cc/en/software/

运动原理

星慈光编程虫2号小车使用麦克拉姆轮驱动。

麦克拉姆轮的运动原理

麦克拉姆轮(Mecanum wheel)是一种特殊设计的轮子,常用于全向移动机器人。它的轮缘上安装有多个倾斜的辊子(通常呈45度角),这些辊子允许轮子在滚动时产生侧向力。通过独立控制每个轮子的旋转方向和速度,机器人可以实现复杂的运动,包括向前、向后、向左平移、向右平移以及旋转。下面小编将逐步解释如何实现这些基本运动。

基本概念
  • 麦克拉姆轮通常安装在机器人的四个角落:前左轮(FL)、前右轮(FR)、后左轮(BL)、后右轮(BR)。
  • 每个轮子的辊子角度决定了其力分解:当轮子旋转时,产生的力可以分解为纵向分量(沿机器人前进方向)和横向分量(垂直于前进方向)。
  • 通过组合四个轮子的旋转,可以合成机器人的整体运动。运动方向由轮子速度向量控制,其中正速度表示轮子向前旋转(例如,顺时针),负速度表示向后旋转(逆时针)。
向前运动
  • 原理:机器人向正前方移动时,需要所有轮子产生的纵向分量叠加,而横向分量相互抵消。
  • 控制方式
    • 所有四个轮子以相同速度向前旋转(正速度)。
    • 例如:FL = +v, FR = +v, BL = +v, BR = +v(其中 v 是速度值)。
  • 为什么有效:每个轮子的力分解中,纵向分量主导,横向分量由于对称布局而抵消,合力推动机器人向前。
  • 简化公式:机器人的纵向速度v_x与轮子速度成正比: v_x \propto \frac{w_{\text{FL}} + w_{\text{FR}} + w_{\text{BL}} + w_{\text{BR}}}{4}  其中 w 表示轮子角速度。
向后运动
  • 原理:与向前运动相反,所有轮子向后旋转,纵向分量叠加向后。
  • 控制方式
    • 所有四个轮子以相同速度向后旋转(负速度)。
    • 例如:FL = -v, FR = -v, BL = -v, BR = -v
  • 为什么有效:力分解中,纵向分量反向,横向分量抵消,机器人整体向后移动。
  • 简化公式:纵向速度v_x为负值。
旋转运动
  • 顺时针旋转:左轮向前旋转(FL = +v, BL = +v),右轮向后旋转(FR = -v, BR = -v)。
  • 逆时针旋转:左轮向后旋转(FL = -v, BL = -v),右轮向前旋转(FR = +v, BR = +v)。

代码

宏定义
// M1
#define FR1 6
#define FR2 10
// M2
#define FL1  5
#define FL2  9
// M3
#define BR1  A5
#define BR2  11
// M4
#define BL1  A4
#define BL2  3
设置引脚 setup()函数
  pinMode(FR1, OUTPUT);pinMode(FR2, OUTPUT);pinMode(FL1, OUTPUT);pinMode(FL2, OUTPUT);pinMode(BR1, OUTPUT);pinMode(BR2, OUTPUT);pinMode(BL1, OUTPUT);pinMode(BL2, OUTPUT);
辅助函数
  1. up()
    void up() {digitalWrite(FR1, 0);digitalWrite(FR2, 1);digitalWrite(FL1, 0);digitalWrite(FL2, 1);digitalWrite(BR1, 0);digitalWrite(BR2, 1);digitalWrite(BL1, 0);digitalWrite(BL2, 1);
    }
  2. down()
    void down() {digitalWrite(FR1, 1);digitalWrite(FR2, 0);digitalWrite(FL1, 1);digitalWrite(FL2, 0);digitalWrite(BR1, 1);digitalWrite(BR2, 0);digitalWrite(BL1, 1);digitalWrite(BL2, 0);
    }

  • 1表示高电平,0表示低电平

完整代码:让小车不停向前移动5秒,向后移动5秒

// M1
#define FR1 6
#define FR2 10
// M2
#define FL1  5
#define FL2  9
// M3
#define BR1  A5
#define BR2  1
// M4
#define BL1  A4
#define BL2  3
void setup() {pinMode(FR1, OUTPUT);pinMode(FR2, OUTPUT);pinMode(FL1, OUTPUT);pinMode(FL2, OUTPUT);pinMode(BR1, OUTPUT);pinMode(BR2, OUTPUT);pinMode(BL1, OUTPUT);pinMode(BL2, OUTPUT);
}// 00停,01前,10退
void up() {digitalWrite(FR1, 0);digitalWrite(FR2, 1);digitalWrite(FL1, 0);digitalWrite(FL2, 1);digitalWrite(BR1, 0);digitalWrite(BR2, 1);digitalWrite(BL1, 0);digitalWrite(BL2, 1);
}
void down() {digitalWrite(FR1, 1);digitalWrite(FR2, 0);digitalWrite(FL1, 1);digitalWrite(FL2, 0);digitalWrite(BR1, 1);digitalWrite(BR2, 0);digitalWrite(BL1, 1);digitalWrite(BL2, 0);
}void loop() {up();delay(5000);down();delay(5000);
}

下一篇:星慈光编程虫2号小车讲解第二篇--向左向右平移https://blog.csdn.net/LiuYiCheng123456/article/details/149360016?spm=1001.2014.3001.5501

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/92734.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS 加固工具有哪些?快速发布团队的实战方案

在当今快速迭代的 iOS 开发环境中,团队需要在高频上线与应用安全之间找到平衡。快速发布不应牺牲安全性,而安全加固也不应成为阻碍上线的瓶颈。这就要求开发者在加固工具的选型与流程设计上,做到既高效又可靠。 那么,iOS 加固工具…

结构型模式-架构解耦与扩展实践

结构型模式聚焦于对象间的组合关系,通过优化类与对象的装配方式,实现系统的灵活性与可扩展性。在分布式系统中,由于多节点协作、跨网络通信及异构环境集成等特性,传统结构型模式需进行适应性改造,以应对分布式特有的复…

scratch笔记和练习-第三课

角色的大小变化 亮度等特效设置 流程图图形符号 Figma攻略:26个流行流程图符号及其解释 练习 实现在闪动10次后角色缓缓变回原形

Redis MCP 安装与配置完整指南

一、Redis MCP 简介 Redis MCP (Managed Control Plane) 是一个独立于 Redis 服务运行的管理控制平台,用户可通过该平台快速高效地管理和配置 Redis 实例。Redis MCP 可配合开源 Redis 或 Redis Cloud 使用。 二、安装 Redis MCP 服务 Redis MCP 提供多种安装方式&a…

Spring Boot配置文件加载全指南:从基础到Spring Cloud集成

​​​ ​​一、核心概念​ 配置文件默认存在加载顺序优先级主要用途必需依赖bootstrap.yml❌ 无1(最先)最高Spring Cloud上下文初始化spring-cloud-starter-bootstrapbootstrap.properties❌ 无1(略高于.yml)最高同上同上application.yml✅ 自动创建2中等应用核心配置无appl…

Python通关秘籍(六)数据结构——字典

前文复习 五、数据结构 5.1 列表(List) 列表是一种有序的可变数据集合,可以包含不同类型的元素。

自学嵌入式 day33 TCP、HTTP协议(超文本传输协议)

6、黏包问题(1)、原因:发送方发送数据太快或者接收方接收数据太慢,导致数据在缓冲区缓存。(2)、解决方法:①发送指定大小数据(结构体)问题:结构体对齐问题&am…

LinuxShell 的 Here-Document(<< EOF) 笔记250723

LinuxShell 的 Here-Document(<< EOF) 笔记250723 Here-Document(<< EOF) Linux Shell Here Document (<< EOF) 终极指南 Here Document&#xff08;立即文档&#xff09;是 Shell 中用于多行输入重定向的强大功能&#xff0c;其核心语法为 << DELI…

【windows修复】解决windows10,没有【相机] 功能问题

问题: windows10,相机模块,好像是被卸载了,想重新安装 方法简介: 先下载windows store, 然后,在windows store 里面下载 相机功能: 解决: 直接下载官方离线包并手动安装(成功率 90%+) 1 用浏览器打开 https://store.rg-adguard.net 这是微软 CDN 解析站,安…

Python 中字典和 if-else 的选择

一、为什么要写这篇文章&#xff1f; 在 Python 编程中&#xff0c;我们经常需要根据不同的条件做不同的事情。比如&#xff1a; 根据用户等级显示不同的内容根据成绩给出不同的评价根据天气决定穿什么衣服 这时候&#xff0c;我们通常有两种选择&#xff1a; 用 if-else 语句用…

【开源解析】基于HTML5的智能会议室预约系统开发全攻略:从零构建企业级管理平台

&#x1f680; 【开源解析】基于HTML5的智能会议室预约系统开发全攻略&#xff1a;从零构建企业级管理平台 &#x1f308; 个人主页&#xff1a;创客白泽 - CSDN博客 &#x1f4a1; 热爱不止于代码&#xff0c;热情源自每一个灵感闪现的夜晚。愿以开源之火&#xff0c;点亮前行…

中央广播电视总台联合阿里云研究院权威发布《中国人工智能应用发展报告(2025)》:我国依旧需要大力注重人工智能人才的培养

你好&#xff0c;我是杰哥。 中央广播电视总台联合阿里云研究院权威发布《中国人工智能应用发展报告&#xff08;2025&#xff09;》&#xff0c;以下为报告核心看点&#xff1a; 报告首提 “654”体系&#xff1a;揭秘 6大技术趋势、5 新应用场景、4 力产业模型&#xff1b;成…

Visual Studio 2010-.Net Framework 4.0-DevExpress安装

最新版的DevExpress已不支持.Net Framework 4.0&#xff0c;需要下载18.1及以下版本。 17.2.5版DevExpress下载&#xff1a; 百度网盘 请输入提取码

借助Aspose.HTML控件,在 Python 中将 HTML 转换为 Markdown

在这个人工智能时代&#xff0c;Markdown因其易用性而备受重视。这种标记语言易于人类和机器理解。此外&#xff0c;与 HTML 和 DOCX 相比&#xff0c;这种格式更有助于法学硕士 (LLM) 理解文档结构。因此&#xff0c;本指南将介绍如何以 Python 编程方式将HTML转换为 Markdown…

【2026版】Redis面试题

文章目录1. Redis为什么这么快&#xff1f;2. Redis的持久化机制是怎样的&#xff1f;3. Redis 的过期策略是怎么样的&#xff1f;4. Redis的内存淘汰策略是怎么样的&#xff1f;5. 什么是热Key问题&#xff0c;如何解决热key问题&#xff1f;6. 什么是大Key问题&#xff0c;如…

Python编程进阶知识之第四课处理数据(pandas)

目录 简介 1. 安装 Pandas 2.基本数据结构 1.Series &#xff08;1.&#xff09;创建Series &#xff08;2.&#xff09;Series的属性 &#xff08;3.&#xff09;Series 的索引和切片 2.DataFrame &#xff08;1.&#xff09;创建 DataFrame &#xff08;2.&#xff09;…

使用 Vue 实现移动端视频录制与自动截图功能

文章目录技术栈功能介绍video标签属性完整代码js 前端实现将视频Blob转Base64java 后端实现将视频Base64转mp4文件在移动端网页开发中&#xff0c;使用摄像头录制视频并自动生成截图是一个常见的需求&#xff0c;比如身份认证、人脸识别或互动问卷等场景。本文将介绍如何使用 V…

单片机是怎么控制步进电机的?

步进电机作为一种将电脉冲信号转化为角位移的执行机构&#xff0c;其运转依赖于脉冲信号的控制&#xff0c;而单片机作为控制核心&#xff0c;通过输出特定的脉冲信号和方向信号&#xff0c;实现对步进电机的步数、方向、转速的精准控制&#xff0c;整个过程需结合驱动电路、程…

数据库binlog日志查看方案

binlog可以查看当前数据库中所有的修改操作&#xff0c;包含数据和结构的修改&#xff0c;所以掌握数据库日志查看是有必要的 通过客户端连接到mysql 查看binlog日志的存储位置&#xff08;前提是已开启binlog&#xff09; -- 查看日志文件列表 SHOW BINARY LOGS;结果示例-- 这…

MinIO Go 客户端使用详解:对象存储开发实战指南

MinIO GO-SDK ✅ 一、准备工作 1. 环境依赖 2. 安装 SDK 🔧 二、初始化 MinIO 客户端 📦 三、创建 Bucket(存储桶) ⬆️ 四、上传对象 ⬇️ 五、下载对象 📂 六、列出对象列表 🗑️ 七、删除对象 🔚 八、总结 📌 推荐阅读: 随着云原生架构的发展,对象存储已成为…