终端输入如下指令:
1、导航:
第一个终端roslaunch mbot_gazebo slam.launch
第二个终端roslaunch mbot_navigation nav_cloister_demo.launch
在rviz上面选择目标点进行导航
或者运行
rosrun mbot_navigation move_test.py或者rosrun mbot_navigation exploring_random.py
实现程序中指定点导航
2、导航与slam建图同步进行
第一个终端roslaunch mbot_gazebo slam.launch
第二个终端roslaunch mbot_navigation nav_cloister_demo.launch
在rviz上面选择目标点边导航边slam建图
或者运行
rosrun mbot_navigation exploring_random.py
实现程序中指定点进行边导航边slam建图
遇到的问题:
1、in sample raise TypeError("Population must be a sequence or set. For dicts, use list(d).")
random.sample的第一个参数必须是序列或集合,对于字典,请使用list(Dict)
比如
d = {'a':1,'b':2}
random.sample(d, 1)
改为
random.sample(list(d), 1)
2、建成的图中在机器小车形式轨迹后面出现很多黑点
因为雷达被轮胎遮挡,因此重新修改xacro文件,修改小车模型,在base_link上面加上brace(支撑物)调节雷达高度,显著改善地图,但由于轮胎设计太高,还是会遮挡雷达,多次走几遍实现较好的建图
3、导航经常失败
由于设计的home.world过于小,导致小车导航过程中,经常无法到达指定的点,反复修改home.world,将房间调大,导航成功
本节主要使用amcl节点定位和move_base节点进行路径规划,需要提供给move_base地图数据home.yaml,并使用地图服务器加载设置的地图
nav_cloister_demo.launch
<launch>
<!-- 设置地图的配置文件 -->
<arg name="map" default="home.yaml" />
<!-- 运行地图服务器,并且加载设置的地图-->
<node name="map_server" pkg="map_server" type="map_server" args="$(find mbot_navigation)/maps/$(arg map)"/>
<!-- 运行move_base节点 -->
<include file="$(find mbot_navigation)/launch/move_base.launch"/>
<!-- 启动AMCL节点 -->
<include file="$(find mbot_navigation)/launch/amcl.launch" />
<!-- 运行rviz -->
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find mbot_navigation)/rviz/nav.rviz"/>
</launch>