1.运动功能说明

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

2. 结构说明

该样机由两组节共源驱动履带模组,和2个舵机摆动关节构成,履带呈轴对称分布在车架上,舵机关节模块驱动小臂抬起。如下图所示,左下和右上的圆周舵机驱动履带,左上的舵机关节驱动上面的两个小臂,右下的舵机关节驱动下面的两个小臂。

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扩展板的舵机引脚上,左侧圆周舵机接D4号引脚;右侧圆周舵机接D3号引脚;将车头关节模块的舵机接在D7号引脚;车尾关节模块的舵机接在D8号引脚。并将主控板和电池在车身固定好。

电机描述 扩展板接口
左履带模块电机 D4
右履带模块电机 D3
车头关节模块电机 D7
车尾关节模块电机 D8

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-31 https://www.robotway.com/

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

实验功能:

实现三节履带小车前摆臂下、上、水平动作。

三节履带车后摆臂下、上、水平动作

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

实验接线:

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

| |

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

后摆臂舵机:D8 | | 前摆臂舵机:D7

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

| |

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

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

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

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;

}

}

前进功能的代码:(点击查看: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-31 https://www.robotway.com/

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

实验功能:

实现三节履带小车前进.

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

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

实验接线:

左轮圆周舵机:D4

| |

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

| |

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

| | 车头

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

| |

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

| |

右轮圆周舵机:D3

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

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

#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<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-31 https://www.robotway.com/

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

实验功能:

实现三节履带小车后退.

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

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

实验接线:

左轮圆周舵机:D4

| |

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

| |

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

| | 车头

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

| |

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

| |

右轮圆周舵机:D3

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

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

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

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

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

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

void Backward(); //后退

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

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-31 https://www.robotway.com/

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

实验功能:

实现三节履带小车原地自转(本示例为原地右转).

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

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

实验接线:

左轮圆周舵机:D3

| |

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

| |

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

| | 车头

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

| |

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

| |

右轮圆周舵机:D4

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

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

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

#define Left_Servo_Turnright 60 //定义右转时小车左轮速度

#define Right_Servo_Turnright 60 //定义右转时小车右轮速度

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

void Turninplace(); //原地自转

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

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() {

Turninplace();

}

//原地自转子程序

void Turninplace() {

Car_Servo[0].write( Left_Servo_Turnright );

Car_Servo[1].write( Right_Servo_Turnright );

}

大半径转向功能的代码:(点击查看: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-31 https://www.robotway.com/

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

实验功能:

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

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

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

实验接线:

左轮圆周舵机:D4

| |

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

| |

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

| | 车头

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

| |

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

| |

右轮圆周舵机:D3

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

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

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

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

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

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

void Big_Turn(); //大半径转向

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

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-31 https://www.robotway.com/

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

实验功能:

实现三节履带小车前进、后退、停止、自转、大半径转向、前摆臂向上

抬起、前摆臂水平、前摆臂向下、后摆臂向上、后摆臂水平、后摆臂向下.

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

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

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

实验接线:

左轮圆周舵机:D4

| |

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

| |

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

后摆臂舵机:D8 | | 前摆臂舵机:D7

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

| |

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

| |

右轮圆周舵机:D3

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

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

#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<Servo_Num;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文件、例程源代码
下载途径 https://www.robotway.com/h-col-133.html

制作一个小型三节履带底盘【内附资料下载链接】相关推荐

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

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

  2. 制作一个正三角履带底盘【内附资料下载链接】

    1.运动功能说明 履带底盘可以通过两侧履带的差速运动来实现前进.后退.原地转向.大半径转向等基本行驶功能.同时,由于车身的正三角特性,它不惧怕前后方向上的翻车. 前进与后退 原地转向 大半径转向 翻滚 ...

  3. 制作一个斜三角履带底盘【内附资料下载链接】

    1.运动功能说明 履带底盘可以通过两侧履带的差速运动来实现前进.后退.原地转向.大半径转向等基本行驶功能.另外,倾斜的履带也可以使其具有良好的越障效果. 前进与后退 原地转向 大半径转向 2.结构说明 ...

  4. 制作一个四轮四驱底盘【内附资料下载链接】

    1.运动功能说明 底盘可以通过左侧2个驱动轮和右侧2个驱动轮的差速运动配合来实现前进.后退.原地转向.大半径转向等基本行驶功能. 前进与后退 原地转向 大半径转向 2.结构说明 样机由四个小型驱动轮模 ...

  5. 制作一个前轮转向(阿克曼)底盘【内附资料下载链接】

    1.运动功能说明 前轮转向(阿克曼)底盘可以通过后轮进行驱动,通过前轮控制方向,前轮转向结构和汽车类似,可以做到前进.后退.大半径转向等基本行驶功能,但不能实现原地转向. 2.结构说明 样机包含一个直 ...

  6. 制作一个月球车底盘【内附资料下载链接】

    1.运动功能说明 月球车底盘可以通过左侧3个驱动轮和右侧3个驱动轮的差速运动配合来实现前进.后退.原地转向.大半径转向等基本行驶功能.由于摇臂的作用,机构的抓地力更强,因此具有极强的牵引能力和爬坡能力 ...

  7. 制作一个机器螳螂【内附资料下载链接】

    1. 运动功能说明 机器螳螂可以通过两侧仿生腿的差速运动来实现前进.后退.原地转向.大半径转向等基本行走功能.行走时在传动机构的作用下,两个前肢也会一起运动.颈部的关节模组可以驱动头部和前肢做上.下运 ...

  8. 制作一个轮式机械臂小车【内附资料下载链接】

    1. 运动功能说明 轮式机械臂小车是一款搭载了机械臂的双轮小车.它的底盘具备基本的行驶和原地转向功能,机械臂具备抬升.放下.抓取等功能.整体上可以实现抓取.搬运.码放等功能,可作为搬运机器人.排爆机器 ...

  9. 制作一个偏心轮连杆简易六足【内附资料下载链接】

    1. 运动功能说明 简易六足机器人可以通过两侧仿生腿的差速运动来实现前进.后退.原地转向.大半径转向等基本行走功能. 2.结构说明 该样机由两组仿生腿构成,仿生腿由直流电机驱动,包含1个偏心轮滑块机构 ...

最新文章

  1. 深造率超70%!这所顶尖大学毕业生:不读研怎么找工作?
  2. JQuery实现父级选择器(广告实现)
  3. 从源码分析DEARGUI之add_plot和add_line_series
  4. 24张IT工程师技能图谱,这些你都会吗?
  5. linux 文件系统覆盖目录,Linux内核裁减及根文件系统定制
  6. 漫画:IT人的大阅兵,十分精彩!
  7. java netty socket_Java-彻底弄懂netty-原来netty是这样启动的-知识铺
  8. Windows API 逐个逐个学MessageBox(5) 遍历驱动器并获取驱动器属性 GetLogicalDriveStrings、GetDriveTypeA...
  9. HMM:隐马尔可夫模型 - 表示
  10. Es6语法实现的转盘抽奖效果——可配置转盘的抽奖概率
  11. 华为U9508一键root
  12. python报错:RuntimeError
  13. 小象学院—小象学院—Python学习联盟09—空气质量指数计算
  14. 用EXCEL做九九乘法表
  15. STM32中断分配——抢占优先级与响应优先级
  16. android 定时推送提醒,使用workManager实现每日定时推送通知
  17. 习题 11.1 将例11.1的程序片断补充和改写成一个完整、正确的程序,用公用继承方式。在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上。。
  18. 移动端seo优化,来自对百度移动搜索建站优化白皮书的整理
  19. 基于stm32Cubemx的矩阵键盘配置
  20. 训练你的逆向思维能力

热门文章

  1. 牛客刷题笔记-数据库选择题(101-200)
  2. [NOI2007]生成树计数
  3. 针对无人机的发动机控制仿真验证平台
  4. 网站空间跟服务器区别,网站空间和服务器的区别有哪些?
  5. 2016研一下学期规划
  6. C++ 怎样输入字符串
  7. linux系统777,drwxr-xr-x权限详解
  8. web3j用于solidity智能合约maven插件
  9. Memcached 工作原理介绍
  10. Numpy 中 np.vstack() 和 np.hstack() 简单解析