ROS 下使用3D激光雷达 velodyne vlp-16

系统版本:Ubuntu 16.04 32位
ROS版本: kinetic

前提条件:ROS开发环境安装

1. 安装驱动(注意版本)

sudo apt-get install ros-kinetic-velodyne

2. 建立ROS工程

mkdir -p catkin_velodyne/src
cd catkin_velodyne/src
git clone https://github.com/ros-drivers/velodyne.git
cd ..
catkin_make
source devel/setup.bash

3. 把Velodyne XML文件转成ROS节点的YAML文件
转换后生成VLP-16.yaml,不是我针对谁,CSDN上要积分的都是垃圾

rosrun velodyne_pointcloud gen_calibration.py path/to/VLP-16.xml

4. 加载(注意yaml使用全路径)

roslaunch velodyne_pointcloud VLP16_points.launch calibration:=path/to/VLP-16.yaml

5. 实时显示点云图,图形界面下执行

rosrun rviz rviz -f velodyne
或
rosrun rviz rviz
#之后在手动设置Fixed Frame= velodyne

然后在rviz中点Add by topic,增加PointCloud2,这样就可以实时显示获取的3D点云图

问题1:使用主机windows10、虚拟机vmware安装ubuntu,激光雷达和windows主机在一个局域网,一顿操作猛如虎,虚拟机就是收不到激光数据。
解决1:原因不明,Ubuntu使用单独的工控机,直接跟雷达怼在一个交换机就可以了。

问题2:QXcbConnection: XCB error: 148 错误
解决2:ros 运行rviz时出现 QXcbConnection: XCB error: 148 错误 解决方法

我的解决2:rviz能跑起来了(还是老外干货多,百毒再一次让我失望)
参考: Ubuntu 安装远程桌面 B. X11vnc 无头环境方案

6.录制和回放

#录制
rosbag record -O  /velodyne_points
#显示信息
rosbag info 
#回放
rosbag play 

问题:/use_sim_time set to true and no clock published. Still waiting for valid time…
原因:这是由于 ROS tf 的发布时间晚于 topic 的时间,Rviz 在做 msg 的 tf 变换时,默认把过时的 msg 丢掉。为了解决这一问题,可以让系统以 msg 对应的 simulated time 运行,而不是实际的 wall-clock time.
解决:

#录制前
rosparam set /use_sim_time false
#播放时
rosparam set /use_sim_time true

参考:ROS 中 rosbag 相关命令介绍