Arduino与LEGO结合的六足机器人开发指南

Arduino与LEGO结合的六足机器人开发指南

一、前言

     许多科幻电影中的机器人能够像人类一样行走,甚至是大踏步地自信地行走。但在真实的世界里,大部分的机器人却是靠滚轮才能行动。只有在轨道与平直的路面上,滚轮才会起作用;而在那些软塌或不平整的路面上,单靠滚轮行走就会举步维艰。正因为存在着这些缺陷,地球上只有一半的陆地适合滚轮运动,而更广阔的土地则要凭着动物的双腿才能征服。因此,设计出有腿的机器人,让它们能够顺利到达那些只有动物才能到达的地方,就变得十分有必要了。

    美国宇航局科学家最新研制出ATHLETE机器人用于未来月球基地建设和发展。ATHLETE机器人顶部可放置15吨重的月球基地装置,它可以在月球上任意移动,能够抵达任何目的地。当在水平表面上时,ATHLETE机器人的车轮可加快行进速度;当遇到复杂的地形时,其灵活的6个爪子可以应付各种地形。

Arduino与LEGO结合的六足机器人开发指南

图1 ATHLETE机器人

ATHLETE机器人是工业级机器人,对于机器人发展的热点,也是全世界创客爱好者最热衷的探索对象,网络上出现了各种算法、材质和结构的六足机器人资讯。如果只是让六足机器人走起来,实际上并不难,就是“三角步态”策略即可,即三条腿着地,另外三条腿抬起迈出步伐,然后交替反复。直接采用32路舵机控制板编制了舵机动作序列,让12个舵机驱动的六足机器人成功地行走起来了。

 

二、六足机器人的机械组成

     国内的机器人爱好者苦于条件所限,不可能像专门公司或者国外发烧友那样,拥有先进的CNC机床和3D打印机,可以针对特定的机器人项目,制作相应尺寸和形状的机械结构件。当然淘宝上也有些制作机器人的结构件,但是缺少齿轮、链轮等传动件,而且重组性不强,大都只能搭建几个选定的机器人作品,想用那些结构件创意出自己设计的机器人项目,困难比较大。所以由于机械结构件的局限,国内网路上的智能电控创意作品主要停留在纯电子趣味实验阶段,很少做到机电结合。

    那么有没有种类丰富、高效方便的机械结构件产品可以为电控系统提供机器人应用的机械平台,我认为国际上流行的乐高创意积木是一个很好的选择。

   辉盛9克mini舵机并不是乐高公司出品的电机,所以如何把mini舵机安装到乐高积木上,而且要做到舵机输出轴与支撑它的乐高积木孔之间距离,在X和Y轴两个方向上,都为乐高孔距的整数倍(乐高标准孔距为8mm)。这就需要制作一个专门适合乐高积木的舵机连接板。如图2的a画面所示。

    现在淘宝上已经有这样的连接板,可以买到,大家不妨看看,

http://ardu.taobao.com/search.htm?spm=a1z10.1.w588618719.6.nvlpqm&scid=626612911&scname=wNa43w%3D%3D&checkedRange=true&queryType=cat。哪位高手也可以自己花精力用雕刻机做几个,当然安装孔的间距和配合精度要做到位才行。

    有了专门的舵机连接板,不用任何机械加工,甚至不需要螺钉螺帽连接,仅用乐高积木。按照图2所示步骤,就可以搭建出这个六足机器人了。该机器人左右两侧各分布三条腿,每条腿由两个舵机控制,这两个舵机分别起着大腿关节和小腿关节的作用。

Arduino与LEGO结合的六足机器人开发指南

图2 六足机器人的安装步骤图

安装完成后,六足机器人的全景图如下。

Arduino与LEGO结合的六足机器人开发指南

图3 六足机器人全景图

 

三、六足机器人的电控组成

    控制机器人12个mini舵机的是DFRobot公司出品的USB SSC32舵机控制板,该控制板的各端口分布和功能说明图如下。

Arduino与LEGO结合的六足机器人开发指南

图4  32路舵机控制板的端口分布和功能说明

六足机器人左侧6个舵机的输出端子分别插接在控制板的1到6舵机通道,而右侧6个舵机插接在17到22舵机通道。控制板的通信波特率,我设置为115200b/s,通过图4所示“7拨码开关”来设置,把两个拨码开关都拨到ON端即可。

    舵机控制板与PC机的通信采用蓝牙模式,在控制板的“16 数传接口”上插入蓝牙模块,蓝牙模块也要设置为波特率为115200b/s,并采用从机通信模式。在PC机的USB插座上插入蓝牙适配器,利用了IVT蓝牙管理软件进行上下位机的连接,这次我在PC机上操作生成的串口号为COM17。

    上图中标号为1、8、10和12的端口都可以供电,1号和10号端口供电给逻辑部分,8号和12号端口供电给舵机部分,由于机器人的电控仅用一块7.4V、900ma的锂聚合物电池供电,所以逻辑部分和舵机部分共用电源。于是“11 VL和VS1连通跳线”帽要插上,同时“2 USB供电选择跳线”帽不插上,断开,不采用电脑USB供电。 

    值得注意的是,7.4V锂电池不能直接接在控制板上给舵机供电,因为mini舵机的供电电压不能超过6V,否则会出现异常噪音,不能正常工作,所以锂电池要接上一个降压模块才能给舵机供电。我用的这个降压模块的型号为DPC-1,如图6所示,它的输入电压为6~8.4V,输出电压为5V,电流为2A。这样就达到了给12路舵机供电的要求。

Arduino与LEGO结合的六足机器人开发指南

图5  7.4V、900ma的锂聚合物电池

Arduino与LEGO结合的六足机器人开发指南

图6 DPC-1降压转换线

 

三、六足机器人的软件设计

    硬件安装与设置好以后,就可以在PC机上,利用名称为“USB SSC32V2.0(动作存储)”的舵机控制软件,开始通过”示教“的方法,确定六足机器人每一个步态中各舵机的转动角度,并把它们进行添加、记录、保存、下载和运行。

Arduino与LEGO结合的六足机器人开发指南

图7 舵机控制软件

图7所示,软件打开后,把串口号设置为COM17,波特率为115200b/s,然后点“连接”按钮,实现上位机与舵机控制板的联机,继续点“编辑模式”按钮,再点击您不需要用到的舵机编辑栏中的“子面板开关”,把那些子面板关闭不显示,如上图,只保留了用到的1~6和17~22舵机编辑的子面板,这样可以在调试12个舵机转角位置时,更直观,更有针对性。舵机1、3、5对应机器人左侧腿部由前到后三个大腿关节,舵机2、4、6对应同侧的三个小腿关节,同理,舵机17~22分别对应机器人右侧腿部的大腿和小腿关节。

12个舵机都支持180度转角,舵机的转动角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的,标准PWM信号的周期固定为20ms(50Hz),脉冲宽度在500us到2500us之间,脉宽和舵机的转角0°~180°相对应。在安装机器人之前,应该事先把所有舵机转角都设置在90度位置,90度转角对应的PWM信号脉宽应为1500us,可以通过该软件各舵机编辑子面板中的水平游标尺来设置。值得注意的是,实际上在安装时,由于各种因素,不可避免会发生安装偏差,所以安装完成后,如果各舵机PWM值都为1500us,则机器人的大、小腿与身体的位置或许不能做到相互垂直。所以机器人安装完后,还要用这个控制软件重新微调各舵机的脉宽值,以确保机器人处于正确的初始步态位置,同时要记录下此时的各舵机的脉宽值。下面假设以1500us为舵机初始脉宽值,来讲解机器人步态设置过程。

    从机器人初始步态开始,需要一动作一个动作地确定12个舵机的角度位置,下面以图8为例,来讲解机器人前进步态设置。图中,有A到H八个子画面组成,矩形方框代表机器人的身体,身体两侧的蓝色线条代表大腿,而黑色线条为小腿,红色线条表示了正在动作的部分,同时用箭头指示了动作的方向。

    A画面是机器人初始步态,大腿层面与身体水平,小腿与大腿层面垂直并着地。B画面展示的是小腿着地不动,6条大腿一起向后转动18度,18度对应PWM脉宽值为200us,由于右侧大腿向后转动时,舵机是顺时针方向转动的,而左侧大腿向后转动时,舵机是反时针转动的,所以下面所示前进动作序列表中B动作的右侧大腿舵机脉宽值从1500us变到1300us,而左侧舵机脉宽值从1500us变到1700us。C画面展示的是左侧腿部的前后两条小腿向前抬起36度,同时右侧腿部中间小腿向前也抬起36度,另外3条小腿着地不动。36度转角相当于脉宽值400us,所以序列表1的C动作中,左侧小腿关节舵机的脉宽值从1500us变到1100us,而右侧舵机脉宽值从1500us变到1900us。3条小腿抬起,另外3条小腿着地,这样抬起的3条小腿对应的大腿就方便向前迈出步伐,驱动舵机的脉宽值从初始位置相对变化了400us,如D画面所示。然后抬起的3条小腿向后蹬地,相应的3个舵机脉宽值回到初始位置1500us,如E画面所示。接着,如F、G、H画面,刚才没有迈步的小腿和大腿继续向前动作。

    这样一共8个动作,形成一个循环,以此往复,六足机器人就能前进了。Arduino与LEGO结合的六足机器人开发指南

图8 六足机器人前进步态图

Arduino与LEGO结合的六足机器人开发指南

表1 六足机器人前进步态动作序列表

按照“三角步态”策略,同理可以设计出六足机器人后退、左转和右转的动作序列,下面是左转的步态图和动作序列表。注意,对于六足机器人转弯的步态,它左右两侧的小腿抬起和大腿迈步的方向应与机器人转动方向一致。

Arduino与LEGO结合的六足机器人开发指南

图9 六足机器人左转步态图

Arduino与LEGO结合的六足机器人开发指南

表2 六足机器人左转步态动作序列表

左转的步态循环也由8个动作序列组成,每一个动作序列通过舵机控制软件中的各舵机编辑子面板中的水平游标调整好后,点击图7中的“添加”按钮,加入到动作序列文档,然后点击“保存”,以待以后可以重新打开并编辑。

 

四、六足机器人的软件下载和运行 

    舵机控制软件除了可以确定动作序列功能,还具有下载和脱机运行的功能。

    把机器人前进、后退、左转和右转分成4个动作组,分别下载到舵机控制板的存储器芯片里。点击图7中的“下载”按钮,出现图10下载对话框,我把“前进”动作组编号设为0,其它3个动作组的编号分别设置为1、2、3,接着点击对话框中的“确定”按钮。注意,每个动作组的动作序列文件的存储单元不能重叠,可以通过设置“数据起始地址”来避免地址重叠。比如动作组编号0的文件,就占用了存储地址为0~885,所以动作组编号1的文件,我选择从地址900开始存储,这样就避免了这个问题,如图10所示。

Arduino与LEGO结合的六足机器人开发指南

图10 舵机控制软件的下载对话框

击图7中“脱机设置”按钮,出现对话框,图11所示,选择动作组编号,再点击“启动”按钮,刚才下载到舵机控制板里的文件,就可以脱机运行,现在可以观测一下六足机器人是怎样一个表现了。

Arduino与LEGO结合的六足机器人开发指南

图11 舵机控制软件的脱机设置对话框

由于PC机与舵机控制板之间是无线蓝牙连接,这样舵机控制软件就可以毫无牵挂地控制着这个六足机器人,完成前后左右行走的所有步态。

 

五、结束语

    USB SSC32舵机控制板到底有啥优势,总结有五点:1、对于多舵机设备而言,确定每一个动作的各舵机转角参数实在是件不容易的事,有了配套的上位机舵机控制软件,可通过“示教”的方法确定舵机参数,然后调试、记录、下载、运行一气呵成,使软件编制变得轻松方便;2、舵机控制板上有一块存储器芯片,可以存储多组动作序列,这样上位计算机,发几条字符串命令,就可以让多舵机机器人做出一套套复杂的动作组合,当然也可以通过字符串命令实时控制每个舵机各自的动作细节;3、舵机控制板可以安装蓝牙模块或者APC220无线数传,这样可以让舵机控制板控制的机器人摆脱有线的束缚;4、32路舵机控制板实际上可以看成一个输入输出接口板,它自己并没有程序思考能力,大家可能认为有点遗憾,但是把大脑交给远端的计算能力更强的PC机,不是不用担心Arduino UNO控制器可怜的CPU能力无以应付智能机器人“繁琐”的计算工作吗?或许您还可以利用PC机做些可视化的操作,所以这样的设计好像也还蛮合理的;5、舵机控制板不仅可以同时控制多达32路的伺服电机,可贵的是它还具有4个数字和模拟输入接口,可以接5V电压的传感器,这样就能实现带反馈的闭环控制,让多舵机设备,比如机器蜘蛛,可以根据周边环境变化,做出相应的动作反映。

    我们经常研习乐高机器人,由于它的控制器只能控制3个伺服电机,所以在控制机器人瓦力时,传动链设计得比较复杂,不是普通爱好者能设计出来的,如果机器人瓦力的手、脚和脸部表情,都由一个个舵机来直接驱动,这样传动链就可以大大简化,从而降低了您设计机器人机械机构的难度。而且爱好者们也发现往往是机器人中具有传动链功能的零件,比如齿轮、凸轮、连杆和链条等,是不容易在淘宝上找到,也难以自行加工,感觉“巧妇难为无米”,那么用DFRobot公司出品的32路舵机控制板来驱动多个舵机,传动链部件通通拿掉,让电机直接带动您希望动作的执行部件,再编写几行程序,就OK,这样的模型制作不是更具可行性吗!

    传统机器往往只有一两台定速电机,然后通过齿轮齿条、蜗轮蜗杆等复杂的传动机构,把动力分配和变速到多个执行部件。而现代机器往往配备了多台伺服电机,这些电机直接连接到执行部件,让各执行部件按照规划好的路线、速度和力量运行。控制这些伺服电机的就是智能控制器中的软件,软件起到了传统机器中的那些传动链和变速箱的作用,而且运行起来还更可靠。我的这个六足机器人就很好地体现了现代机器的特点,没有传动链,利用软件和多伺服电机直接控制着机器的各部件协调地运行。

国内创客氛围与发达国家还是有很大差距,但是毕竟一个这样大的国家,还是有一些不落入世俗,不畏惧权威,乐于挑战自己能力极限,勇于实践自己科技梦想的人,希望大家能够成为这样的人!!!