原文链接:从零开始搭二维激光SLAM — 使用单线雷达实现LIO-SAM中的特征点提取
已跑通原作者的例程,如何使用自己的雷达实现特征点提取?
下载作者的代码:https://gitee.com/zhankun3280/Creating-2D-laser-slam-from-scratch
以某款sick 2D激光雷达为例,然后注意需要修改的地方:
1、feature_detection.cc
// 构造函数
LaserScan::LaserScan() : private_node_("~")
{
// \033[1;32m,\033[0m 终端显示成绿色
ROS_INFO_STREAM("\033[1;32m----> Feature Extraction Started.\033[0m");
// 将雷达的回调函数与订阅的topic进行绑定
laser_scan_subscriber_ = node_handle_.subscribe("laser_scan", 1, &LaserScan::ScanCallback, this);
// 将提取后的点发布到 feature_scan 这个topic
feature_scan_publisher_ = node_handle_.advertise<sensor_msgs::LaserScan>("feature_scan", 1, this);
// 将提取角点的阈值设置为1.0
edge_threshold_ = 1.0;
}
"laser_scan"改成自己的激光雷达发布的话题,例如我的修改为"scan"
2、CMakeLists.txt文件,文件最后加上以下代码:
# 为指定的文件生成可执行文件
add_executable(${PROJECT_NAME}_feature_detection_node src/feature_detection.cc)
# 为生成的可执行文件添加依赖
add_dependencies(${PROJECT_NAME}_feature_detection_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
# 为生成的可执行文件添加库的链接
target_link_libraries(${PROJECT_NAME}_feature_detection_node ${catkin_LIBRARIES})
3、feature_detection.launch,修改为如下:
<launch>
<!-- 启动激光雷达节点 -->
<include file="$(find sick_scan)/launch/sick_lms_1xx.launch"/>
<!-- 启动节点 -->
<node name="lesson1_laser_scan_node" pkg="lesson1" type="lesson1_feature_detection_node" output="screen" />
<!-- launch rviz -->
<node name="rviz" pkg="rviz" type="rviz" required="false"
args="-d $(find lesson1)/launch/feature.rviz" />
</launch>
4、修改完之后,一定要catkin_make一下
5、启动launch文件
roslaunch lesson1 feature_detection.launch
6、修改rviz界面的Fixed Frame为“laser”(视情况而定)
`如果像显示雷达原始数据,记得话题切换为自己雷达的话题,例如我的为"/scan"
特征点提取画面如下所示: