ros小车2d建图,如果有雷达,那么使用gmapping方式建图,其实就一个命令,启动建图程序,它默认会启动小车,之后,我们通过手柄或者键盘控制小车就可以有地图产生,然后就需要保存地图,新手上路,不免出现很多问题。
我这里是轮趣科技WHEELTEC的一款ros教育机器人,根据官方给的示例,在turn_on_wheeltec_robot/launch下面就有一个mapping.launch的启动文件,默认使用的是gmapping建图方式,直接启动该文件即可。
<launch>
<arg name="mapping_mode" default="gmapping" doc="opt: gmapping,hector,cartographer,karto"/>
<!-- 是否在建图时开启导航 默认不开启 仅在rrt自主建图时同时进行-->
<arg name="navigation" default="false"/>
<arg name="odom_frame_id" default="odom_combined"/>
<!-- turn on lidar开启雷达 -->
<include file="$(find turn_on_wheeltec_robot)/launch/wheeltec_lidar.launch" />
<!-- 启动APP一键保存地图功能 -->
<node pkg="world_canvas_msgs" type="save" name="save_map" />
<!-- 开启gmapping建图算法 -->
<group if="$(eval mapping_mode == 'gmapping')">
<include file="$(find turn_on_wheeltec_robot)/launch/include/algorithm_gmapping.launch" />
<!-- 开启机器人底层相关节点 -->
<include file="$(find turn_on_wheeltec_robot)/launch/turn_on_wheeltec_robot.launch">
<arg name="navigation" value="$(arg navigation)"/>
<arg name="is_cartographer" value="false"/>
<arg name="odom_frame_id" value="$(arg odom_frame_id)"/>
</include>
</group>
<!-- // 后面其他建图方式省略-->
</launch>
roslaunch turn_on_wheeltec_robot mapping.launch
不出意外,就出现红叉叉:
ERROR: cannot launch node of type [gmapping/slam_gmapping]: gmapping
解决办法就是安装ros-melodic-gmapping,ros-melodic-move-base。
apt install ros-melodic-gmapping ros-melodic-move-base
再重新启动不报错了,但是我们打开rviz查看地图,没有显示地图,我们点击Add,添加Map,Topic选择/map,又出现新的告警:
Status Warn: no map received
这个警告呢,主要是雷达的问题,这里启动成功,查看topic都有,/map,/scan,而且rviz中LaserScan显示正常,通过 rostopic echo /scan没有任何输出,就是雷达启动失败。
根据网上的资料,是因为雷达型号默认设置错误。在文件turn_on_wheel_robot/launch/wheeltec_lidar.launch中根据实际情况设置合适的型号。我这里默认是default = "ls_M10P_uart",实际上我的雷达型号是N10,所以这里修改default="ls_N10"
雷达型号,一般在雷达上有标识:
再次启动,雷达启动正常,打印信息如下所示:
对比前面启动失败的情况,正常启动之后,Initialised lslidar x10 without error 后面还多了雷达初始化信息。 启动失败的时候,是没有这些信息的。
接着可以测试雷达数据,命令行运行 rostopic echo /scan,就会输出很多点位信息。
这个时候rviz里面就显示正常了:
运行一段时间之后,可以保存地图,如下所示,直接在turn_on_wheeltec_robot/map2目录下保存:
rosrun map_server map_saver -f WHEELTEC
生成的文件有pgm,yaml格式。
正常gmapping建图,就两个命令,一个启动建图 roslaunch turn_on_wheeltec_robot mapping.launch和一个保存地图 rosrun map_server map_saver -f WHEELTEC。但是新手常常会遇到很多奇怪的问题。