mkdir -p ~/lslidar_ws/src
cd ~/lslidar_ws/src
git clone https://github.com/tongsky723/lslidar_C16.git
cd ~/lslidar_ws
catkin_make
source devel/setup.bash
roslaunch lslidar_c16_decoder lslidar_c16.launch
3.2.1 列出正在运行的话题,终端输入:
rostopic list -v
3.2.2 列出正在运行的节点,终端输入:
rosnode list
3.2.3 查看某一节点的具体参数和通讯话题,终端输入命令:
rosnode info 节点名
通过rviz可以看到,点云的话题名为 /lslidar_point_cloud,因此终端输入命令:
rostopic hz /lslidar_point_cloud
注:红框内为消息接发收时间参数,频率大概在10hz左右,与厂家说明书参数基本一致。
查看雷达扫描过程中,某一行的点云的坐标系名称、点云数等参数。
rostopic echo --noarr /lslidar_point_cloud #一定要加--noarr,排除话题数据中的数组信息,否则会出现乱码
注:红框内的数据为一组完整数据,雷达的坐标系frame_id名称为laser_link;每一行激光的总点云数大概为30000。
常见三维点云的具体格式如下,header类类型包括stamp时间戳,frame_id 坐标系名称(该参数是一个字符串类型,可以选择的地图类型),seq是一个记录消息序号的整型变量:
//头文件
header:
seq: 18664
stamp:
secs: 1551087603
nsecs: 700827000
frame_id: "velodyne"
//height可视为点云数据的行数;
//如果为1,则表示无序;
//否则为有组织点云数据集的高度/行数
height: 1
//width为一行的总点数
//对于无序数据集而言,width即为点云总数
width: 22998
//看到fields,可以先跳过看完point_step和row_step之后再回来
//field格式包括name,offset,datatype,count,具体定义见sensor_msgs/PointField.msg
//该点云所包括的信息有点云的xyz信息(即点云在激光雷达坐标系的位姿)以及强度信息
//offset此处的含义不是很明白,我的理解是对于name“x”而言,它的信息包含在第0字节-第3字节中;name“y”而言,包含在第4字节-第7字节;依次类推。欢迎有大佬帮我在此处解疑下
fields:
-
name: "x"
offset: 0
datatype: 7
count: 1
-
name: "y"
offset: 4
datatype: 7
count: 1
-
name: "z"
offset: 8
datatype: 7
count: 1
-
name: "intensity"
offset: 16
datatype: 7
count: 1
-
name: "ring"
offset: 20
datatype: 4
count: 1
//数据存储方式,包括大端与小端,具体解释见后文参考链接
is_bigendian: False
//存储一个点云所需的字节长度,单位为byte
point_step: 32
//存储一行点云所需的字节长度,单位为byte
//row_step = point_step * width
row_step: 735936
//点云数据信息,该数组解析方式由field进行定义
//data数组的大小为row_step * height
data: [51, 81, 165, 64, 127, 62, 141, 192, 255, ......]
rosbag record -a -O lslidar_bagfiles
# -a表示所有发布的话题都应该积累在一个bag文件中;-o表示所有数据记录名为subset.bag的文件中。
rosbag info lslidar_bagfiles_2022-08-08-09-26-25.bag
rosbag play lslidar_bagfiles_2022-08-08-09-26-25.bag
cd catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM.git
cd ..
catkin_make
source ~/catkin_ws/devel/setup.bash
下载链接:http://ceres-solver.org/installation.html
# CMake
sudo apt-get install cmake
# google-glog + gflags
sudo apt-get install libgoogle-glog-dev libgflags-dev
# Use ATLAS for BLAS & LAPACK
sudo apt-get install libatlas-base-dev
# Eigen3
sudo apt-get install libeigen3-dev
# SuiteSparse (optional)
sudo apt-get install libsuitesparse-dev
tar zxf ceres-solver-1.14.0.tar.gz
mkdir build
cd build
cmake ../ceres-solver-1.14.0
make -j4
make test
# Optionally install Ceres, it can also be exported using CMake which
# allows Ceres to be used without requiring installation, see the documentation
# for the EXPORT_BUILD_DIR option for more information.
sudo make install
~/catkin_ws/src/A-LOAM/src
打开scanRegistration.cpp文件:
将ros::Subscriber subLaserCloud = nh.subscribe
改为:
ros::Subscriber subLaserCloud = nh.subscribe
先运行A-LOAM算法:
cd ~/catkin_ws
catkin_make
roslaunch aloam_velodyne aloam_velodyne_VLP_16.launch
然后在打开bag包:
cd ~/ws/lidar_bag
rosbag play lslidar_bagfiles_2022-08-08-09-26-25.bag
由于Autoware默认使用velodyne激光雷达,参考系使用velodyne;点云话题为points_raw。因此,如果要在autoware1.14上使用lslidar,需将雷达的格式转化为velodyne的格式。即,需要将/lslidar/src/lslidar_C16/lslidar_c16_decoder/launch/lslidar_c16.launch文件中的frame id由laser_link修改为velodyne,将原话题lslidar_point_cloud转化为points_raw,添加一行:
<remap from="lslidar_point_cloud" to="/points_raw" />
由:
参考资料:
(1)[ROS常用组件] — rqt工具箱
(2)详细的Rostopic命令系列(包括消息发布等实例操作)