Robosense在LIOSAM中的使用
在上次跑LIOSAM过程中,发现LIOSAM代码主要使用的激光雷达是Velodyne和Outser,且对于Outser而言,代码中的主要格式是将Outser的数据格式转换为Velodyne的数据格式来使用,见如下代码。
else if (sensor == SensorType::OUSTER)
{
// Convert to Velodyne format
pcl::moveFromROSMsg(currentCloudMsg, *tmpOusterCloudIn);
laserCloudIn->points.resize(tmpOusterCloudIn->size());
laserCloudIn->is_dense = tmpOusterCloudIn->is_dense;
for (size_t i = 0; i < tmpOusterCloudIn->size(); i++)
{
auto &src = tmpOusterCloudIn->points[i];
auto &dst = laserCloudIn->points[i];
dst.x = src.x;
dst.y = src.y;
dst.z = src.z;
dst.intensity = src.intensity;
dst.ring = src.ring;
dst.time = src.time * 1e-9f;
}
}
于是乎,就想到如果是其他激光雷达怎么办,如果是Robosense呢???紧接着,在github上找到了Robosense的驱动,rslidar_SDK,支持两种格式的数据读取和转换分别是XYZI和XYZIRT,当然在编译前,在CMakeLists文件中可以选择:
#=======================================
# Custom Point Type (XYZI, XYZIRT)
#=======================================
set(POINT_TYPE XYZI)
同样在编译之前,在CMakeLists中下列代码还需要更改编译方式,由于该代码支持ROS2的编译。
#=======================================
# Compile setup (ORIGINAL,CATKIN,COLCON)
#=======================================
set(COMPILE_METHOD CATKIN)
补充一下rslidar_sdk编译方式:
该驱动支持的Robosense的型号有:
RS16
RS32
RSBP
RS128
RS80
RSM1-B3
RSHELIOS
编译之前需要同样需要在config.yaml文件中进行选择
lidar:
- driver:
lidar_type: RS128 #LiDAR type - RS16, RS32, RSBP, RS128, RS80, RSM1, RSHELIOS
frame_id: /rslidar #Frame id of message
msop_port: 6699 #Msop port of lidar
difop_port: 7788 #Difop port of lidar
start_angle: 0 #Start angle of point cloud
end_angle: 360 #End angle of point cloud
min_distance: 0.2 #Minimum distance of point cloud
max_distance: 200 #Maximum distance of point cloud
use_lidar_clock: false #True--Use the lidar clock as the message timestamp
#False-- Use the system clock as the timestamp
安装依赖项:
1.Yaml (必需)
版本号: >= v0.5.2
若已安装ROS desktop-full, 可跳过
安装方式:
sudo apt-get update
sudo apt-get install -y libyaml-cpp-dev
2.Pcap (必需)
版本号: >=v1.7.4
安装方式:
sudo apt-get install -y libpcap-dev
3.Protobuf (可选,注意如果跑Cartographer,可能会版本和安装方式会冲突)
版本号: >=v2.6.1
安装方式:
sudo apt-get install -y libprotobuf-dev protobuf-compiler
4.依赖ROS编译
(1) 打开工程内的CMakeLists.txt文件,将文件顶部的set(COMPILE_METHOD ORIGINAL)改为set(COMPILE_METHOD CATKIN)。已经完成
(2) 将rslidar_sdk工程目录下的package_ros1.xml文件重命名为package.xml。
(3) 进入文件夹进行编译:
cd rslidar_sdk
mkdir build && cd build
cmake .. && make -j4//如果是8线程可以相应的更改
运行:
source devel/setup.bash //在build文件夹下面
cd ..
roslaunch rslidar_sdk start.launch //在rslidar_sdk文件夹下面
接下里下载代码:liosamrslidar,并进行编译完成使用。如果你已经编译过LIO-SAM,那么你需要下载下面这个代码:rs_to_velodyne,然后将该代码放置与LIO-SAM的同一工作空间下进行编译,同时修改LIO-SAM的run.launch文件:
<launch>
<arg name="project" default="lio_sam"/>
<node pkg="lio_sam" type="lio_sam_rs_to_velodyne" name="rs2velodyne_node" args="XYZIRT" />
<!-- Parameters -->
<rosparam file="$(find lio_sam)/config/params.yaml" command="load" />
<!--- LOAM -->
<include file="$(find lio_sam)/launch/include/module_loam.launch" />
<!--- Robot State TF -->
<include file="$(find lio_sam)/launch/include/module_robot_state_publisher.launch" />
<!---Run Navsat -->
<!--include file="$(find lio_sam)/launch/include/module_navsat.launch" /-->
<!--- Run Rviz-->
<include file="$(find lio_sam)/launch/include/module_rviz.launch" />
</launch>
然后正常启动即可。