搭建一个完整的3D SLAM导航小车
在 turtlebot3_simulations/turtlebot3_gazebo/launch下创建自己的tur_3d.launch文件(红色)并将turtlebot3_house.launch的内容复制到自己的launch文件中。3D雷达和小车已经成功组合在一起了,由于我是设置的雷达在base_link的高度上方4的距离所以会出现浮空的样子,但是绑定了小车base_link雷达可以跟随一起运
本博客用于记录我整个学习流程
目录
一.搭建Gazebo仿真环境
二.SLAM 3D 建图
三.3D点云地图转2D栅格地图
四.3D 导航
一.搭建Gazebo仿真环境
1.1 3D雷达(16线)
这里采用16线激光雷达进行实验,可根据自己需要选择合适的雷达,这里仿真采用velodyne雷达
1.1.1 雷达模型和仿真源码:https://github.com/lmark1/velodyne_simulator
1.1.2 雷达安装
sudo apt-get install ros-noetic-velodyne-*
1.1.3 雷达测试
roslaunch velodyne_description example.launch
gazebo成功显示雷达模型以及能正常获取3D点云数据,雷达安装完成
1.2仿真小车(turtlebot3)
注意下面代码默认为main,根据自己ros版本选择对应的版本分支,我的是20.04版本,所以我以noetic为例,请根据自己实际的版本修改
1.2.1 小车模型源码:https://github.com/ROBOTIS-GIT/turtlebot3
1.2.2 小车仿真包源码:https://github.com/ROBOTIS-GIT/turtlebot3_simulations/tree/main
1.2.3 源码安装(两个源码包都要安装)
cd catkin_ws/src
git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git
git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
cd ..
catkin_make
1.2.4 小车测试
由于该小车模型有三种分别是:waffle、waffle_pi/burger、在测试前可以根据自己的需要设置一个模型为默认并添加到环境中,方便后面的实验(我这里用的waffle模型小车)
echo "export TURTLEBOT3_MODEL=waffle" >> ~/.bashrc
source ~/.bashrc
进入工作空间测试代码
cd catkin_ws
source ./devel/setup.bash
roslaunch turtlebot3_gazebo turtlebot3_house.launch
成功运行仿真环境,小车安装完成

1.3 搭建3D雷达小车
由于原本的小车只搭载2D雷达,因此将上述 velodyne雷达和turtlebot3小车进行组合,目前工作空间的功能包为红框所示

1.3.1 tur_3d.launch
在 turtlebot3_simulations/turtlebot3_gazebo/launch下创建自己的tur_3d.launch文件(红色)并将turtlebot3_house.launch的内容复制到自己的launch文件中
将tur_3d.launch第16行小车模型(蓝色框)文件改为后面我们的模型文件tur_3d.xacro
<param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/tur_3d.urdf.xacro" />
1.3.2 tur_3d.xacro
在src/turtlebot3/turtlebot3_description/urdf下创建自己的tur_3d.xacro文件(红色),将waffle的模型文件复制过来(蓝色),代码灰色重启一下vscode即可
如下雷达的模型加载代码添加到tur_3d.xacro后面
<xacro:include filename="$(find velodyne_description)/urdf/VLP-16.urdf.xacro"/>
<xacro:VLP-16 parent="base_link" name="velodyne" topic="/velodyne_points" hz="10" samples="440" gpu="false">
<origin xyz="0 0 0.4" rpy="0 0 0" />
</xacro:VLP-16>
添加雷达代码为选中的部分

1.3.3 测试小车和雷达的组合
启动tur_3d.launch文件
roslaunch turtlebot3_gazebo tur_3d.launch
3D雷达和小车已经成功组合在一起了,由于我是设置的雷达在base_link的高度上方4的距离所以会出现浮空的样子,但是绑定了小车base_link雷达可以跟随一起运动

1.3.4 添加TF和RVIZ配置
上述1.3.3能在仿真环境中看到小车和雷达组合,打开rviz看小车模型和雷达数据直接运行后运行rviz会发现报错如下 ,这是启动的launch文件中没有添加TF导致的

添加如下发布TF的代码到自己的tur_3d.launch文件中,如不想每次启动rviz,可以添加rviz启动配置看自己需要
<!-- 启动 joint_state_publisher 和 robot_state_publisher -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"/>
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/>

添加机器人模型插件和点云插件,修改接收对应话题后在RVIZ中能正常显示机器人模型和雷达采集的点云数据,可根据自己需要调整点云种类颜色大小等等()
添加深度相机的point和image可以看到对应的数据

二.SLAM 3D 建图
2.0 常用的3D建图算法
SLAM常用的2D、3D算法复现以及仿真汇总_slam仿真-CSDN博客
2.1fast_lio建图算法
2.1.1 fast_lio源码安装
我采用的是fast_lio 3D建图算法构建3D点云地图
FAST_LIO复现,并用实际建图_fast-lio复现-CSDN博客
2.1.2 仿真建图
通过前一小节完成了fast_lio的源码安装编译并成功跑通了数据集,为了能实现仿真环境中的建图进行如下修改
1. 修改fast_lio/src/FAST_LIO/config/velodyne.yaml配置文件的话题,替换为仿真环境下雷达和IMU的话题的话题
lid_topic: "/velodyne_points"
imu_topic: "/imu"
2.修改配置参数,改为 Velodyne LiDAR和16线雷达

到这里直接启动建图测试算法,打开3个终端窗口,进入对应的功能包中并source后运行如下代码
分别为仿真环境、fast_lio建图算法、键盘控制
roslaunch turtlebot3_gazebo tur_3d.launch
roslaunch fast_lio mapping_velodyne.launch
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
在键盘控制终端控制小车运动却发现地图漂移且报错无效积分

经过测试排查,发现我之前录的数据包(实物小车)是能正常建图的,我又尝试了point_lio发现仿真的数据同样无法建图,目前定位是仿真数据的问题(目前还未解决有知道的可以联系我或者评论区告知一下)
2.2 定位算法( Fast_lio localization)
三.3D点云地图转2D栅格地图
3.1 滤波去噪
四.3D 导航
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)