1.運動功能說明
雙節履帶車可以通過兩個驅動輪的差速運動來實現前進、后退、原地轉向、大半徑轉向等基本行駛功能,并可通過舵機關節模塊進行小臂的抬起和落下。通過底盤運動與小臂運行的結合,實現上臺階、通過坑洼地面等功能。
2. 結構說明
該樣機由兩組 三節共源驅動履帶模組 ,和2個 舵機擺動關節 構成,履帶呈軸對稱分布在車架上,舵機關節模塊驅動小臂抬起。如下圖所示,左下和右上的圓周舵機驅動履帶,左上的舵機關節驅動上面的兩個小臂,右下的舵機關節驅動下面的兩個小臂。
3. 運動功能實現
在這個示例中,我們采用了以下硬件,請大家參考:
將2個圓周舵機分別裝在Bigfish擴展板的舵機引腳上,左側圓周舵機接D4號引腳;右側圓周舵機接D3號引腳;將車頭關節模塊的舵機接在D7號引腳;車尾關節模塊的舵機接在D8號引腳。并將主控板和電池在車身固定好。
3.2 編寫程序【完整代碼詳見https://www.robotway.com/h-col-133.html】
前擺臂運動的代碼:
/*------------------------------------------------------------------------------------ 版權說明:Copyright 2022 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved. Distributed under MIT license.See file LICENSE for detail or copy at https://opensource.org/licenses/MIT by 機器譜 2022-5-31 https://www.robotway.com/ ------------------------------------------ 實驗功能: 實現三節履帶小車前擺臂下、上、水平動作。 三節履帶車后擺臂下、上、水平動作 ------------------------------------------ 實驗接線: .----------------------. | | -------------| |-------------- 后擺臂舵機:D8 | | 前擺臂舵機:D7 -------------| |-------------- | | *----------------------* ------------------------------------------------------------------------------------*/ #include //調用舵機庫 Servo ServoArmHead; //聲明前擺臂舵機對象 Servo ServoArmTail; //聲明后擺臂舵機對象 #define Servo_Head_Pin 7 //定義前擺臂舵機引腳號7 #define Servo_Tail_Pin 8 //定義后擺臂舵機引腳號8 #define Servo_Head_Up 130 //定義前擺臂向上時角度值 #define Servo_Head_Down 40 //定義前擺臂向下時角度值 #define Servo_Head_Level 90 //定義前擺臂保持水平時角度值 #define Servo_Tail_Up 130 //定義后擺臂向上時角度值 #define Servo_Tail_Down 40 //定義后擺臂向下時角度值 #define Servo_Tail_Level 90 //定義前擺臂保持水平時角度值 /*枚舉類型.當第一個參數為1時,后面的每一個參數一次增1【如:Headdown=2,Taillevel=7】Headlevel(前擺臂水平)、 Headup(前擺臂向上)、Headdown(前擺臂向下)Taillevel(后擺臂水平)、Tailup(后擺臂向上)、Taildown(后擺臂向下)*/ enum{Headup=1,Headdown,Headlevel,Tailup,Taildown,Taillevel}; //程序初始化部分:使能舵機對象 void setup() { ServoArmHead.attach(Servo_Head_Pin); ServoArmTail.attach(Servo_Tail_Pin); } //主程序部分:前擺臂、后擺臂分別執行向上、水平、向下動作. void loop() { arm_state( Headup ); delay(1000); //前擺臂向上,程序等待1秒 arm_state( Headlevel); delay(1000); //前擺臂水平,程序等待1秒 arm_state( Headdown ); delay(1000); //前擺臂向下,程序等待1秒 arm_state( Tailup ); delay(1000); //后擺臂向上,程序等待1秒 arm_state( Taillevel); delay(1000); //后擺臂水平,程序等待1秒 arm_state( Taildown); delay(1000); //后擺臂向下,程序等待1秒 } //前擺臂、后擺臂上、下、水平子函數 void arm_state(int arm_state){ switch( arm_state ) { case Headup: ServoArmHead.write( Servo_Head_Up ); break; case Headdown :ServoArmHead.write( Servo_Head_Down ); break; case Headlevel:ServoArmHead.write( Servo_Head_Level); break; case Tailup: ServoArmTail.write( Servo_Tail_Up ); break; case Taildown :ServoArmTail.write( Servo_Tail_Down ); break; case Taillevel:ServoArmTail.write( Servo_Tail_Level); break; default: break; } } |
前進功能的代碼:
/*------------------------------------------------------------------------------------ 版權說明:Copyright 2022 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved. Distributed under MIT license.See file LICENSE for detail or copy at https://opensource.org/licenses/MIT by 機器譜 2022-5-31 https://www.robotway.com/ ----------------------------------- 實驗功能: 實現三節履帶小車前進. 注意事項:圓周舵機90度表示停止. --------------------------------------------------- 實驗接線: 左輪圓周舵機:D4 | | .----------------------. | | ------------| |------------ | | 車頭 ------------| |------------ | | *----------------------* | | 右輪圓周舵機:D3 ------------------------------------------------------------------------------------*/ #include //調用舵機庫函數 #define Servo_Num 2 //定義舵機數量2 #define Left_Servo_Forward 70 //定義前進時小車左輪速度 #define Right_Servo_Forward 110 //定義前進時小車右輪速度 Servo Car_Servo[Servo_Num]; //聲明舵機對象,表示聲明了2個舵機對象 void Forward(); //前進 const int servo_pin[Servo_Num] = { 4, 3 };//定義舵機引腳號. const int angle_init[Servo_Num] = { 90, 90 };//定義舵機初始化角度 //程序初始化部分:分別使能舵機對象,并設置各個舵機初始角度 void setup() { for( int i=0;i Car_Servo[i].attach( servo_pin[i] ); //使能舵機對象 Car_Servo[i].write( angle_init[i] ); //設置舵機初始角度 }//即設定履帶小車初始為停止狀態 } //主程序部分:三節履帶車前進 void loop() { Forward(); } //前進子程序 void Forward() { Car_Servo[0].write( Left_Servo_Forward ); Car_Servo[1].write( Right_Servo_Forward ); } |
履帶底盤結合擺臂運行的代碼:
/*------------------------------------------------------------------------------------ 版權說明:Copyright 2022 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved. Distributed under MIT license.See file LICENSE for detail or copy at https://opensource.org/licenses/MIT by 機器譜 2022-5-31 https://www.robotway.com/ --------------------------------------------------------------- 實驗功能: 實現三節履帶小車前進、后退、停止、自轉、大半徑轉向、前擺臂向上 抬起、前擺臂水平、前擺臂向下、后擺臂向上、后擺臂水平、后擺臂向下. 【注意】:當我們給定圓周舵機一個速度時,例如50,如果我們 不給該圓周舵機停止(即90),那么該舵機會以50的速度一直轉動. -------------------------------------------------------------- 實驗接線: 左輪圓周舵機:D4 | | .----------------------. | | -------------| |-------------- 后擺臂舵機:D8 | | 前擺臂舵機:D7 -------------| |-------------- | | *----------------------* | | 右輪圓周舵機:D3 ------------------------------------------------------------------------------------*/ #include //調用舵機庫函數 #define Servo_Num 4 //定義舵機數量 Servo Car_Servo[Servo_Num]; //聲明舵機對象,表示聲明了3個舵機對象 const int servo_pin[Servo_Num] = { 4, 3, 7 ,8 };//定義舵機引腳號. const int angle_init[Servo_Num] = { 90, 90, 90, 90 };//定義舵機初始化角度 /*枚舉類型.當第一個參數為1時,后面的每一個參數一次增1【如:Backward=2,Taillevel=11】Forward(前進)、Backward(后退)、 TurnInPlace(原地旋轉)、BigTurn(大轉向)、Stop(小車停止)、Headlevel(前擺臂水平)、Headup(前擺臂向上)、 Headdown(前擺臂向下)、Taillevel(后擺臂水平)、Tailup(后擺臂向上)、Taildown(后擺臂向下)*/ enum{Forward=1,Backward,TurnInPlace,BigTurn,Stop,Headup,Headdown,Headlevel,Tailup,Taildown,Taillevel}; //程序初始化部分:分別使能舵機對象,并設置各個舵機初始角度 void setup() { for( int i=0;i Car_Servo[i].attach( servo_pin[i] ); //使能舵機對象 Car_Servo[i].write( angle_init[i] ); //設置舵機初始角度 }//即設定履帶小車初始為停止狀態 } //主程序部分:執行小車各個狀態 void loop() { Car_State( Headup, 1000 ); //小車前擺臂向上抬起,等待1秒 Car_State( Forward, 2000 ); //小車前進,等待2秒 Car_State( Stop, 2000 ); //小車停止,并等待2秒 Car_State( Headlevel, 1000 ); //小車前擺臂水平 Car_State( Headdown, 1000 ); //小車前擺臂向下 Car_State( Backward, 2000 ); //小車后退,等待2秒 Car_State( Tailup, 1000 ); //后擺臂向上【注意這里沒寫Stop,故此時的小車會一直以程序前一行的后退狀態繼續后退】 Car_State( Taillevel, 1000 ); //后擺臂水平 Car_State( Taildown, 1000 ); //后擺臂向下 //........后續可自行添加自己需要的小車狀態........ } /*-------------------------------------------------------------- 該函數封裝了小車各個狀態. 參數car_state表示小車執行狀態. 參數time_delay表示程序等待時間 程序使用示例: Car_State( Forward, 1000 );表示小車執行前進動作,等待1000毫秒 Car_State( ArmUp, 1500 );表示小車執行前擺臂向上動作,等待1500毫秒 */ void Car_State( int car_state, unsigned long time_delay ) { switch( car_state ) { case Headlevel: Car_Servo[2].write( 90 ); delay( time_delay); break; case Headup: Car_Servo[2].write( 130 ); delay( time_delay); break; case Headdown: Car_Servo[2].write( 40 ); delay( time_delay); break; case Taillevel: Car_Servo[3].write( 90 ); delay( time_delay); break; case Tailup: Car_Servo[3].write( 130 ); delay( time_delay); break; case Taildown: Car_Servo[3].write( 40 ); delay( time_delay); break; case BigTurn: Car_Servo[0].write( 60 ); Car_Servo[1].write( 104 ); delay( time_delay); break; case Backward: Car_Servo[0].write( 120 ); Car_Servo[1].write( 60 ); delay( time_delay); break; case Stop: Car_Servo[0].write( 90 ); Car_Servo[1].write( 90 ); delay( time_delay); break; case Forward: Car_Servo[0].write( 70 ); Car_Servo[1].write( 110 ); delay( time_delay); break; case TurnInPlace: Car_Servo[0].write( 60 ); Car_Servo[1].write( 60 ); delay( time_delay); break; default: break; //否則, 程序跳出該循環. } } |
4.擴展樣機
本樣機可以根據實際需要改變共源履帶的長度、輪徑等,也可以用其他傳動方式(如齒輪組等)構造共源驅動,如下圖所示:
5.資料內容
樣機3D文件
例程源代碼
-
機器人
+關注
關注
210文章
28212瀏覽量
206566 -
底盤
+關注
關注
3文章
243瀏覽量
14660 -
舵機
+關注
關注
17文章
265瀏覽量
40958
發布評論請先 登錄
相關推薦
評論