造车日记 模拟器的SLAM初试
本来挺简单的过程,但是因为各种版本的问题,折腾了很久。
dashing自带的程序似乎有问题。。
下面使用的是ROS2 foxy版本。
准备好必要的软件包。
1 | mkdir -p turtlebot3_ws/src |
编译成功。
导入包
1 | source ~/turtlebot3_ws/install/setup.zsh |
然后将 turtlebot3_ws/install/turtlebot3_gazebo/share/turtlebot3_gazebo/models 里的所有目录全部软链接到 ~/.gazebo/models/里,或者每次使用前 申明一下环境变量$GAZEBO_MODEL_PATH
最后,申明环境变量TURTLEBOT3_MODEL
1 | export TURTLEBOT3_MODEL=waffle |
这样就完成了环境准备。
注意下面的操作,每新开一个terminal,都需要执行上述操作。
打开gazebo 模拟环境
1 | ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py |
这时应该能看到gazebo环境被启动
打开 slam建图
1 | ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True |
这时能看到rviz和gazebo同窗
操作 机器人
1 | ros2 run turtlebot3_teleop teleop_keyboard |
通过按键让机器人在环境中走动,机器人的深度传感器就同时会对环境进行扫描和建图。
存图
当机器人走了一段路程,传感器已经覆盖全部环境时,停下机器人。保存地图
1 | ros2 run nav2_map_server map_saver_cli -f ~/map |
正确运行的话, 在指定目录就会出现两个地图文件。
这时关闭cartographer 和 teleop_keyboard。
使用地图导航
1 | ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:=/home/marco/map.yaml |
注意地图文件的路径一定要用 绝对路径 。。。不要问我是怎么知道的。。。。
RVIZ和Gazebo再度同窗。
但是此时,机器人尚不知道自己的初始位置,需要人工标定出来。
使用RVIZ界面里的 “2D Pose Estimate” 按钮, 对比Gazebo中的实际位置,在RVIZ里点出初始位置。
只要误差不要太大就可以。
之后ROS2 的NAV2系统就进入工作状态。
再次使用RVIZ里的“Navigation2 Goal” 在地图上选择目的地, 这时nav2就会规划出路线,并自动驱动机器人在路线上行走到目标位置。
to be continued…