2.6.激光传感器安装与显示¶
本节我们将列举几款常用的激光传感器,并对其中一款进行安装和显示。
激光传感器的介绍¶
激光传感器的作用是,扫描机器人周围的物体,并以点云的形式进行表示。 因此,激光传感器分为二维激光传感器和三维激光传感器,会分别提供二维点云和三维点云数据。
通常,三维激光传感器价格昂贵,移动底盘通常会采用二维激光传感器。常用的型号有:
- 日本北洋Hokuyo系列
ROS驱动:http://wiki.ros.org/urg_node
- 德国SICK系列
ROS驱动:http://wiki.ros.org/sick_tim
- 深圳镭神智能生产的激光雷达
ROS驱动:https://github.com/leishen-lidar/LS01D
- 上海思岚科技生产的RPLIDAR系列
ROS驱动:http://wiki.ros.org/rplidar
- 深圳EAI公司生产的YDLIDAR系列
示例一:安装YDLIDAR F4激光ROS驱动包¶
在此,采用激光传感器型号为深圳EAI公司推出的YDLIDAR F4型号。其ROS驱动包可在Github下载:
https://github.com/EAIBOT/ydlidar
将源代码下载到笔记本电脑catkin_ws工作区的src路径下,然后部署到树莓派上:
$ cd ~/catkin_ws/src
$ git clone https://github.com/EAIBOT/ydlidar
然后执行rsync指令同步代码。在此,可将rsync指令写到一个.sh脚本中,每次执行脚本文件就可以了。 在catkin_ws下新建deploy.sh文件,加入以下内容:
rsync -avz --delete --exclude="*.swp" src pi@192.168.5.108:/home/pi/tutorial_ws/
远程部署时在catkin_ws下执行即可。
$ cd ~/catkin_ws
$ sh deploy.sh
将代码部署到树莓派后,登陆上去进行构建、配置。
$ ssh pi@192.168.5.108
(远程终端)$ cd ~/tutorial_ws
(远程终端)$ catkin_make
构建完成后,即可运行测试。为了防止串口名称的冲突,可执行以下命令,将激光传感器映射为特定的名称。
(远程终端)$ roscd ydlidar/startup
(远程终端)$ sudo sh initenv.sh
上述指令会建立udev
rules文件,将激光串口名映射为/dev/ydlidar
,方便后续调用。
注意:设置完udev rules后,需要重新连接激光传感器才会生效。
示例二:安装镭神ls01d激光ROS驱动包¶
同理,如果采用镭神生产的ls01d激光传感器,则需要下载安装其对应驱动。
首先到github下载驱动包,地址为https://github.com/leishen-lidar/LS01D
$ git clone https://github.com/leishen-lidar/LS01D
然后将其中对应的ROS驱动包重命名,即将ls01D Ros文件夹重命名为ls01d, 将重命名后的ls01d文件夹拷贝到工作区的~/catkin_ws/src文件夹下。
同样,将代码远程部署到树莓派后,登陆上去进行构建、配置。
$ ssh pi@192.168.5.108
(远程终端)$ cd ~/tutorial_ws
(远程终端)$ catkin_make
构建完成后,即可运行测试。为了防止串口名称的冲突,可执行以下命令,将激光传感器映射为特定的名称。
(远程终端)$ roscd ls01d/scripts
(远程终端)$ sudo sh create_udev_rules.sh
上述指令会建立udev
rules文件,将激光串口名映射为/dev/laser
,方便后续调用。
注意:设置完udev rules后,需要重新连接激光传感器才会生效。
示例三:安装Hokuyo激光驱动包¶
由于Hokuyo激光传感器的ROS驱动包已发布到ROS的Ubuntu软件源中,所以可以直接二进制方式安装:
$ sudo apt install ros-kinetic-urg-node
同理,SICK的激光驱动包也可通过二进制方式安装:
$ sudo apt install ros-kinetic-sick-tim
启动激光驱动,查看发布的消息¶
将激光传感器连接到树莓派的USB端口上,用roslaunch启动驱动节点:
(远程终端)$ roslaunch ydlidar lidar.launch
或:
(远程终端)$ roslaunch ls01d ls01d.launch
在新打开终端,查看发布的主题及内容:
(远程终端)$ rostopic list
(远程终端)$ rostopic echo /scan
这样可看到打印出激光点云数据。请自行查看消息的类型,及其定义,各变量所表示的含义。
$ rostopic info /scan
ROS多机运行的配置¶
为了能够在笔记本电脑上也能接收到激光数据,需要配置两台机器的ROS环境变量参数。
以底盘树莓派作为ROS主节点。 在树莓派的~/.bashrc文件加入以下内容。
export ROS_MASTER_URI=http://192.168.5.108:11311
export ROS_HOSTNAME=192.168.5.108
然后,在笔记本电脑的~/.bashrc文件加入以下内容。
export ROS_MASTER_URI=http://192.168.5.108:11311
export ROS_HOSTNAME=192.168.5.100
这样,在树莓派上启动roscore后及相关节点后,即可在笔记本电脑上进行查看和通信,请自行尝试。
- 尝试在树莓派启动激光驱动,并在笔记本电脑打印其内容。
- 尝试在笔记本电脑发送某主题,并在树莓派上打印其内容。
使用RViz查看激光信号¶
用打印的方式查看激光信号很不直观,这时,用RViz可直观的查看激光信号。
在树莓派启动激光驱动后,在笔记本电脑运行RViz:
(远程终端)$ roslaunch ydlidar lidar.launch
或:
(远程终端)$ roslaunch ls01d ls01d.launch
$ rviz
在RViz界面中,选择Add按钮,在By Topic选项中找到 /scan 主题,选中并添加。
这时,RViz不会显示激光数据。需要将 Fixed Frame 改为 laser_frame
即可显示。
为了显示更清晰,将 LaserScan 下的 Style 改为 Points 。
或直接在启动就将 Fixed Frame 设置为 laser_frame
:
$ rviz -f laser_frame
注意: 不同传感器驱动所对应的 /scan 主题的frame_id是不一样的,在此以 laser_frame
为例。
查看消息的frame_id值可通过打印消息进行查看: $ rostopic echo /scan 。
自行修改其它选项,看RViz都提供了哪些功能?