机器谱

S109】遥控摆臂履带小车

图文展示3264(1)

图文展示3264(1)

副标题

作品说明

作者:罗森涛 沈峰 陆剑涛 祝增辉

单位:杭州师范大学钱江学院

指导老师:吴小涛 孙红梅

      在微小型履带机器人方面美国走在了世界的前列,代表机器人有Packbot机器人、Talon 机器人、NUGV 等。我国微小型机器,人的研究和开发晚于西方的一些发达国家,我国是从20世纪80年代开始机器人领域的研究的。其中具有代表性的有中国科学院研制的复合移动机器人“灵晰-B”型排爆机器人、“龙卫士Dragon GuardX3B反恐机器人”、“JW-901 排爆机器人”等。

      本作品设计结构新颖,能实现过坑、越障等动作、还能实现远程遥控控制。通过在机器人机架上加装其他功能的模块来实现不同的使用功能,本作品设计的意义是为机器人提供一个动力输出平台,为开发各种功能的机器人提供基础平台。此设计移动方案的选择是采用了履带式驱动结构,结构整体使用模块化设计,以便后续拆卸维修,可以适应于各种复杂的路面,并可主动控制前后两侧摇臂的转动来调节机器人的运动姿态,从而达到辅助过坑、越障等动作。经过合理的设计后机器人将具有很好的环境适应能力、机动能力并能承受一定的掉落冲击,此设计的移动机构主要由两部分组成:辅助轮摇臂转动机构、履带及履带轮运动机构。      

      关键词:履带机器人、履带移动机构、红外遥控


1. 引言

1.1 履带机器人的现状及发展

      20世纪60年代到70年代,想到工业机器人印入脑海的便是自动机械手。机器人移动功能的大力研究和开发是20世纪80年代以后才开始,现在作为移动机器人而研制的移动机械类型已远远超过了机械手。尤其是履带式机器人,不仅是生物体中没见过的移动形态,而且能够在复杂的环境下行进。

      履带式机器人因采用履带式传动而得名。其最大特征是将圆状的循环轨道履带套在若干车轮上,使车轮不与地面直接接触,利用履带缓冲地面带来的冲击,  使机器,人能够适应各种路面状况。目前六履带摆臂式搜救机器人还是局限于单个或两个自由度。其主要由机械本体、控制系统、导航系统等部分组成。六履带摆臂式搜救机器人的研究涉及以下几个方面,首先是移动方式的选择,对于履带式移动机器人,可以是两履带式、四履带式、六履带式等。其次,考虑驱动器的控制,以使机器人达到期望的功能。再者,必须考虑导航或路径规划,如传感信息融合,特征提取,避碰以及环境映射。最后,考虑摆臂角的原理,这方面需要重点考虑,通过控制摇臂的角度来改变自身高度以达到越障过坑功能是这种机器人的最大特点。对于这些问题可归结为:机械结构设计、控制系统设计、运动学与动力学建模、导航与定位、多传感器信息融合等。

1.2 方案提出

      随着社会的发展,我们面临的自身能办、能量的局限越来越多,所以我们创造了各种类型的机器人来辅助或代替我们完成任务。

      履带式机器人包括侦察机器人、巡逻机器人、爆炸处理机器人、步频支援机器人以及复杂环境下搜救机器人等,用来代替我们进入危险环境下完成一些如侦查、搜集资料、救援等工作,从而减少了我们工作的危险系数,在我们未来的生活与工作中起到非常重要的作用。民用履带式机器人被广泛用于工业生产等各种服务领域,如生产线传输、清扫导盲和搜救复杂环境下的资料等各个方面。

      但我国对机器人研究起步较晚,大多数尚处于某个单项研究阶段,主要的研究项目有清华大学智能移动机器人于1994年通过鉴定,还有上海交通大学的地面移动消防机器人已投入使用。北京理工大学、南京理工大学等单位承担的总装项目“地面军用机器人技术”研究是以卡车、面包车作为平台的,是大型智能作战平台。中国科学院沈阳自动化研究所的AGC和防爆机器人,中国科学院自动化自行设计、制造的全方位移动式机器人视觉导航系统,哈尔滨工业大学于1996年研制成功的导游机器人等。


2. 设计方案
2.1设计思路

      本设计是以Arduino板为核心,通过红外遥控和红外接收器来实现数据指令的传输,Arduino处理数据后,通过输出高低电平给电机模块,从而控制电机及履带轮带动小车行走。小车采用两轮后驱,防止前后轮转速不同,影响履带张紧程度。控制板通过输出脉冲电流来控制舵机的转动,进而与电机组合成多种运动,实现小车多个功能。

2.2 设计特点

      具备履带轮动功能:由2个直流电机通过电机驱动控制履带轮转动,带动同步履带传动,进而下实现小车的行走。

      ② 具备辅助轮摇臂摆动功能:可主动控制前后两侧摇臂的转动来调节机器人的运动姿态,从而达到辅助过坑、越障等动作。

      具备红外遥控功能:可使用红外遥控器控制小车的各个动作。

2.3 机构原理

      越障履带小车主要由履带传动装置、两个舵机控制的摇臂及辅助轮组成。

作品说明

机构原理图

2.4 履带机器人的运动特性

平面运动及转弯

      平面运动及转弯是最基本的运动方式,当两侧的履带同向等速运动时,则表现为直线行走,当两侧履带反向等速运动可实现原地零半径回转,而不同速度同向运动可实现任意半径转向。

      当遇到小坡度的斜坡时,可由前辅助轮导向直接爬坡而不必采取其他动作,从而可减少对驱动控制系统要求

② 越障和爬台阶

      小车利用摆臂前辅助轮进行爬台阶,由于小车摆臂能把车体抬起,所以可越过与车身等高的台阶。遇到台阶时,前摆臂向下摆动时车头抬起,履带利用齿形对台阶的抓爬力来向上攀爬,同时后摆臂向下摆动使车体后端太高,小车继续前行,重心越过台阶后,前后摆臂向上归位。整个过程中,履带始终向前爬行。

2.5 跨越台阶分析

     当小车爬台阶时,机器人履带底线与地面之间的夹角慢慢增大,当重心越过台阶的支撑点时,则完成了爬越台阶的动作。如下图所示,由运动过程可以看出,重心的位置处于临界状态,机器人重心只有越过台阶边缘,机器人才能成功的越过台阶。由此可以分析出机器人的最大攀爬高度。

      小车加装后臂,可以大幅提升跨越台阶的高度,如下图所示,在后臂舵机的驱动下,后臂辅助轮抬起,成90°直立,在机器人跨越的高度又要高出H,本次设计的小车可攀爬台阶的最大高度为10cm。

3. 结构设计

3.1 动力装置

      动力装置由底板、电机、履带轮履带、联轴器等组成,电机通过支架固定到底板上,联轴器将电机输出轴与履带轮相接履带轮再带动履带转动,从而使小车具备行走功能。

3.2 摆臂支撑装置

摆臂主要由舵机、支架以及辅助轮组成。摆臂固定在小车前后两端。当小车遇到台阶时,小车通过控制舵机的转动角度,使摆臂上下摆动支撑小车与攀爬。在摆臂最前端装有一对辅助轮,可以在攀爬和支撑减少摩擦的同时也起到的辅助导向的作用。


4. 控制系统

4.1 Arduino控制板

       Arduino是一款便捷灵活、方便上手的开源电子原型平台。它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个主要的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。

Ardunio主控板

4.2 红外模块

小车由红外遥控纯开环控制。首先由红外接收器接收红外遥控器发出的特定的红外码。将这些特定的红外码储存在Arduino板中,当接收到特定的红外码后,对应的执行特定的输出。

     在使用红外遥控前,要先进行红外适配。利用如下程序,记下各按键对应的红外码。

#include <IRremote.h>   //调出Arduino函数库中的红外控制函数

int RECV_PIN = 11;     //将红外信号端接11号引脚

IRrecv irrecv(RECV_PIN);  

decode_results results;

void setup()

{

  Serial.begin(9600);   //设置串口通信波特率9600

irrecv.enableIRIn();   // 开启接收信号

}

void loop() {

  if (irrecv.decode(&results)) {

     Serial.println(results.value, HEX);   //以16进制显示接收值

     irrecv.resume();   }

}


红外接收器

4.3 其他电子设备及参数

① 小车前后摇臂采用2个180度标准舵机控制。工作电源:4.8-6V;工作电流:<10mA;扭力:2.2kg·cm。

舵机

② 小车采用后置驱动,由两个单轴直流电机控制履带轮转动。工作电源:3-6V;工作电流:<80mA;转速:120转/分钟,扭力约1.0KG·cm。

直流电机

4.4 程序源代码
#include <IRremote.h>

int servoPin1=8;        //前舵机引脚

int servoPin2=7;         //后舵机引脚

int RECV_PIN = 11;      //红外引脚

int velocity;           //定义速率

IRrecv irrecv(RECV_PIN);   

decode_results results;  

void setup()

{

  Serial.begin(9600);  

irrecv.enableIRIn();    // 开启接收信号

  pinMode( 5 , OUTPUT);     

  pinMode( 6 , OUTPUT);   

  pinMode( 9 , OUTPUT);   

  pinMode( 10 , OUTPUT);  

  velocity=150;

  pinMode(servoPin1,OUTPUT);   

  pinMode(servoPin2,OUTPUT);   

}

void servo1(int angle)//定义一个脉冲函数  

{

for(int i=0;i<50;i++)//发送50个脉冲

{     int pulsewidth=(angle*11)+500;

  //将角度转化为500--2480的脉宽值

digitalWrite(servoPin1,HIGH);

//将舵机接口电平至高

  delayMicroseconds(pulsewidth);

//延时脉宽值的微秒数

  digitalWrite(servoPin1,LOW);

  delayMicroseconds(20000-pulsewidth);

}

delay(100);

}

void servo2(int angle)

{

for(int i=0;i<50;i++)

{

  int pulsewidth=(angle*11)+500;

  digitalWrite(servoPin2,HIGH);

  delayMicroseconds(pulsewidth);

  digitalWrite(servoPin2,LOW);

  delayMicroseconds(20000-pulsewidth);

}

delay(100);}

void Right()       //小车右转子函数

{

analogWrite( 5 , velocity );

analogWrite( 6 , 0);   //驱动左侧电机正转

analogWrite( 9 , 0 );

analogWrite( 10 , velocity   );     //右侧电机反转

}

void Left()      //小车左转子函数

{

analogWrite( 5 ,0 );

analogWrite( 6 , velocity   );        //左侧电机反转

analogWrite( 9 , velocity);

analogWrite( 10 , 0 );//驱动右侧电机正转动

}

void Forwards()     //小车前进子函数

{

analogWrite( 5 , 0);

analogWrite( 6 , velocity );

analogWrite( 9 , 0 );

analogWrite( 10 , velocity );

}

void Stop()        //小车停止子函数

{

analogWrite( 5 , 0 );

analogWrite( 6 , 0 );

analogWrite( 9 , 0 );

analogWrite( 10 , 0 );

}

void houtui()

{

  analogWrite( 5 , velocity   );

analogWrite( 6 , 0 );

analogWrite( 9 , velocity );

analogWrite( 10 , 0 );

}

void loop() {

  if (irrecv.decode(&results)) {

     Serial.println(results.value, HEX); //以16进制显示接收值

     irrecv.resume();   }

switch(results.value)

  {

    case 0xFF629D:     // 前进

    Forwards();

    break;

         // 后退

      case 0xFFA857:

    houtui();

    break;

    case 0xFF22DD:    // 左转

    Left();

    break;

    case 0xFFC23D:   // 右转

    Right();

    break;

case 0xFF02FD:   //停止

    Stop();

    break;

     case 0xFF6897:  

    servo1(120); //1按键

    delay(1000);// 前舵机向下转至120度,延时一秒后回至30度。

    servo1(30);

    break;

   case 0xFFB04F:

    servo2(30); //3按键

    delay(1000); //后舵机向下转至30度,延时一秒后回至120度。

    servo2(120);

    break;

     case 0xFF30CF:  

   servo1(120) , servo2(30);   //4按键

   delay(1500);

    break;

  }

}


5. 作品实物图

参考文献

[1]孙恒,陈作模,葛文杰. 机械原理. 陕西:西北工业大学出版社.  2016.

[2] 李明亮. Arduino 项目DIY. 北京:清华大学出版社.  2015.

[3]张文建,房静,朱晓光,邢迪雄. 机器人创新设计与制作.北京:中国电力出版社.  2016.

* 本项目未获得作者开源授权,无法提供资料下载

© 2022 机器时代(北京)科技有限公司  版权所有
机器谱——机器人共享方案网站
学习  开发  设计  应用