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系列

ROS驱动:https://github.com/EAIBOT/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都提供了哪些功能?