星慈光編程蟲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 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