准研一,暑假在北京一家公司实习,初步学习ROS,在公司里测试了许多机器人,在这里汇总分享一下,实习了俩月虽然学到了满多东西,但觉得自己也不算完全入门,只是对ROS有了初步的了解,实习到现在我掌握的最重要的一个技能应该就是自主学习能力了,Github ros.wiki等网站的学习以及资料查询能力;认识到自己最严重的不足是编程能力,ROS中大多使用c++和python,在初步入门之后尝试开发以及创新时编程能力成了我最大的障碍。
下面是一些自己接触的机器人,大都只是测试了其功能,基础中的基础…
KINOVA
在公司里使用的是KINOVA JACO2系列的机械手臂,JACO系列总共有三种类型:按*度分为4DOF, 6DOF, 7DOF三种;夹抓分为2指和3指;手腕有类型有球型和非球型等等。在功能包中的表示方式为:例j2n7s300表示JACO二代腕部非球型的7*度3指机械臂。
KINOVA控制方式:
- 手柄控制 ,
- GUI界面控制(与手柄相似)
- ROS功能包控制,MoveIt!(功能包地址 https://github.com/Kinovarobotics/kinova-ros)功能包内容较多,需要更加深入研究
机械臂通用:moveit_setup_assistant配置机械臂,控制真实机械臂时需要ros_control功能包(参考http://www.guyuehome.com/890)促进机械臂运动。
Myo
Myo腕带是加拿大Thalmic Labs公司于2013年初推出的一款控制终端设备。可供用户使用及二次开发,基于windows等系统有成熟的软件供用户体验使用(使用教程https://support.getmyo.com/hc/en-us/articles/202657596)
在ROS中关于Myo的资源较少,Github上有读取Myo数据的功能包(IMU,手势,压力大小等)可用于二次开发(功能包地址:https://github.com/roboTJ101/ros_myo)例:利用Myo完成控制机械臂进行抓取等模拟使用者手臂动作的功能;用Myo控制仿真乌龟移动等等。此外,利用功能包中的demo有助于理解ROS开发。
Myo在使用时可以发现弊端,通过压力传感器根据8块传感器上的压力大小来判断手势,并没有很高大上,并且压力大感应才明显,所以在使用时要特别用力的做动作时才会有较好的控制效果(累……)。
Kobuki
Kobuki机器人的应用之一就是充当Turtlebot2的移动地盘,硬件配有陀螺仪,防碰撞传感器,供电接口等(使用教程:https://robots.ros.org/kobuki/)功能包地址:https://github.com/yujinrobot/kobuki
功能包中包含Kobuki各种功能演示,如:碰撞提示,防跌落测试,自动充电等。大都是体现Kobuki的移动功能,因为不具有激光雷达或者摄像头等传感器所以功能不够全面。
iRobot Create是一款扫地机器人,其功能与Kobuki近似,因此也常用作机器人集成开发时的地盘
机器人自主定位导航
此部分内容可以分为两块:1. SLAM 2. 路径规划和运动控制
1. SLAM
SLAM主要用于移动机器人的地图构建和及时定位,其主流方法有视觉SLAM和激光SLAM,其中我所学习的视觉SLAM方法是基于RGB-D的RTAB-MP方法,激光SLAM方法是gmapping和hector方法
注:这里不研究每种SLAM方法的原理,单纯分析如何通过ROS以及实体机器人或者仿真机器人实现地图构建。(基于Turtlebot仿真测试)
1)gmapping和hector(网上有很多类似的教程)
gmapping是最常用到的建图方法,因为使用时订阅了话题LaserScan,一般要求移动机器人配备有激光雷达,Turtlebot3配备有激光雷达并且可以用来测试gmapping建图
功能包(都要下载,最好放在一个包下):
turtlebot3 https://github.com/ROBOTIS-GIT/turtlebot3
tuetlebot3_simulations https://github.com/ROBOTIS-GIT/turtlebot3_simulations
turtlebot3_msgs https://github.com/ROBOTIS-GIT/turtlebot3_msgs
首先启动tuetlebot3_simulations中的gazebo物理仿真地图(有很多地图随便选),模拟出机器人与未知环境,然后启动turtlebot3_slam.launch,其中包含多种建图算法默认为gmapping,如果想更改的话在指令后面添加slam_methods:=hector(例如改用hector建图)。启动之后会看到Rviz界面,这时候启动键盘控制操作移动机器人四处移动,激光雷达会扫描到障碍物边界并逐步完成建图,达到满意效果之后,可以使用map_server 中的map_saver保存地图。
地图构建完成之后可以利用建好的地图进行导航,首先启动turtlebot3_navigation.launch导入地图在后加map_file:=map.yaml(保存的位置),在导航前先根据仿真中的机器人位置朝向用2D Pose Estimate估计位姿然后可以进行导航。
其中机器人的定位功能是通过amcl实现的,move_base中包含四个重要的配置文件,是导航调参的重点(调参时每个值设置多少合理我也不是很熟悉….)
hector和gmapping都是利用激光雷达进行建图的,但是hector需要控制机器人的速度在低速情况下,否则建图时会建飞
前面提到一般情况下使用gmapping时要配备激光雷达,但是在跑turtlebot仿真时却发现,turtlebot2没有配备激光雷达(只有kinect)也能够使用gmapping,搜了两种将深度数据模拟成激光数据的方法:(1)depthimage_to_lasercan节点 ,使用时将kinect平放(使用及效果见下面截图,使用的是turtlebot仿真
(2) obstacles_detection用于计算二维图,kinect向地面倾斜,地图较杂适用室外大场景(没用过)
2)RTAB-MAP(这个我也没有很熟练)
RTAP-MAP相对与激光雷达而言,其最大的特点就是可以构建三维的地图,之前用Realsense时测试过RTAB-MAP,构建了一张走廊的图片大概是这样的:
在建图的时候,手持Realsense进行的存在很多困难,最坑的是在建图是特别容易丢失里程计信息,屏幕卡红,不严重的时候将摄像头移回上一位置就能重新找回信息继续建图,最坏的情况是卡死,要重新启动建图…而且建出来感觉效果也一般。
附RTAB-MAP的操作教程:http://wiki.ros.org/rtabmap_ros/Tutorials,其中有各种型号的传感器,我使用的是Realsense 435,在使用前要先了解相应传感器安装驱动。
在利用RTAB-MAP构建地图并仿真时,我用的是Turtlebot仿真模拟,网上的大堆教程,这里不重复。对比gmapping给我的最大感受就是慢,而且特别不稳定,经常出现建图时位置丢失的情况,并且机器人的移动也很慢,大部分是一边旋转一边移动的情况,很蠢很慢(可能是我方法不对)
目前使用了两种SLAM方法,给我的直观感受就是,普通的避障导航的话用激光雷达+gmapping的效果很好,深度摄像头+RTAB-MAP虽然功能强大并能够产生三维点云图等,但是在绝大部分情况下效果不理想。
2. 路径规划和运动控制
这里主要用到了前面提到的move_base节点(http://wiki.ros.org/move_base),它主要包含了4个配置文件:
- costmap_common_params.yaml
- global_costmap_params.yaml
- local_costmap_params.yaml
- base_local_planner_params.yaml
nav_core功能包提供各种导航需要的接口,move_base中用作插件的planner都遵循这些接口,这些插件在move_base_params.yaml配置文件中设置。
一般来说,全局路径的规划插件包括:
navfn : ROS中比较旧的代码实现了dijkstra和A全局规划算法。
global_planner : 重新实现了Dijkstra和A全局规划算法,可以看作navfn的改进版。
parrot_planner : 一种简单的算法实现全局路径规划算法。
局部路径的规划插件包括:
base_local_planner : 实现了Trajectory Rollout和DWA两种局部规划算法。
dwa_local_planner : 实现了DWA局部规划算法,可以看作是base_local_planner的改进版本
Dashgo SMART移动平台
SMART 智能移动平台系统是 EAI 研制的一款高标准、开放的 ROS SLAM 研究平台,SMART 智能移动平台配备有两个高精度G4激光雷达,分别位于平台的上下两端,上端激光雷达用于建图和避障导航,下方激光雷达仅用于避障导航。此外,移动平台还配备有5个超声波传感器分别位于前端(3个)和后侧方(2个)用于避开玻璃等透明障碍物
SMART有多种操作方式:
- Android App
可以通过蓝牙和wifi连接,用于控制移动平台的移动,主要作用是在建图时控制其移动构图,但是我用App时无法连接到设备 - Web控制方式
wifi 连接好底盘路由器,进入谷歌浏览器,在网址栏输入 192.168.31.200:8080,打开网页即可使用其建图,导航以及自动充电等功能,采用的是谷歌cartographer建图(这个我还没有仔细研究过)。操作起来很简单,但是网站做的不好,很多设计反人类… - ROS下操作
同样的要先连接到地盘的wifi,然后打开的电脑/etc/hosts 文件末尾添加导航模块的 IP 地址和主机名,移动平台导航模块的IP和主机名分别为192.168.31.200 eaibot,密码也为eaibot。之后就可以从电脑远程访问eaibot的系统,同样的方法将自己电脑的IP地址和主机名加入到下位机电脑的/etc/hosts中,这里如果没有添加在导航时在RVIZ中设置启示点和目标点都不会有反应。
这是利用移动平台建立的2D地图