基于ROS 平台的移动机器人的设计与运动仿真
陈勇林? 朱应钦? 杜政恒 张玉林
(重庆大学城市科技学院 电气信息学院,重庆 永川 402167)
摘要:ROS究竟是如何工作的呢?ROS中每一套算法是独立的一个包,包与包之间的数据交换主要采用TCP/IP协议(对用户隐藏,用户需要发布或订阅主题以提供或取得数据),采用这种形式是由于ROS的算法包是由全世界不同的个人,学校或实验室贡献的,这样做可以降低耦合性,如果一个node崩溃不会影响到其他。基于ROS这个平台,有助于提高开发设计的效率及降低成本。本论文主要阐述了基于ROS平台移动机器人设计的基本原理和方法,并对移动机器人进行了运动仿真,得到其运动轨迹和控制方法,为后续项目的进一步研究打下了一定的基础。
关键词:ROS 移动机器人 设计 仿真 0 引言
ROS被称为机器人操作系统[2],其实ROS充当的是通信中间件的角色,即在已有操作系统的基础上搭建了一整套针对机器人系统的实现框架。ROS还提供一组实用工具和软件库,用于维护、构建、编写和执行可用于多个计算平台的软件代码。
值得一提的是,ROS的设计者考虑到各开发者使用的开发语言不同,因此ROS的开发语言独立,支持C++,Python等多种开发语言。因此,除了官方提供的功能包之外,ROS还聚合了全世界开发者实现的大量开源功能包,如思岚科技(SLAMTEC)就发布了针对其自主研发的激光雷达RPLIDAR的ROS功能包rplidar_ros。这些开源功能包与ROS一起构成了强大的开源生态环境。
ROS的系统结构设计也颇有特色,ROS运行时是由多个松耦合的进程组成,每个进程ROS称之为节点(Node),所有节点可以运行在一个处理器上,也可以分布式运行在多个处理器上。在实际使用时,这种松耦合的结构设计可以让开发者根据机器人所需功能灵活添加各个功能模块。 1 理论分析 1.1 控制电机转动
电机的控制我们分为两部分,一部分为电机转动方向的控制,另一个为电机转速的控制。电机转动的方向我们用两个MCU引脚来控制,假如PIN_A=1,PIN_B=0 时,电机正转;PIN_A=0,PIN_B=1 时,电机反转;PIN_A=0,PIN_B=0 时,电机停止。电机速度的控制则需要一个PWM输出引脚,我们通过控制输出不同的PWM值来控制电机转动的速度。 基金项目:2016年国家级大学生创新创业训练计划项目“ROS辅助机械视觉与运动规划” (项目编号:201612616100)。
作者简介:陈勇林(1996-),男,重庆人,在校本科生,机械电子工程专业。
1.2 PID控制
如果我们想控制小车以一米每秒的速度做直线运动,但由于地面的阻力的影响,会造成左右轮速度与我们想控制的速度不同,所以不会沿直线运动,这时我们就需要加入PID控制,PID控制的思想就是我实时的把轮子真正的速度采集回来和控制的速度对比,差则补,多则减。这样基本就可以实现理想控制。针对该小车的PID算法如附录A所示。 1.3 小车转弯控制
图1 小车转弯控制计算分析
一般我们要是想控制小车以多少的速度前进或者后退,我们只需要PID控制两个轮子的速度一致就可以基本做到。但如果要想控制小车以多少的角速度转弯,我们需要做一定的计算,如图1所示。
1.4 参数测量与计算
编码器用于计算轮子的移动距离。有两个问题需要解决:
(1)高精度编码器太敏感,稍微抖动,会产生大量的不准确的值; (2)计数器的溢出。
可以根据实际小车的尺寸算出所需数据。小车的各项参数如下:前后轮轴距2K=168 mm;左右轮距离2L=266 mm;车轮直径r=130 mm;电动机减速比1:30。 假设小车转向的角速度ω为5 rad/s,转向半径R为100 mm。由上面的公式便可得出各个轮子的转速:n1=n3=18.3 m/s;n2=n4=116.1 m/s。
1.5 ROS平台与底盘通信协议[5]
(1)ROS底盘串口
ROS平台与小车底盘的通信一般是通过串口或者CAN总线。我这里采用的是串口,以下为我自定义的通信数据格式。
1)底盘串口部分
串口接收:小车左右轮速度,单位:mm/s(所有数据都为float型,float型占4字节),10字节 :[右轮速度4字节][左轮速度4字节][结束符\字节]。
串口发送:里程计x, y坐标、线速度、角速度和方向角,单位依次为:mm, mm, mm/s, rad/s, rad(所有数据都为float型,float型占4字节),21字节 :[x坐标4字节][y坐标4字节][方向角4字节][线速度4字节][角速度4字节][结束符\字节]。
2)ROS平台串口节点部分 写入串口:左右轮速度,单位为mm/s,10字节,[右轮速度4字节][左轮速度4字节][结束符\2字节]。
读取串口:小车x、y坐标,方向角,线速度,角速度,单位依次为:mm,mm,rad,
mm/s,rad/s,21字节:[X坐标4字节][Y坐标4字节][方向角4字节][线速度4字节][角速度4字节][结束符\1字节]。 2 运动规划仿真
2.1 属性配置
用moveit_assistant_setup对机器人进行属性配置,如图2所示。
图2 Moveit属性设置
2.2 关节运动仿真
通过 moveit成功用Rviz进行了机器人关节运动仿真、整体运动仿真,如图3-图6所示。
图3 urdf模型关键运动仿真 图4 Rviz运动规划
图5 Rviz呈现小车 图6 Rviz呈现运动轨迹
2.3 运动仿真
通过Rviz对机器人模块进行运动仿真(下图为Linux命令代码操作),如图8所示。
图8 命令直接仿真机器人运动
编写.launch文件(c++编写)存放在package包内的launch文件(file)中,在Linux命令框中用roslaunch代码读取.launch文件(文件中有机器人运动规划代码),如图9所示。
图9 通过launch文件编写代码对机器人进行复杂运动仿真
用apt-get在ROS官网上下载摇杆包,通过摇杆仿真控制机器人运动,如图10所示。
图10 通过摇杆控制规划运动路线
2.4控制模拟
右边命令框Arbotix Controller是模拟摇杆控制器,系统通过采集摇杆节点输入数据想机器人节点发送topic消息,并用rosrun运行rqt_graph弹出如下界面,对节点间的topic话题进行可视化分析,如图11所示。
图11 可视化节点消息图分析
用marker进行第三方控制,控制图如下,如图12、图13所示。
图12 第三方控制为图中红色部分(在rqt_graph上的呈现)
图13 Rviz下用控制完成圆路径
以上是前期准备中的一部分,分别为环境搭建与机器人属性设置、运动规划模拟、与Arduino开发板实际对接应用、可视化界面呈现与分析、节点话题可视化分析。 3 结果分析
以上仿真逐步实现从路径控制到小车的摇杆控制。通过模拟分析得到了机器人运动现象,及相应的控制方法,为后续硬件的搭建与功能实现提供了参考。由上述仿真可知,在ROS平台相应仿真软件的帮助下,机器人的运动控制大幅度简单化,根据面向服务的思想,ROS将硬件控制方式抽象成了话题订阅,实现了底层硬件和规划路径功能块的Service,本项目要做的是在两个模块中间协调通讯。
所以此项目将会把机器人设计成为两个板块,上位机树莓派通过ROS的通讯协议接收