基于 ROS 平台的移动机器人的设计与运动仿真.docx
- 文档编号:18500011
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:12
- 大小:483.44KB
基于 ROS 平台的移动机器人的设计与运动仿真.docx
《基于 ROS 平台的移动机器人的设计与运动仿真.docx》由会员分享,可在线阅读,更多相关《基于 ROS 平台的移动机器人的设计与运动仿真.docx(12页珍藏版)》请在冰点文库上搜索。
基于ROS平台的移动机器人的设计与运动仿真
基于ROS平台的移动机器人的设计与运动仿真
摘要:
ROS究竟是如何工作的呢?
ROS中每一套算法是独立的一个包,包与包之间的数据交换主要采用TCP/IP协议(对用户隐藏,用户需要发布或订阅主题以提供或取得数据),采用这种形式是由于ROS的算法包是由全世界不同的个人,学校或实验室贡献的,这样做可以降低耦合性,如果一个node崩溃不会影响到其他。
基于ROS这个平台,有助于提高开发设计的效率及降低成本。
本论文主要阐述了基于ROS平台移动机器人设计的基本原理和方法,并对移动机器人进行了运动仿真,得到其运动轨迹和控制方法,为后续项目的进一步研究打下了一定的基础。
1引言
ROS被称为机器人操作系统,其实ROS充当的是通信中间件的角色,即在已有操作系统的基础上搭建了一整套针对机器人系统的实现框架。
ROS还提供一组实用工具和软件库,用于维护、构建、编写和执行可用于多个计算平台的软件代码。
值得一提的是,ROS的设计者考虑到各开发者使用的开发语言不同,因此ROS的开发语言独立,支持C++,Python等多种开发语言。
因此,除了官方提供的功能包之外,ROS还聚合了全世界开发者实现的大量开源功能包,如思岚科技(SLAMTEC)就发布了针对其自主研发的激光雷达RPLIDAR的ROS功能包rplidar_ros。
这些开源功能包与ROS一起构成了强大的开源生态环境。
ROS的系统结构设计也颇有特色,ROS运行时是由多个松耦合的进程组成,每个进程ROS称之为节点(Node),所有节点可以运行在一个处理器上,也可以分布式运行在多个处理器上。
在实际使用时,这种松耦合的结构设计可以让开发者根据机器人所需功能灵活添加各个功能模块。
2理论分析
2.1控制电机转动
电机的控制我们分为两部分,一部分为电机转动方向的控制,另一个为电机转速的控制。
电机转动的方向我们用两个MCU引脚来控制,假如PIN_A=1,PIN_B=0时,电机正转;PIN_A=0,PIN_B=1时,电机反转;PIN_A=0,PIN_B=0时,电机停止。
电机速度的控制则需要一个PWM输出引脚,我们通过控制输出不同的PWM值来控制电机转动的速度。
2.2PID控制
如果我们想控制小车以一米每秒的速度做直线运动,但由于地面的阻力的影响,会造成左右轮速度与我们想控制的速度不同,所以不会沿直线运动,这时我们就需要加入PID控制,PID控制的思想就是我实时的把轮子真正的速度采集回来和控制的速度对比,差则补,多则减。
这样基本就可以实现理想控制。
针对该小车的PID算法如附录A所示。
2.3小车转弯控制
图1小车转弯控制计算分析
一般我们要是想控制小车以多少的速度前进或者后退,我们只需要PID控制两个轮子的速度一致就可以基本做到。
但如果要想控制小车以多少的角速度转弯,我们需要做一定的计算,如图1所示。
2.4参数测量与计算
编码器用于计算轮子的移动距离。
有两个问题需要解决:
(1)高精度编码器太敏感,稍微抖动,会产生大量的不准确的值;
(2)计数器的溢出。
可以根据实际小车的尺寸算出所需数据。
小车的各项参数如下:
前后轮轴距2K=168mm;左右轮距离2L=266mm;车轮直径r=130mm;电动机减速比1:
30。
假设小车转向的角速度ω为5rad/s,转向半径R为100mm。
由上面的公式便可得出各个轮子的转速:
n1=n3=18.3m/s;n2=n4=116.1m/s。
2.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所示。
图2Moveit属性设置
2.2关节运动仿真
通过moveit成功用Rviz进行了机器人关节运动仿真、整体运动仿真,如图3-图6所示。
图3urdf模型关键运动仿真图4Rviz运动规划
图5Rviz呈现小车图6Rviz呈现运动轨迹
2.3运动仿真
通过Rviz对机器人模块进行运动仿真(下图为Linux命令代码操作),如图8所示。
图8命令直接仿真机器人运动
编写.launch文件(c++编写)存放在package包内的launch文件(file)中,在Linux命令框中用roslaunch代码读取.launch文件(文件中有机器人运动规划代码),如图9所示。
图9通过launch文件编写代码对机器人进行复杂运动仿真
用apt-get在ROS官网上下载摇杆包,通过摇杆仿真控制机器人运动,如图10所示。
图10通过摇杆控制规划运动路线
2.4控制模拟
右边命令框ArbotixController是模拟摇杆控制器,系统通过采集摇杆节点输入数据想机器人节点发送topic消息,并用rosrun运行rqt_graph弹出如下界面,对节点间的topic话题进行可视化分析,如图11所示。
图11可视化节点消息图分析
用marker进行第三方控制,控制图如下,如图12、图13所示。
图12第三方控制为图中红色部分(在rqt_graph上的呈现)
图13Rviz下用控制完成圆路径
以上是前期准备中的一部分,分别为环境搭建与机器人属性设置、运动规划模拟、与
Arduino开发板实际对接应用、可视化界面呈现与分析、节点话题可视化分析。
3结果分析
以上仿真逐步实现从路径控制到小车的摇杆控制。
通过模拟分析得到了机器人运动现象,及相应的控制方法,为后续硬件的搭建与功能实现提供了参考。
由上述仿真可知,在ROS平台相应仿真软件的帮助下,机器人的运动控制大幅度简单化,根据面向服务的思想,ROS将硬件控制方式抽象成了话题订阅,实现了底层硬件和规划路径功能块的Service,本项目要做的是在两个模块中间协调通讯。
所以此项目将会把机器人设计成为两个板块,上位机树莓派通过ROS的通讯协议接收
下位机Arduino接收的摄像头等传感器数据,并进行SLAM[4]与基于PID算法的路径规划的运算预处理,再将预处理数据结果通过ROS通信协议返还给下位机Arduino进行数据结果解析并对包括舵机转速、摄像头朝向等外部控制参数进行直接操作,最终在运动控制进行直接体现。
设计如图14所示。
图14移动机器人系统设计
4总结
针对当前研究室内环境,并同时实现定位与地图构建(SLAM)[3]功能的移动机器人成本高等问题,提出了一种低成本的开源移动机器人控制系统方案。
以控制芯片Arduino[1]为基础,将开源机器人操作系统(ROS)移植到开源嵌入式系统当中,设计了基于ROS的分布式上位机控制软件和实时操作系统的下位机程序,完成了移动机器人控制系统的搭建,实现了移动机器人的分布式控制。
移动机器人所使用软硬件均开源,成本低、性能高、可扩展性好。
研究结果表明,该控制系统具有较好的稳定性和实时性。
对该类机器人的开发与实际应用提供了一个新的思路与方法。
附录A
PID算法——diff_controller.h源码
typedefstruct{
doubleTargetTicksPerFrame;//targetspeedinticksperframelongEncoder;//encodercount
longPrevEnc;//lastencodercountintPrevInput;//lastinput
intITerm;//integratedterm
longoutput;//lastmotorsetting
}
SetPointInfo;
SetPointInfoleftPID,rightPID;intKp=20;
intKd=12;intKi=0;intKo=50;
unsignedcharmoving=0;//isthebaseinmotion?
voidresetPID(){
leftPID.TargetTicksPerFrame=0.0;leftPID.Encoder=readEncoder(LEFT);leftPID.PrevEnc=leftPID.Encoder;leftPID.output=0;
leftPID.PrevInput=0;
leftPID.ITerm=0;
rightPID.TargetTicksPerFrame=0.0;rightPID.Encoder=readEncoder(RIGHT);rightPID.PrevEnc=rightPID.Encoder;rightPID.output=0;
rightPID.PrevInput=0;
rightPID.ITerm=0;
}
voiddoPID(SetPointInfo*p){longPerror;
longoutput;intinput;
input=p->Encoder-p->PrevEnc;
Perror=p->TargetTicksPerFrame-input;
output=(Kp*Perror-Kd*(input-p->PrevInput)+p->ITerm)/Ko;p->PrevEnc=p->Encoder;
output+=p->output;
if(output>=MAX_PWM)output=MAX_PWM;
elseif(output<=-MAX_PWM)
output=-MAX_PWM;else
p->ITerm+=Ki*Perror;
p->output=output;
p->PrevInput=input;
}
voidupdatePID(){
leftPID.Encoder=readEncoder(LEFT);rightPID.Encoder=readEncoder(RIGHT);if(!
moving){
if(leftPID.PrevInput!
=0||rightPID.PrevInput!
=0)resetPID();return;
}
doPID(&rightPID);doPID(&leftPID);
setMotorSpeeds(leftPID.output,rightPID.output);
}
longreadPidIn(inti){longpidin=0;
if(i==LEFT){
pidin=leftPID.PrevInput;
}else{
pidin=rightPID.PrevInput;
}
returnpidin;
}
longreadPidOut(inti){longpidout=0;
if(i==LEFT){
pidout=leftPID.output;
}else{
pidout=rightPID.output;
}
returnpidout;
}
附录B
ROS的C++库——Roscpp
ROS系统接口相机驱动
(1)camera_driversStreamingCameraNodes
ThisAPIisforcamerasthatproduceacontinuousstreamofimages(原文)获取与处理Kinetic等其他图像获取设备的数据流
PolledCameraNodes
ThisAPIisforcamerasthatproduceanimageonlywhenpolled.Theremaybemultipleclients,eachwiththeirownresponse_namespace.Thesetopicsareonlypublishedinresponsetotherequest_imageservice.Thepolled_camerapackageprovidessupportforimplementingthisAPI.(原文)
对每一个相机进行轮询等操作
(2)common_msgs(消息传递API)
负责对整个系统内部不同部分相互传递消息(通信)的API
(3)laser_drivers
激光测距系统API
(4)driver_common
其他驱动程序和常用的驱动程序工具类
(5)filters
为系统内的数据过滤,官方提供的过滤器接口以及实现
(6)laser_pipeline
将激光传感器数据转为三维数据
(7)image_common
ROS系统中对于图像处理的组件
(8)image_pipeline
ROS中的图片处理Pipeline,用于处理图像信息(如将相机获取到的数据进行处理并输出成OpenCV可以处理的数据)
(9)ision_opencv
ROS与OpenCV的接口,提供实时图像的OpenCV编程
(10)tf
ROS中TransformConfiguration(变换配置)相关的接口和组件
(11)tf_conversions
tf数据类型的转换接口和组件
(12)actionlib
为ROS系统中的ActionServer和ActionClient两个模块提供接口和工具
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ROS 平台的移动机器人的设计与运动仿真 平台 移动 机器人 设计 运动 仿真