ROS作为机器人软件平台,能为异质计算机集群提供类似操作系统的功能,在研究机器人行走等方面起着重要的作用。Llidar作为机器人定位导航的核心传感器,在机器人自主行走、定位导航方面扮演着重要角色。两者的结合使用,使得机器人自主定位导航效果更佳。 1. rplidar产品简介: RPLIDAR是SLAMTEC—思岚科技自主研发的激光雷达,目前有A1和A2两款成熟的商业激光雷达产品。两款产品均可从官网获取相应的SDK和开发指导文档。
A1的测距范围为0.2~6米,360°全角度测量,每秒扫描2K个点,扫描频率5~10hz可调。 A2的测距范围为0.15~8米,360°全角度测量,每秒扫描4K个点,扫描频率5~15 hz可调。 官方针对rplidar雷达,给出的SDK中提供了相应的frame_grabe可视化测试界面。具体操作流程如下: (1)设备管理器找到对应串口 (2)打开frame_grabe,选择对应端口查看
(3)frame_grabber界面 简介与规格书(Datasheet)、开发套装使用手册、通讯接口协议与应用手册、SDK 用户手册。 2. rplidar的ROSpackage rplidar_ros介绍: rplidar_ros是国内第一款面向全球ROS开发者推出相应package的激光雷达,其低廉的价格大大推动了激光雷达在ROS中的使用,为国内服务机器人的移动导航和避障相关技术的发展和人才储备起了很大的推动作用。 ROS之所以能够很好的在开发者中间推广起来,就是它建立了一套通用的通讯框架,不同的开发者只需要按照一定的通讯协议,关注相应的数据接口,完成每个模块的功能就OK,大大避免了机器人重复造轮子的繁琐过程。 任何一个ROS生态里面的package,往往只需找到相应的wiki和github页面,就可以清楚的了解其数据接口和内部的实现。 wiki主要包含对应rplidar产品功能和package接口和参数的说明和相应的使用流程介绍,以及当前ros生态支持的版本信息。 rplidar_ros的github主要包含package对应的源码和package的版本管理和开发者问题对话。 issue(open|closed): 里面主要包含开发者关于rplidar_ros使用的相关问题的对话,如果开发者在使用某个package遇到问题都可以现在此搜索是否有相关问题的解释与解决方法; pull request:相关使用者针对原有代码的改进,希望加入到本仓库,以提高或增强相应的功能; wiki: 包含更加具体的说明和使用介绍;commit、branch、release、contributors是rplidar_ros开发迭代的记录。 2.3 rplidar_ros消息机制 rplidar_ros的在ROS里面的通讯接口,主要有1个话题(topic) /scan和2个服务(service)stop_motor和start_motor.。/scan主要用于向外部发送雷达数距消息(message),消息格式采用的是sensor_msgs/LaserScan,像避障或slam功能模块对应的ROS package就需要调用这个话题的雷达数据完成建图或避障的功能。stop_motor和start_motor主要是用于客户端调用服务器端关闭和启动雷达的接口,使系统可以依据需要选择关闭和开启雷达。 rplidar_ros给出的rplidar.launch,实际使用中依据具体的使用往往关注的参数有 端口号(serial_port)、坐标系名称(frame_id)、正反装(inverted)。 2.4 rplidar_ros坐标系说明: rplidar是按照顺时针旋转,SDK数据输出是带距离和角度信息的左手系数据,rplidar_ros输出已经将其转化为右手坐标系输出。雷达数据坐标系参照雷达数据线的位置(A2)/形状(A1)和下面的图示判断。 2.5 rplidar_ros启动说明: 首先要查看插上rplidar后对应端口权限(每次插拔都要赋予一次权限): ls -l /dev |grep ttyUSB sudo chmod 666 /dev/ttyUSB0
如果没有读写权限,需要添加其读写权限(每次插拔都要赋予一次权限): sudo chmod 666 /dev/ttyUSB0
每次这样插拔都要添加权限很麻烦,可以试试添加设备的udev规则,赋予符合相应规则的设备端口固定权限和端口名称的映射。执行相应的rplidar端口映射的脚本: ./scripts/create_udev_rules.sh
启动rplidar_ros节点,并在rviz中显示出雷达数据: $ roslaunch rplidar_ros view_rplidar.launch
matlab2016版本当前还提供了ROS的功能接口,我们也可以通过matlab参看激光数据。
3. 搭建带rplidar的机器人系统: 前面详细介绍了rplidar_rospackage的相应功能,如果我要在一台机器人本体上使用激光雷达需要怎么设置呢?其实在ROS里利用已有package搭建系统实现基本功能你只需要关注好topic/service和TF frame是否协调起来。TF是ROS里面主要的概念,它维护着每个数据对应坐标系之间的位姿变换关系。要搭建带rplidar的机器人ROS系统,你就需要依据实际安装信息统一好rplidar坐标系与机器人本体base坐标系的变换关系。实现这种变换关系主要有三种: 3.1 通过模型的URDF文件的方式: 在已知的机器人模型的URDF中添加描述雷达的joint和描述在机器人本体上的link。下面是曾在turtlebot仿真模型添加rplidar模型的urdf设置。 3.2 TF静态变换static_transform_publisher方式: 在机器人启动的launch文件添加静态TF变换的信息即可, <node name="base2laser" pkg="tf"type="static_transform_publisher" args="0.07 0 0 0 0 0 1/base_link /laser 50"/> 3.3 通过rqt/tf_echo查看TF tree的构建情况: 4. 利用RPLIDAR在ROS环境建图: 4.1 当前开源的2D激光雷达slam的ROS package主要有: gmapping Hector karto cartographer 4.2 TF tree(gmapping为例) 4.3 rqt_graph(gmapping为例) 4.4 slam建图效果: 搭建系统取决统一好topic/service和tf的接口名称,系统运行效果就取决于里面的算法实现,可能变现在具体的启动配置文件的参数设置和内部算法实现,那就需要查看相应论文和代码中涉及的算法原理和算法实现。 5. rplidar相关问题汇总与说明: 5.1 树莓派等单板系统出现雷达无法启动,请检查是否是供电不足导致的问题。 5.2 rplidar_ros启动前需要设置端口权限 5.3 rplidar原始数据输出是非固定角度增量的输出形式,rplidar_ros输出是修正式固定角度增量输出的数据格式; 5.4 当前版本的rplidar_ros发出的激光数据中的ntenstity数据是fake的无效数据,不建议在实际中使用。 5.5 rplidar_ros 是360全角度输出的rplidar驱动,如有固定角度需求,请自行添加角度滤波的节点。 5.6 使用过程中如有问题,先自行检查端口权限,tf_tree和rqt_graph是否正常,如还是有问题,返回windows系统检查官方驱动是否有问题;
|