制作一个小型双节履带底盘【内附资料下载链接】

1.运动功能说明

 双节履带车可以通过两个驱动轮的差速运动来实现前进、后退、原地转向、大半径转向等基本行驶功能,并可通过舵机关节模块进行小臂的抬起和落下。通过底盘运动与小臂运行的结合,实现上台阶、通过坑洼地面等功能。

底盘前进与后退 

底盘原地转向

底盘大半径转向

小臂运行

利用小臂抬起和放下,可以攀爬障碍和楼梯

2.结构说明

该样机由两组共源驱动的小型带传动模组和1个舵机关节模组构成。履带模组呈轴对称分布在车架上。舵机关节模块安装在小车车头方向的两个履带模块中间,驱动小臂抬起。

 

3.运动功能实现

3.1 电子硬件

本实验中采用如下硬件:
Basra主控板(基于Arduino开源方案设计的一款开发板)、Bigfish扩展板、7.4V锂电池
【Basra主控板的相关介绍可点击查看https://www.robotway.com/h-col-135.html;Bigfish扩展板的相关介绍可点击查看https://www.robotway.com/h-col-136.html
将2个圆周舵机分别装在Bigfish扩展板的舵机引脚上,左侧圆周舵机接D3号引脚,右侧圆周舵机接D4号引脚。将关节模块的舵机接在D7号引脚。并将主控板和电池在车身固定好。
样机各个电机扩展板接口
左履带模块电机D3
右履带模块电机D4
关节模块电机D7

 3.2 编写程序

编程环境:Arduino 1.8.19

前摆臂运动的代码(点击查看:ArmState.ino

/*------------------------------------------------------------------------------------

版权说明: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-26 https://www.robotway.com/

------------------------------------------

实验功能:

实现双节履带小车前摆臂下、上、正常运动。

------------------------------------------

实验接线:

.----------------------.

| |

| |--------------

| | 车头舵机接D7

| |--------------

| |

*----------------------*

------------------------------------------------------------------------------------*/

#include <Servo.h> //调用舵机库

#define Servo_Pin 7 //定义舵机引脚号

#define Servo_Up 180 //定义前摆臂向上时角度值

#define Servo_Down 90 //定义前摆臂向下时角度值

#define Servo_Level 135 //定义前摆臂保持水平时角度值

Servo ServoArm; //声明舵机对象

void down(); //前摆臂向下

void up(); //前摆臂向上

void normal(); //前摆臂与地面保持平行

//程序初始化部分:使能舵机对象

void setup() {

ServoArm.attach(Servo_Pin);

}

//主程序部分:前摆臂循环执行【向上1.5秒、水平1秒、向下1.5秒、水平1秒】动作组

void loop() {

arm_up(); //前摆臂向上

delay(1500);

arm_level(); //前摆臂水平

delay(1000);

arm_down(); //前摆臂向下

delay(1500);

arm_level(); //前摆臂水平

delay(1000);

}

//前摆臂与地面保持平行

void arm_level(){

ServoArm.write( Servo_Level );

}

//前摆臂向上

void arm_up(){

ServoArm.write( Servo_Up );

}

//前摆臂向下

void arm_down(){

ServoArm.write( Servo_Down );

}

履带底盘前进功能的代码(点击查看: Forward.ino

/*------------------------------------------------------------------------------------

版权说明: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-27 https://www.robotway.com/

-----------------------------------

实验功能:

实现双节履带小车前进.

注意事项:圆周舵机90度表示停止.

---------------------------------------------------

实验接线:

左轮圆周舵机:D3

| |

.----------------------.

| |

| |----------------

| | 车头

| |----------------

| |

*----------------------*

| |

右轮圆周舵机:D4

------------------------------------------------------------------------------------*/

#include <Servo.h> //调用舵机库函数

#define Servo_Num 2 //定义舵机数量2

#define Left_Servo_Forward 91 //定义前进时小车左轮速度

#define Right_Servo_Forward 89 //定义前进时小车右轮速度

Servo Car_Servo[Servo_Num]; //声明舵机对象,表示声明了2个舵机对象

void Forward(); //前进

const int servo_pin[Servo_Num] = { 3, 4 };//定义舵机引脚号.

const int angle_init[Servo_Num] = { 90, 90 };//定义舵机初始化角度

//程序初始化部分:分别使能舵机对象,并设置各个舵机初始角度

void setup() {

for( int i=0;i<Servo_Num;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 );

}

履带底盘后退功能的代码(点击查看:Backward.ino

/*------------------------------------------------------------------------------------

版权说明: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-26 https://www.robotway.com/

--------------------------------------------------

实验功能:

实现双节履带小车后退.

注意事项:圆周舵机90度表示停止.

--------------------------------------------------

实验接线:

左轮圆周舵机:D3

| |

.----------------------.

| |

| |------------

| | 车头

| |------------

| |

*----------------------*

| |

右轮圆周舵机:D4

------------------------------------------------------------------------------------*/

#include <Servo.h> //调用舵机库函数

#define Servo_Num 2 //定义舵机数量2

#define Left_Servo_Backward 89 //定义后退时小车左轮速度

#define Right_Servo_Backward 91 //定义后退时小车右轮速度

Servo Car_Servo[Servo_Num]; //声明舵机对象,表示声明了2个舵机对象

void Forward(); //前进

const int servo_pin[Servo_Num] = { 3, 4 };//定义舵机引脚号.

const int angle_init[Servo_Num] = { 90, 90 };//定义舵机初始化角度

//程序初始化部分:分别使能舵机对象,并设置各个舵机初始角度

void setup() {

for( int i=0;i<Servo_Num;i++ ){

Car_Servo[i].attach( servo_pin[i] ); //使能舵机对象

Car_Servo[i].write( angle_init[i] ); //设置舵机初始角度

}//即设定履带小车初始为停止状态

}

//主程序部分:双节履带车后退

void loop() {

Backward();

}

//后退子程序

void Backward() {

Car_Servo[0].write( Left_Servo_Backward );

Car_Servo[1].write( Right_Servo_Backward );

}

履带底盘原地转向功能的代码(点击查看:TurnInPlace.ino

/*------------------------------------------------------------------------------------

版权说明: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-27 https://www.robotway.com/

-----------------------------------------------------------

实验功能:

实现双节履带小车加速前进、加速后退、停止、加速自转、

加速大半径转向、前摆臂向上抬起、前摆臂水平、前摆臂向下.

【注意】:当我们给定圆周舵机一个速度时,例如50,如果我们

不给该圆周舵机停止(即90),那么该舵机会以50的速度一直转动

-----------------------------------------------------------

实验接线:

左轮圆周舵机:D3

| |

.----------------------.

| |

| |----------------

| | 车头舵机接:D7

| |----------------

| |

*----------------------*

| |

右轮圆周舵机:D4

------------------------------------------------------------------------------------*/

#include <Servo.h> //调用舵机库函数

#define Servo_Num 3 //定义舵机数量

Servo Car_Servo[Servo_Num]; //声明舵机对象,表示声明了3个舵机对象

const int servo_pin[Servo_Num] = { 3, 4, 7 };//定义舵机引脚号.

const int angle_init[Servo_Num] = { 90, 90, 135 };//定义舵机初始化角度

/*枚举类型.当第一个参数为1时,后面的每一个参数一次增1【如:Backward=2,ArmDown=8】

Forward(前进)、Backward(后退)、TurnInPlace(原地旋转)、BigTurn(大转向)、

Stop(小车停止)、ArmLevel(前摆臂水平)、ArmUp(前摆臂向上)、ArmDown(前摆臂向下)*/

enum{Forward=1,Backward,TurnInPlace,BigTurn,Stop,ArmLevel,ArmUp,ArmDown};

//程序初始化部分:分别使能舵机对象,并设置各个舵机初始角度

void setup() {

for( int i=0;i<Servo_Num;i++ ){

Car_Servo[i].attach( servo_pin[i] ); //使能舵机对象

Car_Servo[i].write( angle_init[i] ); //设置舵机初始角度

}//即设定履带小车初始为停止状态

}

//主程序部分:执行小车各个状态

void loop()

{

Car_State( ArmUp, 1000 ); //小车前摆臂向上抬起,等待1秒

Car_State( Forward, 2000 ); //小车前进,等待2秒

Car_State( Stop, 2000 ); //小车停止,并等待2秒

Car_State( ArmLevel, 1000 ); //小车前摆臂水平

Car_State( ArmDown, 1000 ); //小车前摆臂向下

Car_State( Backward, 2000 ); //小车后退,等待2秒

Car_State( ArmUp, 1000 ); //前摆臂向上【注意这里没写Stop,

// 故此时的小车会一直以程序前一行的后退状态继续后退】

Car_State( Forward, 5000 ); //以此类推

Car_State( Backward, 5000 );

Car_State( TurnInPlace, 5000 );

Car_State( BigTurn, 5000 );

}

/*--------------------------------------------------------------

该函数封装了小车各个状态.

参数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 ArmLevel: Car_Servo[2].write( 135 );

delay( time_delay);

break;

case ArmUp: Car_Servo[2].write( 180 );

delay( time_delay);

break;

case ArmDown: Car_Servo[2].write( 90 );

delay( time_delay);

break;

case BigTurn: Car_Servo[0].write( 10 );

Car_Servo[1].write( 110 );

delay( time_delay);

break;

case Backward: Car_Servo[0].write( 170 );

Car_Servo[1].write( 10 );

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( 10 );

Car_Servo[1].write( 170 );

delay( time_delay);

break;

case TurnInPlace: Car_Servo[0].write( 10 );

Car_Servo[1].write( 10 );

delay( time_delay);

break;

default: break; //否则, 程序跳出该循环.

}

}

履带底盘大半径转向功能的代码(点击查看:BigTurn.ino

/*------------------------------------------------------------------------------------

版权说明: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-26 https://www.robotway.com/

-----------------------------------

实验功能:

实现双节履带小车大半径转向

注意事项:圆周舵机90度表示停止.

--------------------------------------------------------

实验接线:

左轮圆周舵机:D3

| |

.----------------------.

| |

| |---------------

| | 车头

| |---------------

| |

*----------------------*

| |

右轮圆周舵机:D4

------------------------------------------------------------------------------------*/

#include <Servo.h> //调用舵机库函数

#define Servo_Num 2 //定义舵机数量2

#define Left_Servo_Turnright 91 //定义大半径转向时小车左轮速度

#define Right_Servo_Turnright 101 //定义大半径转向时小车右轮速度

Servo Car_Servo[Servo_Num]; //声明舵机对象,表示声明了2个舵机对象

void Forward(); //前进

const int servo_pin[Servo_Num] = { 3, 4 };//定义舵机引脚号.

const int angle_init[Servo_Num] = { 90, 90 };//定义舵机初始化角度

//程序初始化部分:分别使能舵机对象,并设置各个舵机初始角度

void setup() {

for( int i=0;i<Servo_Num;i++ ){

Car_Servo[i].attach( servo_pin[i] ); //使能舵机对象

Car_Servo[i].write( angle_init[i] ); //设置舵机初始角度

}//即设定履带小车初始为停止状态

}

//主程序部分:双节履带车大半径转向(类似于走弧线效果)

void loop() {

Big_Turn();

}

//大半径转向子程序

void Big_Turn() {

Car_Servo[0].write( Left_Servo_Turnright );

Car_Servo[1].write( Right_Servo_Turnright );

}

履带底盘结合摆臂运行的代码(点击查看:OverallTest.ino

/*------------------------------------------------------------------------------------

版权说明: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-27 https://www.robotway.com/

-----------------------------------------------------------

实验功能:

实现双节履带小车加速前进、加速后退、停止、加速自转、

加速大半径转向、前摆臂向上抬起、前摆臂水平、前摆臂向下.

【注意】:当我们给定圆周舵机一个速度时,例如50,如果我们

不给该圆周舵机停止(即90),那么该舵机会以50的速度一直转动

-----------------------------------------------------------

实验接线:

左轮圆周舵机:D3

| |

.----------------------.

| |

| |----------------

| | 车头舵机接:D7

| |----------------

| |

*----------------------*

| |

右轮圆周舵机:D4

------------------------------------------------------------------------------------*/

#include <Servo.h> //调用舵机库函数

#define Servo_Num 3 //定义舵机数量

Servo Car_Servo[Servo_Num]; //声明舵机对象,表示声明了3个舵机对象

const int servo_pin[Servo_Num] = { 3, 4, 7 };//定义舵机引脚号.

const int angle_init[Servo_Num] = { 90, 90, 135 };//定义舵机初始化角度

/*枚举类型.当第一个参数为1时,后面的每一个参数一次增1【如:Backward=2,ArmDown=8】

Forward(前进)、Backward(后退)、TurnInPlace(原地旋转)、BigTurn(大转向)、

Stop(小车停止)、ArmLevel(前摆臂水平)、ArmUp(前摆臂向上)、ArmDown(前摆臂向下)*/

enum{Forward=1,Backward,TurnInPlace,BigTurn,Stop,ArmLevel,ArmUp,ArmDown};

//程序初始化部分:分别使能舵机对象,并设置各个舵机初始角度

void setup() {

for( int i=0;i<Servo_Num;i++ ){

Car_Servo[i].attach( servo_pin[i] ); //使能舵机对象

Car_Servo[i].write( angle_init[i] ); //设置舵机初始角度

}//即设定履带小车初始为停止状态

}

//主程序部分:执行小车各个状态

void loop()

{

Car_State( ArmUp, 1000 ); //小车前摆臂向上抬起,等待1秒

Car_State( Forward, 2000 ); //小车前进,等待2秒

Car_State( Stop, 2000 ); //小车停止,并等待2秒

Car_State( ArmLevel, 1000 ); //小车前摆臂水平

Car_State( ArmDown, 1000 ); //小车前摆臂向下

Car_State( Backward, 2000 ); //小车后退,等待2秒

Car_State( ArmUp, 1000 ); //前摆臂向上【注意这里没写Stop,

// 故此时的小车会一直以程序前一行的后退状态继续后退】

Car_State( Forward, 5000 ); //以此类推

Car_State( Backward, 5000 );

Car_State( TurnInPlace, 5000 );

Car_State( BigTurn, 5000 );

}

/*--------------------------------------------------------------

该函数封装了小车各个状态.

参数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 ArmLevel: Car_Servo[2].write( 135 );

delay( time_delay);

break;

case ArmUp: Car_Servo[2].write( 180 );

delay( time_delay);

break;

case ArmDown: Car_Servo[2].write( 90 );

delay( time_delay);

break;

case BigTurn: Car_Servo[0].write( 10 );

Car_Servo[1].write( 110 );

delay( time_delay);

break;

case Backward: Car_Servo[0].write( 170 );

Car_Servo[1].write( 10 );

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( 10 );

Car_Servo[1].write( 170 );

delay( time_delay);

break;

case TurnInPlace: Car_Servo[0].write( 10 );

Car_Servo[1].write( 10 );

delay( time_delay);

break;

default: break; //否则, 程序跳出该循环.

}

}

4.扩展样机

本样机可以根据实际需要改变履带的长度,也可以改变传动方式,比如下图所示扩展样机,在前臂上使用了连杆组传动方案,样机体积也更小。

5.资料下载 

资料内容样机3D文件、例程源代码
下载链接https://www.robotway.com/h-col-118.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值