ros学习第十章作业

ros学习第十章作业

终端输入如下指令:

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建图

 

遇到的问题:

1in sample raise TypeError("Population must be a sequence or set.  For dicts, use list(d).")

random.sample的第一个参数必须是序列或集合,对于字典,请使用listDict

比如

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>