星慈光编程虫2号小车讲解第一篇--向前向后
星慈光编程虫2号小车是一款基于微控制器(如Arduino)的编程教学小车,常用于学习机器人控制和编程基础。本讲解将重点介绍小车的基本运动:前进、后退、左转和右转。这些运动通过控制电机实现,通常涉及调整电机的方向和速度。小编将逐步解释原理、编程实现和注意事项,帮助您快速上手。
目录
准备工作
硬件:
软件:
运动原理
麦克拉姆轮的运动原理
基本概念
向前运动
向后运动
向左平移(向左横移)
向右平移(向右横移)
旋转运动
代码
宏定义
设置引脚 setup()函数
辅助函数
up()
down()
完整代码:让小车不停向前移动5秒,向后移动5秒
准备工作
硬件:
- Arduino UNO R3 原装进口
- 星慈光 HJ-P20R34
- 驱动版编程虫2号小车套装
软件:
arduino IDEhttps://www.arduino.cc/en/software/
运动原理
星慈光编程虫2号小车使用麦克拉姆轮驱动。
麦克拉姆轮的运动原理
麦克拉姆轮(Mecanum wheel)是一种特殊设计的轮子,常用于全向移动机器人。它的轮缘上安装有多个倾斜的辊子(通常呈45度角),这些辊子允许轮子在滚动时产生侧向力。通过独立控制每个轮子的旋转方向和速度,机器人可以实现复杂的运动,包括向前、向后、向左平移、向右平移以及旋转。下面小编将逐步解释如何实现这些基本运动。
基本概念
- 麦克拉姆轮通常安装在机器人的四个角落:前左轮(FL)、前右轮(FR)、后左轮(BL)、后右轮(BR)。
- 每个轮子的辊子角度决定了其力分解:当轮子旋转时,产生的力可以分解为纵向分量(沿机器人前进方向)和横向分量(垂直于前进方向)。
- 通过组合四个轮子的旋转,可以合成机器人的整体运动。运动方向由轮子速度向量控制,其中正速度表示轮子向前旋转(例如,顺时针),负速度表示向后旋转(逆时针)。
向前运动
- 原理:机器人向正前方移动时,需要所有轮子产生的纵向分量叠加,而横向分量相互抵消。
- 控制方式:
- 所有四个轮子以相同速度向前旋转(正速度)。
- 例如:
(其中 v 是速度值)。
- 为什么有效:每个轮子的力分解中,纵向分量主导,横向分量由于对称布局而抵消,合力推动机器人向前。
- 简化公式:机器人的纵向速度
与轮子速度成正比:
其中 w 表示轮子角速度。
向后运动
- 原理:与向前运动相反,所有轮子向后旋转,纵向分量叠加向后。
- 控制方式:
- 所有四个轮子以相同速度向后旋转(负速度)。
- 例如:
。
- 为什么有效:力分解中,纵向分量反向,横向分量抵消,机器人整体向后移动。
- 简化公式:纵向速度
为负值。
旋转运动
- 顺时针旋转:左轮向前旋转(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);
辅助函数
-
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);}
-
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 3void 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