基于 ROS 平台的移动机器人的设计与运动仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于ROS 平台的移动机器人的设计与运动仿真摘要:ROS 究竟是如何工作的呢?ROS 中每一套算法是独立的一个包,包与包之间的数据交换主要采用TCP/IP 协议(对用户隐藏,用户需要发布或订阅主题以提供或取得数据),采用这种形式是由于ROS 的算法包是由全世界不同的个人,学校或实验室贡献的,这样做可以降低耦合性,如果一个node 崩溃不会影响到其他。基于ROS 这个平台,有助于提高开发设计的效率及降低成本。本论文主要阐述了基于ROS 平台移动机器人设计的基本原理和方法,并对移动机器人进行了运动仿真,得到其运动轨迹和控制方法,为后续项目的进一步研究打下了一定的基础。
0引言
ROS 被称为机器人操作系统,其实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 值来控制电机转动的速度。
1.2PID 控制
如果我们想控制小车以一米每秒的速度做直线运动,但由于地面的阻力的影响,会造成左右轮速度与我们想控制的速度不同,所以不会沿直线运动,这时我们就需要加入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.5ROS 平台与底盘通信协议[5]
(1)ROS 底盘串口
ROS 平台与小车底盘的通信一般是通过串口或者CAN 总线。我这里采用的是串口,以下为我自定义的通信数据格式。
1)底盘串口部分
串口接收:小车左右轮速度,单位:mm/s(所有数据都为float 型,float 型占4 字节),10 字节:[右轮速度4 字节][左轮速度4 字节][结束符"\r\n"2 字节]。
串口发送:里程计x, y 坐标、线速度、角速度和方向角,单位依次为:mm, mm, mm/s, rad/s, rad(所有数据都为float 型,float 型占4 字节),21 字节:[x 坐标4 字节][y 坐标4 字节][方向角4 字节][线速度4 字节][角速度4 字节][结束符"\n"1 字节]。
2)ROS 平台串口节点部分
写入串口:左右轮速度,单位为mm/s,10 字节,[右轮速度4字节][左轮速度4字节][结束符"\r\n"2字节]。
读取串口:小车x、y 坐标,方向角,线速度,角速度,单位依次为:mm,mm,rad,
mm/s,rad/s,21 字节:[X坐标4字节][Y坐标4字节][方向角4字节][线速度4字节][角速度4字节][结束符"\n"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 所示。