noetic中运行amcl

保存地图

前文利用自己搭建的环境运行gmapping算法构建地图

保存地图:

rosrun map_server map_saver -f ~/map

保存为一个.pgm及,yaml的地图


关闭所有的进程,重新打开相关进程


安装amcl


sudo apt install ros-<ROS版本>-navigation


关于launch文件的实现,在amcl功能包下的example目录已经给出了示例


roscd amcl

ls examples   #查看示例文件


该目录下会列出两个文件: amcl_diff.launch 和 amcl_omni.launch 文件,前者适用于差分移动机器人,后者适用于全向移动机器人,可以按需选择。

参考前者,新建 launch 文件,复制 amcl_diff.launch 文件内容到catkin_ws/src内相应文件夹内并修改如下,文件名为amcl.launch:


<launch>

    <node pkg="amcl" type="amcl" name="amcl" output="screen">

        <!-- Publish scans from best pose at a max of 10 Hz -->

        <param name="odom_model_type" value="diff"/><!-- 里程计模式为差分 -->

        <param name="odom_alpha5" value="0.1"/>

        <param name="transform_tolerance" value="0.2" />

        <param name="gui_publish_rate" value="10.0"/>

        <param name="laser_max_beams" value="30"/>

        <param name="min_particles" value="500"/>

        <param name="max_particles" value="5000"/>

        <param name="kld_err" value="0.05"/>

        <param name="kld_z" value="0.99"/>

        <param name="odom_alpha1" value="0.2"/>

        <param name="odom_alpha2" value="0.2"/>

        <!-- translation std dev, m -->

        <param name="odom_alpha3" value="0.8"/>

        <param name="odom_alpha4" value="0.2"/>

        <param name="laser_z_hit" value="0.5"/>

        <param name="laser_z_short" value="0.05"/>

        <param name="laser_z_max" value="0.05"/>

        <param name="laser_z_rand" value="0.5"/>

        <param name="laser_sigma_hit" value="0.2"/>

        <param name="laser_lambda_short" value="0.1"/>

        <param name="laser_lambda_short" value="0.1"/>

        <param name="laser_model_type" value="likelihood_field"/>

        <!-- <param name="laser_model_type" value="beam"/> -->

        <param name="laser_likelihood_max_dist" value="2.0"/>

        <param name="update_min_d" value="0.2"/>

        <param name="update_min_a" value="0.5"/>

        <!--设置坐标系:odom、map 和 机器人基坐标系-->

        <param name="odom_frame_id" value="odom"/><!-- 里程计坐标系 -->

        <param name="base_frame_id" value="base_footprint"/><!-- 添加机器人基坐标系 -->

        <param name="global_frame_id" value="map"/><!-- 添加地图坐标系 -->

        <param name="resample_interval" value="1"/>

        <param name="transform_tolerance" value="0.1"/>

        <param name="recovery_alpha_slow" value="0.0"/>

        <param name="recovery_alpha_fast" value="0.0"/>

    </node>

</launch>


编写launch文件

文件名

amcl_launch.launch

内容如下
<launch>


<launch>

<!-- 设置地图的配置文件 -->

    <arg name="map" default="map.yaml" />

    <!-- 运行地图服务器,并且加载设置的地图-->

    <node name="map_server" pkg="map_server" type="map_server" args="$(find turtlebot3_gazebo)/map/$(arg map)"/>  #在turtlebot3_gazebo下新建一个文件夹map,将保存的地图复制到该文件夹中

    <!-- 启动AMCL节点 -->

    <include file="$(find turtlebot3_gazebo)/launch/amcl.launch" />

    <!-- 运行rviz -->

    <node pkg="rviz" type="rviz" name="rviz"/>

</launch>


改完launch文件按照惯例在工作空间catkin_ws下


source ~/catkin_ws/devel/setup.bash


打开gazebo


roslaunch turtlebot3_gazebo turtlebot3_world_test.launch #斜杠为我自己构建场景的launch文件  前面 turtlebot3_gazebo为launch文件所在文件夹


控制移动


roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch


打开amcl

roslaunch之前编写的launch文件就🆗了


roslaunch turtlebot3_gazebo amcl_launch.launch


在启动的 rviz 中,添加RobotModel、Map组件,分别显示机器人模型与地图,添加 posearray 插件,设置topic为particlecloud来显示 amcl 预估的当前机器人的位姿,箭头越是密集,说明当前机器人处于此位置的概率越高



出现问题:RLException: [amcl_launch.launch] is neither a launch file in package [turtlebot3_gazebo] nor is [turtlebot3_gazebo] a launch file name

出现该问题,输入

source ~/catkin_ws/devel/setup.bash

然后重新roslaunc即可


由于每次都需要重新输入一下,所以可以将其写到终端开启文件./bashrc中去

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

source ~/.bashrc

打开./bashrc文件查看,可以看到最后面写入了该语句

gedit ~/.bashrc

这也以后就不用再多次输入了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容