论文部分内容阅读
摘要:本文以机器人操作系统(Robot Operating System,ROS)为研究平台,以移动机器人的视觉定位功能为研究目标,针对移动机器人在路面上的定位、捕捉图像及导问题进行研究。实现过程中,使用了开源物理仿真环境(gazebo)搭建与模拟机器人视觉定环境,三维平台(Rviz)搭建仿真平台完成了多点导航功能。通过实景测试,验证了本文实现机器人视觉定位功能的有效性。
关键词:机器人操作系统(ROS);开源物理仿真环境(gazebo);三维平台(Rviz);多点导航。
1.所用系统和算法介绍
1.1 ROS系统源于2007年机器人技术公司“Willow Garage”个人机器人项目与斯坦福大学人工智能实验室项目的合作。2008年后,由柳树车库进行推广和维护。经过多年的发展,ROS 操作系统日趋完善,不仅为操作者提供了实用性较强的工具,也提供了先进的开源算法。ROS具有点对点设计、多种编程语言、快速测试和分布式计算等优点,基于 ROS的机器人应用开发逐渐成为主流[1]。
1.2机器人SLAM算法介绍
1)SLAM是同步定位与地图构建(Simultaneous Localization And Mapping)的缩写,最早由Hugh Durant-Whyte和John J.Leonard自1988年提出。主要用于解决移动机器人在未知环境中运行时即时定位与地图构建的问题。ROS系统提供了多种SLAM功能包,包括二维SLAM的gmapping、hector、cartographer功能包,以及三维SLAM的rgbslam、ORB_SLAM功能包。这些功能包可分别实现仿真机器人和真实机器人的SLAM功能[2]。
2)自主导航:ROS提供了移动机器人的导航框架,包括实现机器人定位的amcl功能和实现路径规划的move_base功能包,可帮助快速实现轮式移动机器人的导航功能。
3)自主探索SLAM:结合SLAM与自主导航功能,机器人可以在无人工干预的情况下自主完成未知环境的SLAM建图功能,导航路径自动根据地图信息的完善而不断优化。
2.自主导航仿真
2.1 Gazebo开源物理仿真环境
Gazebo是开源物理仿真环境,通过它,加上PR2(是Willow Garage公司设计的机器人平台,也是目前科研领域常使用到的机器人之一)功能包嵌入,能实现移动机器人模型的雏形,PR2功能包机器人模型如图1所示。在Gazebo物理环境下还可实现任意建模模型。
2.2 Gazebo物理仿真环境搭建
仿真步骤:(1)配置机器人模型。(2)创建仿真环境。(3)开始仿真。
1)机器人底盘仿真:为各link添加惯性参数与碰撞属性和gazebo标签,同时为joint添加传动装置(使用transmission标签,小车轮子用速度控制接口)。
2)添加gazebo控制插件(相当于作为驱动板):编写并运行相应launch文件得到gazebo中的机器人仿真模型。
3)创建仿真环境:选择insert,在坐标系中插入已有的模型。
4)传感器仿真:摄像头仿真,为摄像头link添加碰撞属性和惯性属性。同时宏定义摄像头,智能车道路运行仿真模拟如图2所示。
用后台图形工具套件Qt查看摄像头当前画面同时启动键盘控制,键盘控制界面及仿真实例完成效果如图3所示。
2.4 机器人视觉定位具体应用模块与组件
2.4.1 Rviz三维平台
Rviz 是机器人操作平台 ROS 中的一种可视化工具,可以图形化显示机器人的传感器信息,运动状态以及周围环境的变化信息等。同时Rviz支持丰富的数据类型,通过加载不同的Dispalys类型达到可视化,每一个Dispaly都有一个独特的名字。下面是几个常见的display类型:Axes-显示坐标系;camera-从相机视角显示图像;Grid-显示网格;Image-显示图像;Odomerty-显示里程计数据;RobotModel-显示机器人模型。
2.4.2 arbotix_gui 控制器
arbotix是一款控制电机、舵机的控制板,并且提供相对应的ros功能包。该功能包不仅可以驱动真实的ArbotiX控制板,还提供了一个差速控制器。通过接收速度控制指令更新机器人的joint状态,从而实现在rviz中的运动。在移动机器人的建图过程中,可以启动键盘节点控制机器人进行运动从而实现对实验环境地图的构建。同样也可以使用 arbotix_gui 控制器控制机器人完成建图工作。
2.4.3 室内移动机器人软件结构
基于 ROS 的移动机器人系统软件设计,主要包括底盘驱动的控制、激光雷达的数据采集、SLAM、AMCL 定位以及导航。
1)激光雷达节点:将激光雷达采集的数据发布到scan 话题上,只需要订阅这个话题就能使用这些数据。
2)底盘驱动控制节点:树莓派4B开发板下达速度指令传输到移动机器人底盘控制板,从而控制移动机器人以此速度运行。底盘驱动控制节点通过订阅/cmd_vel 话题,把消息转换成速度指令,并通过串口发送到 STM32F405 控制板上,控制机器人移动。
3)SLAM节点:通过对激光雷达节点发布的/scan 话题的订阅,再结合2D SLAM算法实现地图构建。
4)AMCL节点:通过订阅/scan话题获取激光雷达数据,并输出机器人在地图中的位姿信息。
5)导航节点:在已知的地图上根据激光雷达测量的数据控制移动机器人导航,并躲避障碍物。
2.4.4 通信設计 底盘驱动板和 ROS 之间的通信,即 STM32 和树莓派之间的通信基于串口通信。在进行通信之前,需先将格式一致的串口通讯的数据包信息从发送设备的TXD接口传输到接收设备的 RXD 接口。在ROS中,控制节点发布的命令话题需要通过串口节点来订阅,并通过串口设备发送到移动底盘。同时串口节点实时接收移动底盘发送的传感器数据,并进行封装发布 sensor话题,listener节点实时订阅这个sensor话题,这样就实现了 ROS 和移动底座的通信过程。可以在 ROS 中安装一个serial串口库,并进行参数配置,使参数和 STM32 串口配置一样,包括起始位、数据位和停止位等。再初始化串口,就能实现树莓派和 STM32 的串口通信了。
2.4.5 TF坐标变换
TF是一个可以满足用户跟随时间跟踪多个坐标系的功能包,其使用树形数据结构,运用时间缓冲并维护多个坐标系之间的坐标变换关系,它可以帮助开发者任意时刻完成点、向量等坐标在任意坐标系中的变换。
一个机器人系统通常配备很多三维坐标系,并且它们会随着时间的推移发生变化,如世界坐标系(world frame)、基坐标系(base frame)、机器人头部坐标系(head frame)等。TF可以以时间为轴跟踪这些坐标系(10s之内为默认参数)。常用的变换有2种。
1)广播TF变换,向系统中广播坐标系间的坐标变换关系。系统中可能会存在多个不同部分的TF变换广播,每个广播都可以在无需同步的情况下直接将坐标变换关系插入TF树中。
2)监听TF变换,接收并缓存系统中发布的所有坐标变换数据,并从中查询所需的坐标系变换关系。
TF常用工具有tf_monitor、tf_echo、static_transform_publisher等。
1)tf_monitor工具的功能是打印TF树中所有坐标系的发布状态,也可以通过输入参数来查看指定坐标系间的发布状态消息。
2)tf_echo工具的功能为查看指定坐标系间变换关系。命令格式如下:
$tf_echo <source_frame> <target_frame>
3)static_transform_publisher功能是發布两个坐标系之间的静态坐标变换,这两个坐标系不产生相对位置变化。
3.实验案例
步骤1:将智能车设备与计算机设备进行连接。
步骤2:运行Rviz,rosrun rviz rviz。添加add,将上述的机器人模型RobotModel选择坐标系,画面出现机器人。
步骤3:设置Fixed Frame模式为odom_combined。
步骤4:添加TF,可显示小车上所搭载的设备及其零部件。
步骤5:添加LaserScan,其Topic设置为/scan,可以看到小车搭载雷达的激光点(红色区域),如图4所示。
步骤6:添加RobotModel,可以看到可视化的小车模型。
步骤7:添加PoseWithCovariance,可以看到小车的车头方向
步骤8:在终端输入arbotix_gui开启虚拟遥控,可以控制小车的移动。如图5所示。
通过arbotix_gui实现上述小车的虚拟遥控可编写相关launch文件并配置相关arbotix节点:
<node name="arbotix" pkg="arbotix_python" type="arbotix_driver" output="screen">
<rosparam file="$(find my_urdf05_rviz)/config/hello.yaml" command="load" />
<param name="sim" value="true" />
</node>
此程序调用了arbotix_python功能包下的arbotix_diver节点。arbotix驱动机器人运行时,需要获取机器人信息,可以通过file加载配置文件。在仿真环境下,需要将sim配置设为true。最后则启动相应launch文件,配置Rviz,将Fixed name这栏选择并设置为odom(里程计坐标系),Topic这栏也设置为odom。但topic中的odom具有不同概念,odom topic是根据编码里程计计算得到的里程计信息。完成相应配置后调用rostopic list会产生一个话题 /cmd_vel。此时发布/cmd_vel话题消息就可以控制小车运动了。
4.结论
随着科技日益发展,机器人的视觉定位系统在人类生产生活、人工智能领域扮演着越来重要的脚色。本课题基于Ubuntu系统下的ROS机器人操作系统为研究平台,对轮式机器人(智能车)在路面上的定位、捕捉图像及导航问题进行研究。通过搭建仿真环境,控制与实现智能车的移动,雷达信息接收以及定位与捕捉图像等功能,测试机器人仿真环境下的避障能力,方向控制反应能力等性能指标均达到了设计的指标,具有实用价值。
参考文献
[1] 朱建军,王明园,张博文.基于ROS的轮式机器人建模方法与仿真研究[J].吉林化工学院学报,2021,38(3):61-65.
[2]郭柱梁.基于激光雷达的SLAM和动态避障机器人研究[M].哈尔滨:黑龙江大学出版社,2021.
第一作者简介:郑纪阳 2001年5月1日,性别:男,民族:汉,籍贯:福建省厦门市,学历:本科在读,职称:学生,研究方向:ROS机器人操作系统。
通信作者简介:张国忠,1951年2月出生,男,汉族,籍贯江西南昌,博士,教授,主要研究方向:系统辨识,计算机控制,电力系统自动化,人工智能控制等。
●此文由2021年全国大学生创新创业训练计划项目资助,项目名称:机器人视觉定位系统研究与实现项目负责人:郑纪阳(2021-239)
关键词:机器人操作系统(ROS);开源物理仿真环境(gazebo);三维平台(Rviz);多点导航。
1.所用系统和算法介绍
1.1 ROS系统源于2007年机器人技术公司“Willow Garage”个人机器人项目与斯坦福大学人工智能实验室项目的合作。2008年后,由柳树车库进行推广和维护。经过多年的发展,ROS 操作系统日趋完善,不仅为操作者提供了实用性较强的工具,也提供了先进的开源算法。ROS具有点对点设计、多种编程语言、快速测试和分布式计算等优点,基于 ROS的机器人应用开发逐渐成为主流[1]。
1.2机器人SLAM算法介绍
1)SLAM是同步定位与地图构建(Simultaneous Localization And Mapping)的缩写,最早由Hugh Durant-Whyte和John J.Leonard自1988年提出。主要用于解决移动机器人在未知环境中运行时即时定位与地图构建的问题。ROS系统提供了多种SLAM功能包,包括二维SLAM的gmapping、hector、cartographer功能包,以及三维SLAM的rgbslam、ORB_SLAM功能包。这些功能包可分别实现仿真机器人和真实机器人的SLAM功能[2]。
2)自主导航:ROS提供了移动机器人的导航框架,包括实现机器人定位的amcl功能和实现路径规划的move_base功能包,可帮助快速实现轮式移动机器人的导航功能。
3)自主探索SLAM:结合SLAM与自主导航功能,机器人可以在无人工干预的情况下自主完成未知环境的SLAM建图功能,导航路径自动根据地图信息的完善而不断优化。
2.自主导航仿真
2.1 Gazebo开源物理仿真环境
Gazebo是开源物理仿真环境,通过它,加上PR2(是Willow Garage公司设计的机器人平台,也是目前科研领域常使用到的机器人之一)功能包嵌入,能实现移动机器人模型的雏形,PR2功能包机器人模型如图1所示。在Gazebo物理环境下还可实现任意建模模型。
2.2 Gazebo物理仿真环境搭建
仿真步骤:(1)配置机器人模型。(2)创建仿真环境。(3)开始仿真。
1)机器人底盘仿真:为各link添加惯性参数与碰撞属性和gazebo标签,同时为joint添加传动装置(使用transmission标签,小车轮子用速度控制接口)。
2)添加gazebo控制插件(相当于作为驱动板):编写并运行相应launch文件得到gazebo中的机器人仿真模型。
3)创建仿真环境:选择insert,在坐标系中插入已有的模型。
4)传感器仿真:摄像头仿真,为摄像头link添加碰撞属性和惯性属性。同时宏定义摄像头,智能车道路运行仿真模拟如图2所示。
用后台图形工具套件Qt查看摄像头当前画面同时启动键盘控制,键盘控制界面及仿真实例完成效果如图3所示。
2.4 机器人视觉定位具体应用模块与组件
2.4.1 Rviz三维平台
Rviz 是机器人操作平台 ROS 中的一种可视化工具,可以图形化显示机器人的传感器信息,运动状态以及周围环境的变化信息等。同时Rviz支持丰富的数据类型,通过加载不同的Dispalys类型达到可视化,每一个Dispaly都有一个独特的名字。下面是几个常见的display类型:Axes-显示坐标系;camera-从相机视角显示图像;Grid-显示网格;Image-显示图像;Odomerty-显示里程计数据;RobotModel-显示机器人模型。
2.4.2 arbotix_gui 控制器
arbotix是一款控制电机、舵机的控制板,并且提供相对应的ros功能包。该功能包不仅可以驱动真实的ArbotiX控制板,还提供了一个差速控制器。通过接收速度控制指令更新机器人的joint状态,从而实现在rviz中的运动。在移动机器人的建图过程中,可以启动键盘节点控制机器人进行运动从而实现对实验环境地图的构建。同样也可以使用 arbotix_gui 控制器控制机器人完成建图工作。
2.4.3 室内移动机器人软件结构
基于 ROS 的移动机器人系统软件设计,主要包括底盘驱动的控制、激光雷达的数据采集、SLAM、AMCL 定位以及导航。
1)激光雷达节点:将激光雷达采集的数据发布到scan 话题上,只需要订阅这个话题就能使用这些数据。
2)底盘驱动控制节点:树莓派4B开发板下达速度指令传输到移动机器人底盘控制板,从而控制移动机器人以此速度运行。底盘驱动控制节点通过订阅/cmd_vel 话题,把消息转换成速度指令,并通过串口发送到 STM32F405 控制板上,控制机器人移动。
3)SLAM节点:通过对激光雷达节点发布的/scan 话题的订阅,再结合2D SLAM算法实现地图构建。
4)AMCL节点:通过订阅/scan话题获取激光雷达数据,并输出机器人在地图中的位姿信息。
5)导航节点:在已知的地图上根据激光雷达测量的数据控制移动机器人导航,并躲避障碍物。
2.4.4 通信設计 底盘驱动板和 ROS 之间的通信,即 STM32 和树莓派之间的通信基于串口通信。在进行通信之前,需先将格式一致的串口通讯的数据包信息从发送设备的TXD接口传输到接收设备的 RXD 接口。在ROS中,控制节点发布的命令话题需要通过串口节点来订阅,并通过串口设备发送到移动底盘。同时串口节点实时接收移动底盘发送的传感器数据,并进行封装发布 sensor话题,listener节点实时订阅这个sensor话题,这样就实现了 ROS 和移动底座的通信过程。可以在 ROS 中安装一个serial串口库,并进行参数配置,使参数和 STM32 串口配置一样,包括起始位、数据位和停止位等。再初始化串口,就能实现树莓派和 STM32 的串口通信了。
2.4.5 TF坐标变换
TF是一个可以满足用户跟随时间跟踪多个坐标系的功能包,其使用树形数据结构,运用时间缓冲并维护多个坐标系之间的坐标变换关系,它可以帮助开发者任意时刻完成点、向量等坐标在任意坐标系中的变换。
一个机器人系统通常配备很多三维坐标系,并且它们会随着时间的推移发生变化,如世界坐标系(world frame)、基坐标系(base frame)、机器人头部坐标系(head frame)等。TF可以以时间为轴跟踪这些坐标系(10s之内为默认参数)。常用的变换有2种。
1)广播TF变换,向系统中广播坐标系间的坐标变换关系。系统中可能会存在多个不同部分的TF变换广播,每个广播都可以在无需同步的情况下直接将坐标变换关系插入TF树中。
2)监听TF变换,接收并缓存系统中发布的所有坐标变换数据,并从中查询所需的坐标系变换关系。
TF常用工具有tf_monitor、tf_echo、static_transform_publisher等。
1)tf_monitor工具的功能是打印TF树中所有坐标系的发布状态,也可以通过输入参数来查看指定坐标系间的发布状态消息。
2)tf_echo工具的功能为查看指定坐标系间变换关系。命令格式如下:
$tf_echo <source_frame> <target_frame>
3)static_transform_publisher功能是發布两个坐标系之间的静态坐标变换,这两个坐标系不产生相对位置变化。
3.实验案例
步骤1:将智能车设备与计算机设备进行连接。
步骤2:运行Rviz,rosrun rviz rviz。添加add,将上述的机器人模型RobotModel选择坐标系,画面出现机器人。
步骤3:设置Fixed Frame模式为odom_combined。
步骤4:添加TF,可显示小车上所搭载的设备及其零部件。
步骤5:添加LaserScan,其Topic设置为/scan,可以看到小车搭载雷达的激光点(红色区域),如图4所示。
步骤6:添加RobotModel,可以看到可视化的小车模型。
步骤7:添加PoseWithCovariance,可以看到小车的车头方向
步骤8:在终端输入arbotix_gui开启虚拟遥控,可以控制小车的移动。如图5所示。
通过arbotix_gui实现上述小车的虚拟遥控可编写相关launch文件并配置相关arbotix节点:
<node name="arbotix" pkg="arbotix_python" type="arbotix_driver" output="screen">
<rosparam file="$(find my_urdf05_rviz)/config/hello.yaml" command="load" />
<param name="sim" value="true" />
</node>
此程序调用了arbotix_python功能包下的arbotix_diver节点。arbotix驱动机器人运行时,需要获取机器人信息,可以通过file加载配置文件。在仿真环境下,需要将sim配置设为true。最后则启动相应launch文件,配置Rviz,将Fixed name这栏选择并设置为odom(里程计坐标系),Topic这栏也设置为odom。但topic中的odom具有不同概念,odom topic是根据编码里程计计算得到的里程计信息。完成相应配置后调用rostopic list会产生一个话题 /cmd_vel。此时发布/cmd_vel话题消息就可以控制小车运动了。
4.结论
随着科技日益发展,机器人的视觉定位系统在人类生产生活、人工智能领域扮演着越来重要的脚色。本课题基于Ubuntu系统下的ROS机器人操作系统为研究平台,对轮式机器人(智能车)在路面上的定位、捕捉图像及导航问题进行研究。通过搭建仿真环境,控制与实现智能车的移动,雷达信息接收以及定位与捕捉图像等功能,测试机器人仿真环境下的避障能力,方向控制反应能力等性能指标均达到了设计的指标,具有实用价值。
参考文献
[1] 朱建军,王明园,张博文.基于ROS的轮式机器人建模方法与仿真研究[J].吉林化工学院学报,2021,38(3):61-65.
[2]郭柱梁.基于激光雷达的SLAM和动态避障机器人研究[M].哈尔滨:黑龙江大学出版社,2021.
第一作者简介:郑纪阳 2001年5月1日,性别:男,民族:汉,籍贯:福建省厦门市,学历:本科在读,职称:学生,研究方向:ROS机器人操作系统。
通信作者简介:张国忠,1951年2月出生,男,汉族,籍贯江西南昌,博士,教授,主要研究方向:系统辨识,计算机控制,电力系统自动化,人工智能控制等。
●此文由2021年全国大学生创新创业训练计划项目资助,项目名称:机器人视觉定位系统研究与实现项目负责人:郑纪阳(2021-239)