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文件
例程源代码
-
机器人
+关注
关注
211文章
28389浏览量
206933 -
底盘
+关注
关注
3文章
246浏览量
14674 -
舵机
+关注
关注
17文章
269浏览量
41016
发布评论请先 登录
相关推荐
评论