hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 459|回复: 0

小型三节履带底盘的制作

[复制链接]

557

主题

557

帖子

1898

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1898
发表于 2023-9-25 16:49:01 | 显示全部楼层 |阅读模式
1.运动功能说明

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















2. 结构说明

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






3. 运动功能实现


3.1 电子硬件

在这个示例中,我们采用了以下硬件,请大家参考:




       将2个圆周舵机分别装在Bigfish扩展板的舵机引脚上,左侧圆周舵机接D4号引脚;右侧圆周舵机接D3号引脚;将车头关节模块的舵机接在D7号引脚;车尾关节模块的舵机接在D8号引脚。并将主控板和电池在车身固定好。





3.2编写程序

编程环境:Arduino 1.8.19

前摆臂运动的代码:

/*------------------------------------------------------------------------------------  版权说明: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};

//程序初始化部分:使能舵机对象
voidsetup() {
  ServoArmHead.attach(Servo_Head_Pin);
  ServoArmTail.attach(Servo_Tail_Pin);
}

//主程序部分:前摆臂、后摆臂分别执行向上、水平、向下动作.
voidloop() {
  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秒
}

//前摆臂、后摆臂上、下、水平子函数
voidarm_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 <Servo.h>              //调用舵机库函数
#define Servo_Num 2             //定义舵机数量2
#define Left_Servo_Forward 70   //定义前进时小车左轮速度
#define Right_Servo_Forward 110 //定义前进时小车右轮速度
Servo Car_Servo[Servo_Num];     //声明舵机对象,表示声明了2个舵机对象

voidForward(); //前进
constint servo_pin[Servo_Num] = { 4, 3 };//定义舵机引脚号.
constint angle_init[Servo_Num] = { 90, 90 };//定义舵机初始化角度

//程序初始化部分:分别使能舵机对象,并设置各个舵机初始角度
voidsetup() {
  for( int i=0;i<Servo_Num;i++ ){
    Car_Servo<i>.attach( servo_pin<i> ); //使能舵机对象
    Car_Servo<i>.write( angle_init<i> ); //设置舵机初始角度
  }//即设定履带小车初始为停止状态
}

//主程序部分:三节履带车前进
voidloop() {
  Forward();
}

//前进子程序
voidForward() {
  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 <Servo.h>  //调用舵机库函数
#define Servo_Num 4 //定义舵机数量
Servo Car_Servo[Servo_Num]; //声明舵机对象,表示声明了3个舵机对象
constint servo_pin[Servo_Num] = { 4, 3, 7 ,8 };//定义舵机引脚号.
constint 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};

//程序初始化部分:分别使能舵机对象,并设置各个舵机初始角度
voidsetup() {
  for( int i=0;i<Servo_Num;i++ ){
    Car_Servo<i>.attach( servo_pin<i> ); //使能舵机对象
    Car_Servo<i>.write( angle_init<i> ); //设置舵机初始角度
  }//即设定履带小车初始为停止状态
}

//主程序部分:执行小车各个状态
voidloop()
{
  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毫秒
*/
voidCar_State( int car_state, unsignedlong 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文件

例程源代码







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2024-11-21 23:30 , Processed in 0.063206 second(s), 22 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

快速回复 返回顶部 返回列表