可自巡航的六足机器人任务1:目标分析与计划在本章中,我们要设计一个有足移动机器人。有足移动机器人无论是在研究领域还是在应用领域进来都非常的热。主要是因为,有足移动机器人不仅能够像传统的轮式机器人那样在平地上进行运动,更能够在不平整,甚至是坑洼的地表进行运动。在真实的行走任务中,它的优势可见一斑!在有足机器人领域,不同的设计主要有以下几个方面:足部数量,足部构型,步态规划等。我们使用创意之星2构件能够很方便地搭建各种有足机器人。今天,我们就来搭建一个六足的机器人。我们要设计的是一个六足机械,每个足上有三个驱动关节,这样总共是一个有18个电机的控制系统,可见控制器的使用串行总线协议是非常强劲的。在非人语音控制下,机器人能够根据红外传感器测得的前方障碍信息进行避障;在人语音控制下,机器人能够按照人的指令,进行前进后退转向跳舞等动作。为了实现该设计,首先需要将三自由度的腿设计好。之后,需要将腿与身体连接好。然后,需要一个可旋转的红外线传感器(IR)安装在机器人的头部。在构型搭建好了之后,需要对步态进行规划,我们选择自由式步态(freegait),这样能够使机器人的行走适应性更好。当所有基本设计都实现了之后,实现语音控制就水到渠成了!下面,从最简单的部分开始,一步一步实现我们的系统。任务2:搭建机器人三自由度足部连接:足与身机构连接:可旋转红外线接收器:机器人整体视图:值得注意的是,由于CDS5500工作在舵机模式时,测量角度是0-300°,中位为150°。我们在搭建构型的时候,尽量让机器人各个关节的初始位置保持在“中位”。在搭建构型时,需要先将CDS5500上电,让舵机轴转动的中位。再按照步态设计的需要将CDS5500和其它的结构件组装起来。这样能够保证舵机驱动的有效范围,避免随意装配舵机导致其可运动范围不能满足运动的需求。任务3:六足行走的基本步态——前进,后退几何学步态描述:在我们的设计中,六足呈辐射状均匀分布的,为了使得行走平稳对称,间隔的三条腿一组,两组腿循环往复地做行走的循环,以达到行进的目标。以向前行进为例,机器人着地腿将带动身体向前运动。由于一组腿之间相差120度的缘故,要尽量将每个腿在地面带动身体时的轨迹规划在与机器人前进方向平行的直线上,这样才能使机器人比较稳定地行进。设计思想:机器人持续行进要两组腿的配合,为了保证六足机器人行走的平稳性,我们将135定为一组腿,246定为一组腿。在这个进行步态的规划中,需要理论的分析与实验辅助相结合的方式,具体过程如下:建立Excel表格由于控制六足机器人的舵机很多,一共有18个,而分解出来的动作姿态更是很复杂,所以,一个直观而简洁的Excel表格是非常必要的,它可以帮我们理清思路,并且为以后的调试提供极大的方便。以行走姿态为例,Excel表格可以如下制作:横行为动作分解,每一个动作可以分解为多个位置,此表格就是将前进动作分解成为抬腿,迈腿,放腿,行进中位,收腿这几部分其中,横行为动作分解,每一个动作可以分解为多个位置,在控制时,只要告诉舵机每个位置的数值就可以了。此表格就是将前进动作分解成为抬腿,迈腿,放腿,行进中位,收腿这几部分,竖行为舵机号,六足机器人有18个舵机控制,A列即为1-18号舵机的编号。另外需要说明的是,此处的数值并不通用于所有的按照本设计搭出的六足机器人。因为每个机器人安装时的站立姿态所对应的舵机数值时完全不同的,而之后的所有数据都是以站立姿态数值为基础计算出来的,所以,当你搭出一台六足机器人后,需要按照我们后边的步骤一步一步的确定这台机器人各个姿态的数值。下面我们就一步一步的讲解如何确定各种姿态的舵机数值:直立位置站立时,六条腿共同支撑,保持重心的稳定。我们用手将机器人的战力姿态摆好,然后应用northstar记录下站立姿态时的各舵机数据,填入Excel表格中。行走动作规划为了使控制器实现机器人持续不断的向前行走,需要将行走的步态动作进行分解,并设计一个执行循环。对于我们的六足机器人,根据之前的步态描述,我们可以将向前行进一次的循环用以下的状态框图进行描述:在六足机器人行走过程中,最重要的一个性能体现就是它的平稳性。为了保证这个性能,就要注意行走过程中机器人重心的位置。我们将两组腿交替行走的配合方式设置成如下状态,这两组腿的流程一样,但应该正好相差半次循环的位置。如下图:135抬腿246行进中135迈腿246收腿135放腿246闲置135行进中246抬腿135收腿246迈腿135闲置246放腿具体的重心位置如下面这一组图示意:(1)135抬腿,246行进中(2)135迈腿246收腿(3)135放腿246闲置(5)135行进中246抬腿(4)135收腿246迈腿(6)135闲置246放腿由于每组腿着地时都是三足共同支撑,要保证行走时的平稳性,需要保证三足的足尖部(即与地面接触部位)轨迹尽量相同。为此,我们利用AutoCAD进行了简单的步态规划,以一组腿为例,规划图简略示意如下:(以135腿为例)下面我们就一步一步的完成每一个动作的舵机数值确定:抬腿抬腿动作是指246腿支撑动作不变,135腿原地抬起,以便进行后续迈步动作。抬腿动作的实现,只需要第二关节舵机转动即可实现。由于此结构设计存在最大转动角度的限制问题,所以在进行确定舵机数值的运算时,我们首先利用NorthStar确定出舵机可以转动的最大数值,之后设定出每个腿抬腿后的第二关节数值。迈腿迈腿动作是指135腿在空中前移,摆好动作准备落地。与抬腿动作正相反,迈腿动作中,第二关节舵机完全不变,由根部舵机控制前移动作,同时搭配足尖部舵机控制足部摆好落地姿态。迈腿动作中,每条腿足跟部舵机和足尖部舵机需要互相配合,才可以使足尖达到预定位置。预定位置的确定需要参照我们之前提到过的AutoCAD图。图中,由站立位置到落地位置的角度可以直接读出,再通过换算,即可获得舵机的转动差值。AutoCAD图如下所示:其中,红色线段为腿着地点的轨迹,绿色线段为腿部转动的距离。下面我们一步步的介绍各腿迈腿动作的实现方法。如图,我们首先进行3号腿的动作为例:图中所示为3号腿的位置对应着AutoCAD图中的位置。图中包含了3号腿的俯视图和侧视图。俯视图用于指导足跟部舵机的转动,侧视图用于指导足尖部舵机的转动。通过这幅图,我们就可以清楚的测量出3号腿各位置变化时的角度差,通过公式:数值=度数×1023/300即可计算出舵机的数值差。同理,可以确定1号腿和5号腿的舵机转动差。1号腿和5号腿的投影方法稍有变化,如下图所示:当知道了舵机的转动差后,与之前舵机位置数值叠加或相减,就可以确定出新位置的舵机数值。整理到Excel表格中,以方便以后调试。放腿放腿与抬腿相似,只需要变换第二关节即可,将第二关节恢复到站立姿态时即可。行进中位为了保证足部行进路线的准确性,我们将足部接触地借助地面摩擦行进这一动作分解成了两部分。所以,设置了一个行进中位。如果想要更精确的控制腿部姿态,使腿部走直线,就可以在接触地面这一过程中多设置几个位置。具体数值获得方法与迈腿类似,根据AutoCAD图中的转动角度来控制舵机的转动差值。收腿收腿指的由行进中位继续往后蹬腿,一直到蹬腿结束即将再次抬腿这一动作。这一动作中,第二关节不用转动,需要足跟部舵机和足尖部舵机共同作用来达到指定位置。位置的确定与迈腿类似,通过AutoCAD图来看转动角度,然后换算成舵机转动差值。收腿之后,继续进行下一轮的运动。程序设计过程:1、新建工程:2、拖模块进入并连接3、4、调试并设置各个关节的角度:打开其中一个注释有“135抬腿246行进中位”的模块,我们看见:这些角度正是通过之前的方法计算测试出来的,而速度则是根据实际效果来设置的,考虑的因素主要有行走的稳定性与速度要求等。验证与封装:连接控制器(可以在开发平台下的设置-网络连接进行设备的连接),点击进入各个模块的设置界面,点击执行动作,逐个模块验证,以观察各个关节的运动效果是否令人满意。如果需要调节,可以直接更改对应舵机的角度位置数值。也可以通过卸载全部的指令使电机进入调试状态,将电机连接的机械结构手动掰到合适的地方(此时电机仍然在运行,所以仍然有一点力量,不会因为诸如结构自重原因导致其自由变化),再通过获取位置直接得到此时各个电机的坐标,即可。任务4:六足行走的基本步态——转向几何学步态描述:有了前面正向行走的经验,我们发现,驱动机器人前进,靠得正是135腿或者246腿与地面接触移动的摩擦力。进一步发现,当135腿带动身体移动时,由于其呈现一个对称的三角形,可想象成一个圆上相隔120度的三个点。此时,如果将135这三条腿在着地时,与身体相连的关节以相同的速度旋转一定角度,而在246腿着地时,仍然以原有的运动规律带动身体前进,则其总效果仍然是进行了转向,但转动的角度则会比较平缓。设计思想:转向的设计与前进的思想几乎完全一样,通过控制不同的两组腿的正转反转来实现转向。正常行走时,135迈腿落地后,246刚好放腿结束,应当进行下一轮的迈腿。当需要转向时,我们让246反转,即落地时由后至前运动,则实现了向右转弯的动作。同理,使135反转时,即可实现左转弯动作。程序设计过程:将设计模块框图中需要改变运动角度的模块进行改写,调试改写的方法与之前调试行进的方法相同。验证与封装:与行进的验证方法相同。任务5:使机器人能够在无人干扰的情况下,实现自主壁障行走设计思想:在红外传感器没有检测到前方的障碍物时,机器人不断循环向前进的步态程序。当红外传感器发现前方有障碍物时,机器人停下,控制传感器的驱动电机分别向左或者向右旋转,测得两侧的障碍距离。哪侧障碍读数大,则驱动相反方向旋转的步态一次,再进入主循环。程序设计过程:1、新建工程:设置19个电机,一个模拟数字转换通道如果在之前编写独立步态时,项目设置为18个电机,在这里是不是要重新编写呢?其实,即便是在之前的项目中,你也可以随时通过设置—》工程设置—》舵机设置,对舵机的数量进行调节。如果你增加一个舵机,之前在模块中设置的舵机运动不会收到影响;但如果是减少一个舵机,则序号最后一个的舵机设置将在所有的舵机运动模块中消失,也意味着对这个舵机的编程被完全抹去了。2、整体设计思想:机器人的连续运动,实际是体现在程序的while循环之中的。正因为while循环能够永远的循环下去,机器人才会不断检测到外部的信息,不断地对下一步的运动进行判断与执行。因此一个良好的while循环结构,对于程序的可读性,可扩建性将产生非常重要的影响。针对这个任务的实现,以下是两种while循环的设计结构。可见,使用第二种while循环将能够有效地增加程序的可读性,因为它将动作执行判断与动作执行本身鲜明地区分开,这样在需要改变机器人的运动逻辑时,不必费力地将运动执行模块进行移动或者复制,只需对逻辑部分进行修正,这将极大地加强设计的可靠性,是一个更加优秀的设计方式。我们选择这种编程方式。3、连接并设置机器人的开始准备动作其中forwardsight是机器人正向的障碍值。Leftsight是机器人左侧的障碍值。Rightsight是机器人右侧的障碍值。Swinghead_flag判断机器人是否应该摇头进行转弯检测。mov_cmd存储一次while循环中,判断进行何种操作后,记录操作的代号。操作代号:mov_cmd=1:前进mov_cmd=2:后退mov_cmd=3:转头检测mov_cmd=4:右转mov_cmd=5:左转5、动作执行的判断部分:其判断逻辑如下:vis_dis=130且swinghead_flag=0——继续前进vis_dis=280且swinghead_flag=0——倒退130vis_dis280——当swinghead_flag=0时:左右转检测判断。同时将swinghead_flag设置为1当swinghead_flag=1时:Leftsight和rightsight都为0时:只检测前方的障碍,如果vis_dis130,则设置swinghead_flag为0;如果130vis_dis280,则继续原来的旋转swi