# 小车运行 # ## 开启roscore ## 在终端上输入`roscore`命令 ## 运行小车核心节点 ## R2000命令: ```roslaunch agv agv_robot.launch``` Keli命令: ```roslaunch agv agv_robot.launch lidar:=keli``` ## slam建图 ## ### 启动建图节点 默认使用gmapping建图 ```roslaunch slam slam.launch``` 使用cartographer建图 ```roslaunch slam slam.launch slam_methods:=cartographer``` 默认使用R2000雷达,更改雷达请参考核心节点运行`lidar:=keli` ### 启动节点后,使用摇控手柄或键盘,操控小车移动进行建图 ### 建图完成后保存地图 1 一般slam算法保存方法 - map.pgm和map.yaml 在 ~/map目录里创建 ```$ rosrun map_server map_saver -f ~/map``` 2 cartographer保存方法异于其它建图算法,保存命令 - 当使用cartographer在线建图时,cartographer不知道什么时候结束,所以要先调用服务来关闭传感器数据的接收。 ```rosservice call /finish_trajectory 0``` - 将当前地图信息的快照保存为后缀名为.pbstream 注意必须是绝对路径,例如:/home/jac/catkin_ws/map/… ```rosservice call /write_state "{filename: '<绝对路径存放地图信息>/<地图保存的名字>.pbstream', include_unfinished_submaps: 'true'}"``` - 通过cartographer提供的ros包,将后缀名为.pbstream的地图信息,转化成ros地图信息 ```rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=<保存地图的绝对路径>/<地图命名> -pbstream_filename=<存放pbstream地图快照信息的绝对地址>/.pbstream -resolution=0.05``` ## 自主导航 ## - 启动导航和rviz ```$ roslaunch navigation navigation.launch map_file:=$HOME/map.yaml``` 如果想单独打开Rviz,可以添加`open_rviz:=false`参数,再单独运行下面的命令启动Rviz ```$ rosrun rviz rviz -d `rospack find navigation`/rviz/navigation.rviz``` - 在开始导航之前,小车应该知道它的位置和姿势。 - 要给出初始数据,请按照说明进行操作。 1. 点击2D Pose Estimate按钮 1. 通过单击并拖动地图上的方向来设置地图上的大致位置。 箭头的每个点意味着小车的预期姿势。激光扫描仪将在近似位置绘制线条,如地图上的墙壁。 如果图形没有显示线条,请重复上述过程。 - 当小车已经定位,它将自动计划路径。 要发送目标位置: 1. 点击 2D Nav Goal按钮 1. 点击地图上你想要的TurtleBot驱动和拖动方向小车应该指向地方 如果目标位置的路径被阻止,这可能会失败。 要在机器人到达目标位置之前停止机器人,请发送小车的当前位置。 - 特别地,cartographer没有使用2D Pose Estimate按钮给定初始位置,但移动小车一段距离后,cartographer会自动重定位。