机器谱

S133】可伸展机械臂式小车

图文展示3264(1)

图文展示3264(1)

副标题

作品说明

作者:李森豪 刘雅婷 刘臻哲

单位:武汉科技大学

指导老师:曾飞 陶波

      针对中国工程机器人大赛探索者全地形赛设计的一款一端可伸展机械臂履带式循迹越障小车。该机器人具有检测信号,识别信号做出正确的循迹和越障程序。相比较传统履带式循迹越障小车,车身前端可伸展机械臂履带式循迹越障小车运用串口通信、路径规划、LED显示等创新技术,使小车具有准确度高、响应灵敏、适应性好的特点。本文详细介绍了小车设计过程思路和算法策略分析。

      关键词:履带式机器人;控制系统;越障

1. 综述

      自动循迹小车,也就是最简单的轮式机器人,在业内已经有一系相当成熟的研究背景和研究成果,适合在一些特殊环境中工作,因其成本低廉,目前已在许多工业场合获得广泛应用。但针对本次中国工程机器人大赛探索者全地形比赛,主要存在的技术问题是如何设计一个优良并符合实际使用情况的车身,如何准确识别障碍并在循迹功能中添加合适且智能的越障控制程序,达到集环境感知、规划决策、自动行驶等功能于一体的综合系统。其涉及计算机、传感、信息、通讯及自动控制等技术,是典型高新技术综合体。

      智能循迹越障小车以比赛组委会提供的一套Brasa主控板与Bigfish扩展板的组合作为控制器,采用四个灰度传感器和一个触须传感器进行探测识别,两个360舵机和一个270舵机驱动循迹越障。舵机由主控板直接供电。【其中Brasa主控板处理器核心为ATmega328,具有14路数字输入/输出口;Bigfish扩展板拓展LED点阵、伺服电机接口、直流电机驱动和通用扩展接口】

2. 系统整体设计

2.1 设计要求

      在本次的中国工程机器人大赛探索者全地形赛中,要求参赛队伍设计的智能小车具有自动循迹功能,比赛场地上铺有黑线,通过灰度传感器对黑线的检测信号的反馈控制车身运动速度和方向,除直线循迹外还存在典型的十字交点路线和丁字交点路线,保证循迹路线的完整结构需要考虑并处理信号的识别情况。除循迹要求外,越障要求包含栅格、减速带、小型阶梯、石块地形、方形隧道、U型隧道、防滑带、柔软草地、大型阶梯、窄桥,最后还需要攀登高台。

循迹要求

      循迹功能主要包含直线行驶、转弯、丁字交点转弯、十字交点转弯。其中直线行驶要求小车能快速准确的识别信号并能迅速进行调整,但考虑到实际情况,小车在直线行驶的时候电机不能速度太快,否则会导致车身摆动太大会影响越障的准备工作。转弯、丁字交点转弯、十字交点转弯对小车的识别系统的准确性和响应速度有着严格的要求,并且考虑到场地障碍物的摆放位置,小车车身不能过长或者速度过快,否则会出现转弯半径过大,有些转弯会被障碍物阻挡住造成无法完成转弯车身卡死的现象。

越障要求

      越障功能需要越过栅格、减速带、小型阶梯、石块地形、方形隧道、U型隧道、防滑带、柔软草地、大型阶梯、窄桥,最后还需要攀登高台。其中石块地形、减速带、柔软草地和栅格对小车的轮子选择有一定的要求,小型阶梯、大型阶梯、窄桥和攀登高台需要小车有一定的登高越障能力。方形隧道和U型隧道则限制了小车车身长度和高度,若太高或者太长则无法进入隧道完成越障程序。

新增规则要求

      重新运行次数不得超过5次;修改11号“高台”障碍得分的条件为:11号障碍“高台”通过条件:登上并充分进入高台后需退回到登上高台时辅助的障碍,并且沿着该辅助障碍物的黑线方向通过该障碍。此次更改对程序以及车身结构提高了要求,整体设计更应注重稳定性。

2.2 智能小车系统总体设计简介

      根据灰度传感器方案设计,小车共包括五大模块:灰度传感器模块触须传感器模块、循迹模块、越障模块、电源模块。各个模块的作用如下所示:

      灰度传感器模块:在该模块中对采集到的信息进行处理,以此信息来判断当前智能小车所处赛道的变化趋势、小车车身在赛道上的倾斜情况信息。将处理得到的信息传给控制板以采取相应的控制决策。

      触须传感器模块:该模块的设计主要用于与车身前臂搭配使用,当触须识别到前方障碍,由程序执行放下车身前臂的命令,以平稳通过障碍。该模块的设计使整体设计更加具有稳定性。

      循迹模块:我们分别对三个、四个、五个传感器循迹进行了测试,根据测试结果,我们最终确定小车采用四个灰度传感器作为循迹模块的传感检测系统。相对于三个传感器循迹,四个传感器的调整范围更大,而且对于小车越过障碍后的车身与黑线的位置偏差要求更低;又因为一个bigfish板只有四个传感器接口,所以用五个传感器会给主控板更大的负担,容易出现烧板的现象。因此四个传感器不仅充分利用了bigfish板的传感器接口,还给与小车循迹时更大的偏差范围,提高了小车运行时的容错率。

      越障模块:我们通过触须和灰度传感器检测执行越障程序。我们检测每个障碍与其对应的十字路口的距离,来调整小车循迹时间,当小车运行时检测到相应的十字路口,一定时间后前端舵机放下车轮进行越障,实践证明这种越障方式不仅节约时间,还使小车运行时是连续的,车身不用与障碍接触,减少了因为接触导致车身不正而越障失败的失误率。

3. 机械结构设计

      考虑到循迹、越障、拼装误差和后期调试的综合要求,小车结构必需简单可靠,同时不能过于笨重和复杂。结合比赛要求和探索者模块化设计的理念,我们将小车机械结构共分为五大模块,分别为:主体车身和驱动模块、越障模块、循迹模块、主控模块和电源模块。

3.1 初步尝试

      在前期准备工作中,我们首先考虑到采用履带的方式驱动小车行驶,这样可以确保小车在栅格和草地等不同环境中的行动能力。在组装车身的过程中,我们的首先的想法是做一个带倾角的履带式小车进行越障和循迹。但经过后期的调试后,发现车身长度太长会导致隧道无法通过,车身太短会导致重心偏后导致越障的时候会出现翻车现象,同时由于轮子的尺寸限制使的灰度传感器的加装位置十分难确定,过低会导致越障时灰度传感器被磨损,过高会影响灰度传感器的识别正确率。同时由于车身仅有四个轮子,所以导致车身容易偏差,越障程序执行完毕后需要一段很复杂的修正程序后才能再进行循迹程序。考虑到方案的容错性复杂性,后期我们抛弃了这种方案。转而使用可用舵机调整支架变形的小车结构。

作品说明

小车整体外观

3.2 主体车身和驱动结构

      主体车身驱动采用两个360舵机驱动,用舵机支架固定在双足支杆上,并将双足支杆通过40mm机械手固定在7*11孔平板上。采用对称的方式进行设计,可以有效保证车身的稳定性。并且因为设计的简单化,使得主体车身在方案上有着很强适应性和优良的加装性能。能避免后来再对车身结构做出比较大的改变。

舵机位置

3.3 越障模块

      小车越障模块主要是通过触须传感器检测前方障碍控制,由舵机调整放下或拉起的前伸轮构成。同时前伸轮也包含着两个直流电机驱动模块,确保小车在越障的时候有足够的扭矩和马力。直流电机通过直流电机支架组成对称结构固定在3*5双折面板上,在通过机械手指和双足连杆连接到双折面板上,两层固定方式确保结构更加稳固。同时将大舵机及其支架固定在舵机双折弯上。再将双折面板和舵机双折弯进行连接固定。

触须传感器

越障时车身形态

前导轮

3.4 循迹模块

      考虑到循迹程序的实现,小车采用四个灰度传感器呈直线加装在双足支杆上,并通过螺丝和螺母连接到车身前端的车架上。在螺丝与传感器之间加装两个螺母,使小车越障时,传感器不与障碍物接触,减少磨损。同时在传感器上粘贴LED灯,避免循迹时周围光线对传感器的影响,提高小车循迹的稳定性。

灰度传感器

3.5 主控模块

      在车身前端的两个360舵机支架上安装一7*11孔平板,将主控模板粘贴在这块板上。主控模块采用一套Brasa主控板和Bigfish扩展板进行循迹和越障的控制,通过螺丝和螺柱来调节高度使主控板方便接线,并且两块主控板处于对称的位置,有利于车身的稳定。

4. 硬件设计

4.1 循迹设计

      理论上循迹传感器模块设计传感器数量越多,循迹越准确。但过多的检测识别信号会导致车身经常调整,使小车行驶的平稳性大打折扣。考虑到黑线具有一定宽度(3.8cm±0.2)且除直线循迹外,循迹传感器模块还需要识别丁字交点和十字交点的情况,我们采用了间隔2cm左右的直线排列的四个灰度传感器装在车身前端下部,检测车身方向并反馈合适的调节信号,不会因为过频繁的反馈而导致车身频繁调整。同时结合路径规划可以有效保证识别精度和识别准确度。确保小车循迹功能的稳定性和迅捷性。

4.2 越障设计

      理论上合适的动力和倾角即可满足本次比赛越障需求,但实际调试发现仅凭履带式驱动轮和车身前端倾角会导致循迹模块没有合适的地方放置,会干扰履带的行进或者在越障时循迹模块容易卡在障碍物地形中。所以我们在后期对小车进行改进,采用两对可展开驱动轮的支撑轮系和舵机组合的越障模块来确保小车车身在越障时有合适的倾角,同时也不会影响到循迹模块的循迹效果。

4.3 控制设计

      考虑到轮系和越障时的支撑要求,小车共采用两个360舵机和一个180舵机。其中车身采用两个360舵机驱动完成循迹要求,前端的展开式驱动轮越障结构采用两个直流电机和大舵机调整角度和提供驱动力。

5. 软件设计

5.1 循迹设计

直线和一般转弯交点设计

      由于过隧道对转弯处寻迹的要求更加精准,但在下障碍时转弯的寻迹需要更加平滑,于是我们采取了两种不同的寻迹分别进行处理。在隧道里的寻迹,小车采用四个灰度传感器设计循迹功能,直线和一般转弯交点设计采用前端4个灰度传感器进行反馈控制。合适的传感器间隔和详细的真值表可确保循迹和普通转弯功能的稳定性,如表1所示为循迹程序逻辑表。

1  循迹1逻辑表

表2  循迹2逻辑表

传感器序号(从左到右)

1
234

调整方向







传感器反馈信号

0
000

直行

0
001

大左转

0
010直行
0
011大左转
0
100直行
0
111大左转
1
000

大右转

1
001

直行

1
011大左转
1
100大右转
1
101大右转
1
110大右转
1
111直行
其它情况直行



传感器序号(从左到右)

1
234

调整方向







传感器反馈信号

0
000

直行

0
001

大左转

0
010直行
0
011小左转
0
100直行
0
111小左转
1
000

大右转

1
001

直行

1
011左转
1
100右转
1
101右转
1
110右转
1
111直行
其它情况直行



      在下障碍后的寻迹,小车采用四个灰度传感器设计循迹功能,直线和一般转弯交点设计采用前端4个灰度传感器进行反馈控制。合适的传感器间隔和详细的真值表可确保循迹和普通转弯功能的稳定性,如表2所示为循迹程序逻辑表。

十字交点和丁字交点循迹

      结合比赛场地要求,场地中共有四个十字交点和两个丁字交点,要想保持循迹和越障的连续性,则必须要对十字交点循迹和丁字交点循迹做出处理。首先我们想到的是用颜色识别传感器对十字交点处的色块进行识别,这种方案可以避免需要对丁字交点的识别处理,但实际使用过程中,我们发现颜色识别传感器对色别识别速度太慢,并且除此之外,考虑到草地障碍会对颜色识别器产生干扰,颜色识别模块需要前置判别语句或打断程序。可能还是需要用灰度传感器对十字交点进行识别,所以程序的易书写性和准确性,我们最后仅采用灰度传感器模块和路径规划对特殊交点进行处理。

      十字交点循迹在实际调试过程中,因为我们采用的是处于直线安装的4个灰度传感器,所以若采用简单的循迹方案,则肯定会出现误差大,稳定性不强的情况。经过多次调试之后,我们采用的方案为:当4个灰度传感器都检测到黑线时,系统会给与小车直行的命令。我们的路线中除了二级阶梯之后识别到十字交点处右转,其余全为在十字交点处直行,于是我们采取改变寻迹的方式来规划路径,在越过二级阶梯障碍之后的两个十字交点处右转,之后在遇到十字交点依然直行,这种方式比运用灰度传感器计数的方式更加稳定。

5.2 越障设计

地形障碍

      本次比赛地形障碍共有5种分别为:石块地形、草地、减速带、栅格和防滑带。其中地形障碍又可分为两类:石块地形、草地、减速带地形和栅格、防滑带障碍。地形障碍对小车进入障碍的方向角度和小车行驶的稳定性提出很高的要求,因为在障碍物上小车无法进行循迹,所以小车若稳定性不足或小车车身进入角度倾斜不正确,会导致小车驶出障碍时车身方向与正确线路偏差过大,这时循迹传感器很有可能位于比赛场地的白色区域内,小车无法循迹,并且无法设置合适的程序补救。所以地形障碍对小车进入障碍的角度和小车行驶的稳定性提出了很高的要求。同时除此特点外,栅格和防滑带对小车的越障能力有一定的要求,它们都有一定的高度,需要小车具有一定的攀爬能力,所以需要分开考虑。

       在实际越障过程中,我们采用的方案是放下位于车前端的机械臂,并且同时驱动两个360舵机和两个直流电机,加长车身长度来提高行驶的稳定性。同时机械臂可以控制放下角度和时间,来进行小车攀登动作,完成进入到障碍物中的过程,并且由路径规划程序反馈所越障碍情形,控制小车是保持放下机械臂直至越出障碍还是在障碍物上收回机械臂,进行越障操作。

阶梯障碍

      比赛场地内有小型阶梯和大型阶梯两个阶梯障碍,当小车由迹前进,调整程序进入越障阶段后,小车的驱动电机开始运动并配合有规律的放下——抬起机械臂的动作来调整小车Y轴行驶角度,来完成攀登动作最终实现越障功能。并在越障功能中加入调速程序,使小车在越障过程中不至于出现跌落或攀登不上障碍的情况。同时还需要调整越障时间,避免冲出比赛正确行驶路线的情况。

隧道障碍

      比赛要求中包含有U型隧道和方形隧道,在实际越障过程中,调整车身长度和宽度,通过速度控制和循迹功能,即可实现隧道越障功能。

窄桥和高台障碍

      窄桥障碍由于传感器高度和车身结构限制所以在登窄桥障碍时,必需放下前端机械臂,起到保护前端传感器的作用,避免被磨损或卡住车身的情况出现。

      此次比赛,高台障碍对小车攀登能力要求最高。结合实际情况和场地因素考虑,窄桥障碍高度高于大型阶梯,所以我们决定用窄桥障碍辅助小车登高。并且小车在攀登上窄桥后会原地360度旋转,再回到窄桥上。为了避免原地旋转车身出现倾斜情况,我们特地在旋转后后退,通过小车前的机械臂的导轮与高台边接触,通过高台边来实现车身的摆正。

5.3 创新综合设计

1)线路选择设计

      此次比赛明确要求规定,小车车身从障碍物正向驶入并正向离开障碍物即可得分。并且在限时的5分钟之内,若出现不理想情况,参赛队员可以随时向场内裁判示意暂停比赛,重新从出发区开始比赛。为应对比赛中出现的突发状况以及出现状况后更快的完成比赛任务,我们准备了五条比赛线路,分别为:

      石块地形——大型阶梯——U型隧道——防滑带——小型阶梯——减速带——草地——方形隧道——窄桥——高台——窄桥——栅格

      栅格——窄桥——高台——窄桥——方形隧道——草地——减速带——小型阶梯——防滑带——U型隧道——大型阶梯——石块地形

      减速带——草地——方形隧道——窄桥——栅格

      小型阶梯——防滑带——U型隧道——大型阶梯——石块地形

      栅格——窄桥——高台——窄桥

      赛时重新烧录程序会浪费大量时间,所以我们采用触须传感器识别来实现程序调换,并用LDA来显示。一般程序调换时,大家会选择触碰传感器来实现程序调换,但这样会需要一个传感器接口,这样只能用三个传感器来循迹,如果增加bigfish板增加攒感器接口,那样会增加主控板负担,容易出现程序混乱的情况。所以我们直接利用触须传感器来实现程序调换就可以实现四个传感器也只需要一块bigfish板。

2)转弯控制

      正常情况下,小车的转弯命令是控制两边车轮的速度差来实现左转,右转或是180度和360度转弯。而且绝大部分人会选择两边轮子都在转动只是转速不同。实践证明这种转弯方式,小车会陷入来回摇摆的状态,车身不稳定。我们采用的转弯方式是一边轮转动一边不转,这样再转弯时 ,小车不会出现左右摇摆的情况,整个车身非常稳定,而且转弯后可以迅速直行而不需要大范围循迹调整到直行状态

3)利用前导向轮摆正车身位置

      我们采用的是一条线路跑完全程,所以我们在上高台后还需要再从高台上回到大型阶梯上。当小车上高台后会原地转弯,但是在实际调试中,小车转弯后的车身位置偏差很大,所以我们让小车通过前导轮与高台边接触,通过前导轮让车身摆正,这样无论小车在高台上旋转后的位置偏差有多大都可以通过这个方法摆正。从而进行后面的路线。

4)触须传感器与灰度传感器结合使用

      触须传感器负责识别需要放下前臂的障碍,灰度传感器负责循迹前进,结合使用可以使整个越障过程更加具有可行性与稳定性。

5.4 核心源代码

以路径1为例

#include <Servo.h>

#include <SoftwareSerial.h>

Servo servo_pin_3;//左边360舵机

Servo servo_pin_4;//右边360舵机

Servo servo_pin_7;//前方吊臂180舵机

//Servo servo_pin_11;//尾部吊臂180舵机

int pin[4]={14,16,17,18};//定义灰度传感器的四个接口,从左到右依次为14,16,17,18,关系到后面的循迹子程序

int value_his;

int T=1;

int T1;

int T2;

int chu;

//int a=0;

void setup()

{ Serial.begin(9600);

  pinMode( 8, INPUT);//触须

  servo_pin_7.attach(7);//前舵机

  servo_pin_3.attach(3);//左舵机

  servo_pin_4.attach(4);//右舵机

  pinMode( 17, INPUT);

  pinMode( 18, INPUT);

  pinMode( 16, INPUT);

  pinMode( 14, INPUT);//传感器

 

  pinMode( 9 , OUTPUT);//电机+

  pinMode( 10 , OUTPUT);//电机-

  pinMode( 5 , OUTPUT);//LED-

  pinMode( 6 , OUTPUT);//LED+

 

  chu=digitalRead(8);

  servo_pin_7.write(190);//初始前舵机稍微抬起

 

}

void loop()

{   //ting();

        // delay (200);//左右电机不动

switch(T)

  {

      case 1: shikuai();//石块

               T=2;

               break;

      case 2: T1=millis();

              while (T==2)

              {T2=millis();

              if ((T2-T1)<1000)

              {xunji();

                }

               else

               {chuxu();

                }

                }  

                break;

      case 3: sanjitaijie();//3级阶梯高台

               T=4;

               break;

               

      case 4://U形隧道

              T1=millis();

              while (T==4)

              {T2=millis();

              if ((T2-T1)<10000)

              {xunji();

                }

               else

               {chuxu();

                }

                }  

                break;

       case 5: fanghuadai();//防滑带

               T=6;

               break;

       case 6://xunji();

              T1=millis();

              while (T==6)

              {T2=millis();

              if ((T2-T1)<1000)

              {xunji();

                }

               else

               {chuxu();

                }

                }  

                break;

        case 7: erjijieti();//2级阶梯

                   T=8;

                   break;

        case 8://xunji1();     

               T1=millis();

                while (T<9)

                {T2=millis();

                if ((T2-T1)<20000)

                {xunji1();

                  }

                else  

                  {T=9;

                   

                    }

                  }

                 

                 break;

      case 9:   T1=millis();

                while (T<10)

                {T2=millis();

                if ((T2-T1)<5000)

                {xunji();

                  }

                else  

                  {T=10;

                   

                    }

                  }

                 

                 break;

     case 10:   T1=millis();

                while (T<11)

                {T2=millis();

                if ((T2-T1)<30000)

                {xunji1();

                  }

                else  

                  {T=11;

                   

                    }

                  }

                 

                 break;

       

     case 11: chuxu();

               //T=12;

               break;

     case 12: jiansudai();//减速带

                  T=13;

                  break;

     case 13://xunji();

              T1=millis();

              while (T==13)

              {T2=millis();

              if ((T2-T1)<1000)

              {xunji();

                }

               else

               {chuxu();

                }

                }  

                break;       

     case 14: caodi();//草地

               T=15;

               break;

     case 15: //xunji();//直形隧道

              T1=millis();

              while (T==15)

              {T2=millis();

              if ((T2-T1)<8000)

              {xunji();

                }

               else

               {chuxu();

                }

                }  

                break;

     case 16: zhaiqiaogaotai();//窄桥上下高地

              T=17;

              break;           

     case 17://xunji();

              T1=millis();

              while (T==17)

              {T2=millis();

              if ((T2-T1)<1000)

              {xunji();

                }

               else

               {chuxu();

                }

                }  

                break;

       case 18: shange();//栅栏

               T=19;

               break;

   case 19:ting();//车子停止

   delay(10000);       

          break;         

  }

 

}


6. 系统开发与调试

6.1 循迹调试

      循迹调试主要分为普通循迹和交点循迹。普通循迹测好走直线需要的舵机速度和转弯速度即可。交点循迹除检测交点信号外,还需设定特定的转弯和延时才能确保每次在交点处稳定得到想要的转弯方向。

6.2 越障调试

      越障调试主要需要测定摆臂摆下的角度以及越障时摆臂的时间。

6.3 注意事项

      在实际操作过程中,需注意有些情况看似属于一般情况,但实际还需区别处理。如小车循迹速度和过草地的速度和减速带的速度,准备越过草地障碍的准备程序和准备越过栅格障碍的准备程序等等。想要小车循迹越障功能的完美实现,需要考虑理想情况和特殊情况的区别,细心观察得出结论并修改才能得到想要的小车功能。

7. 结论

      此次中国工程机器人大赛属于武汉科技大学第三次参加该赛事,所遇到的困难和问题都很多。但我们参赛队员饱含热情不抛弃不放弃,遇到问题就解决问题,在困难中探索,在困境中越障,同时不断尝试用新的方法来优化程序,使小车以更少的时间一次性走完。想必这也是此次比赛乃至中国机器人行业从业者的精神内涵。但值得一体的是,虽然此次属于第三次比赛,但我们也展示出了可贵的创新性和实用性。比如合理运用比赛规则,采用路径规划的处理,得到多条路径进行比赛,增强小车的容错性和灵活性。比如采用LED的方式显示路径条数,达到可视化的目的,方便调试程序得出结果。

      然而还需要改进的地方就是工作量太大,探索者平台为参赛选手提供了优秀的模块化平台。但结合实际参赛要求,在比赛中中如何带着镣铐跳舞成为我们的一大难题。虽然可以通过大量的实验检测使得数据贴合的更完美,但毕竟属于开环控制,所以我们离真正智能化还有很大的一段距离要走,这也正是我们未来的目标和奋斗的方向。同时为提供比赛的举办方和协办单位提出感谢,正是前行者们的不断努力才能使对机器人有着兴趣的广大爱好者们有着参赛机会和了解行业前沿知识的机会。相信每一个对机器人有兴趣的参赛者们最终也会铭记此次参赛经历。

参考文献

   文献类别

学位论文

学位论文

学位论文

专著

     专著

马世典.基于多传感器协同的智能循迹小车控制系统设计[D].江苏:江苏大学汽车工程研究院.2013

单以才.基于红外传感器的自主循迹小车控制算法设计与实现[D].南京:南京航天航空大学机电学院.2010

陈峰.一种新的履带机器人轨迹跟踪控制[D].长沙:中南大学信息科学与工程学院.2005

陈吕洲.Arduino程序设计基础[M].北京:北京航空航天大学出版社,2014: 1-286

Steven.F.Barrett.Arduino高级开发权威指南[M].北京:机械工业出版社,2014: 1-270


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

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