(北京信息科技大学 北京 100192)
随着科学技术的发展,机器人的应用技术已逐渐成熟,机器人智能化也已经进入了一个新的高度,工业机器人,服务器机器人,无人机,深度学习技术等无一不体现了机器人智能技术的快速发展。伴随着机器人应用技术的发展,机器人的自动驾驶能力自然而然的变成了机器人的热点研究领域之一。
国外自动驾驶机器人技术自20世纪80年代就已经开始发展,一开始是为了代替一些人类无法完成的危险环境,发展到今天,已经有了很大的进度,技术越来越成熟,使用范围也越来越广泛。
国内自动驾驶机器人技术开始于20世纪90年代中期,主要集中在汽车公司、高校和科研机构中。国内其他高校如清华大学、吉林大学、国防科技大学等也在相关方面取得一定成果。
本文在参考已有研究成果的基础上,基于Linux系统的ROS开发平台,测试了在两种不同仿真软下,机器人自动驾驶的仿真结果对比,包括模型参数,算法内各参数值,地图参数对结果的影响。并对比两种仿真软件,验证结果。
为了对自动驾驶机器人在不同的仿真软件的参数结果影响进行研究,本文基于嵌入Linux系统的ROS机器人开发平台架构,在Rviz和Gazebo两个仿真软件进行仿真。需自己搭建仿真环境及模型
通过机器人描述文件建立机器人模型后,再利用Arbotix仿真模拟器插件和gazebo自带仿真插件配置组件,对机器人各执行部件添加虚拟电机。使得机器人可以在可视化仿真软件内运动。
在搭建好机器人的结构及运动控件后,构建决策层算法盒子并通过合法语句关联自己搭建的机器人,通过自主运动算法包中的仿真功能包,对模型进行决策层的搭建,包括基于A*算法的全局规划,以及基于D*算法的局部路径规划,以及相对应的代价地图通用配置文件,局部代价地图配置文件,全局代价地图配置文件,底盘控制配置文件。在四个配置文件内,可调整算法及地图的各个参数,观察各参数对仿真结果的影响。
在配置好结构,控制与算法三个层级后,利用多节点启动launch文件同时开启多个节点,进行仿真。
利用Rviz和Gazebo可识别的XML制式的URDF或Xacro格式文件建立三维模型,也可以通过导入已有的STL模型文件建立三维模型。
不论基于URDF还是Xacro的机器人描述文件,都分为两大部分,一个是Link(部件)部分,这一部分我们设置机器人的各个部件特性以及部件名称。另一个是joint(连接)部分,这一部分为设置各个部件间的连接关系以及连接的相对位置移动,连接名称。
每一个Link部件都有三个Visual(外观属性),collision(碰撞属性),inertial(物理属性)。三种大的特性内存在很多小的特性,例如Visual中的geometry(外观描述),origin xyz(相对于仿真世界坐标系的初始位置),color(外观颜色),inertial中mass value(质量值)等等。
每一个Joint部件必须有三个基础属性,parent link(连接母体部件名称),child link(连接子体部件名称),origin xyz(基于母体部件的子体部件位移)。重要的一点,每一个joint都需要一个连接类型,例如revolute(旋转关节),极限位置由upper and lower limits(极限上下位置决定);continous(旋转关节)无位置限制;fixed(固定关节)位置不可移动等等各连接方式。从整体上来看,两个仿真软件平台所呈现的模型,Rviz更注重于各部件的坐标系(TF)相对变换与运动过程,Gazebo则偏重于仿真现实性。
在配置好的机器人描述文件后,利用Arbotix仿真模拟器功能包开始对控制层,即机器人制动电机进行配置:
第一部分是一些设置参数,像串行端口,波特率,读写设置和读写速率设置
第二部分:使用joints设置伺服电机参数,id为伺服电机的硬件ID,当发布关节状态时,neutral值由arbotix驱动映射为0弧度。Max_angle和Min_angle为正反向最大运动角度。
第三部分是我们的控制器部分底座控制。只有当使用一个真实的ArbotiXcontroller来控制电动机驱动和一个差动齿轮驱动的底座的时候才会起作用。
代价地图通用配置文件由4各部分组成,局部代价地图配置文件,全局代价地图配置文件,底盘控制配置文件。
Costmap common params(地图通用配置文件):
包含设置机器人的半径,配置障碍物图层,是否启用图层,膨胀层半径等参数的配置。
Global costmap params(全局代价地图参数文件):
包含设置全局代价地图需要在哪个坐标系下运行,在全局代价地图中机器人本体的基坐标系,配置是否使用map_server提供的地图来初始化等参数配置。
Local costmap params(局部代价地图参数文件):
在局部代价地图中的全局坐标系,机器人本体的基坐标系,局部代价地图更新率,滚动窗口长宽等参数配置。
Base local planner params(机器人局部规划器参数)
包含了很多参数,包括机器人的移动类型选择,到到达目标时,控制器在xy的位置误差。以及机器局部规划器模拟路径算法的轨迹模拟时间,给定轨迹两点之间的间隔尺寸等参数配置
ROS提供了一个同时启动节点管理器(master)和多个节点的途径,即使用启动文件(launch file)。任何包含两个或两个以上节点的系统都可以利用启动文件来指定和配置需要使用的节点。通常的命名方案是以.launch作为启动文件的后缀,启动文件是XML文件。一般把启动文件存储在取名为launch的目录中。
在实际应用中,一个功能的实现往往需要运行多个节点,此时若使用rosrun命令运行节点无疑非常麻烦且不切合实际。在ROS中通过launch文件一次性启动多个节点。
1.Rviz仿真结果分析
图1为Rviz仿真过程中指定机器到达目标点的仿真结果。
图1 Rviz仿真结果
图中,首先需要利用2D-nav goal插件在地图中指定机器人目标点位姿矢量,指定目标点后,会在仿真软件中产生两条线,一条为全局路径规划器规划的路径线。另一条为局部路径规划期器规划的路线,此路线在自定的限定距离内做出最优路境解,根据为是否碰撞障碍物,距目标点距离,转角大小等评分标准。因此可见此线段不断变换,即为不断找最路径解得过程,到达目的地后,一般为曲线划入,在目的地点首先限制线性位移,其次原地转动机器人直至与目标点的姿态在自定误差范围内。若是增大代价地图膨胀层或机器人碰撞模型,则部分窄小路径会被机器人识别为无法通过。
2.Gazebo仿真结果分析
图2为Gazebo为指定机器到达目标点的仿真结果仿真过程仿真结果。
图2 Gazebo仿真结果
Gazebo仿真,首先也是基于机器人描述文件在仿真世界里来显示机器人,同时,还可自己在gazebo内搭建仿真环境,如图3所示即为搭建的仿真环境。同时,不同于rviz的是,gazebo可以直接在机器人描述文件内为各个自己设计的机器人结构添加组件,如需要机器人在仿真世界内活动,就需要为机器人制动部件添加电机。可添加的组件还有许多。同时gazebo支持与ROS间进行节点通讯,只需要在机器人描述文件里进行节点与机器人名称相关设置,即可与ROS进行通讯,仿真机器人节点可接受到ROS发布的cmd_vel(速度)话题,根据速度矢量进行相应的移动。发布话题可以通过rostopic pub指令,也可以rviz软件内先进行gazebo的仿真环境扫图,得到地图后再在软件内利用2d-nav goal指令进
行目标点设定并导航。
3.仿真结果比对
Rviz是三维可视化工具,强调把已有的数据可视化显示;
图3 Rviz仿真基于ROS的节点通讯架构
由图4可见,基于Rviz的仿真,更倾向于实际机器人的实现过程,对模型的外观构成要求并不高,但对组件相对于里程计坐标系,世界坐标系的变换,各参数对实际自动驾驶的影响都有着很直观的显示
图4 Gazebo仿真基于ROS的节点通讯架构
Gazebo则是三维物理仿真平台,强调的是创建一个虚拟的仿真环境,更偏向于外在场景的影响,但对实现机器人自动驾驶的过程,还需配合Rviz来实现。
本文基于嵌入Linux系统的机器人开发平台架构ROS,结合可视化软件Rviz与Gazebo,进行了机器人自动驾驶的仿真搭建与对比,验证了仿真结果的可靠性,也对实际搭建自动驾驶系统打下了基础。
因为是仿真,所以过程中,忽视摩擦,光照等误差因素,将map->odom所代表的累计误差值忽略,只注重于观测自动驾驶的实现过程,参数影响与仿真结果比对。
针对仿真结果中,会出现机器人位置计算超出预定时间导致机器人自动驾驶连贯性被打断,无法正常到达目标地点的问题,可增大tf变换允许延迟时间,并注意尽量不要同时在两个可视化仿真软件上进行仿真,若是在虚拟机上进行的操作,则尽量关闭3d加速卡选项,以保证仿真过程的流畅度和结果的完整性。