ros 中的navigation可以根据机器人自动实现路径规划,自主定位。其中的amcl实现了一种基于蒙特卡洛的粒子滤波定位方法。
本文测试环境为ubuntu18.04 + ros melodic。

1. ros安装

详见官方网站安装步骤:
http://wiki.ros.org/melodic/Installation/Ubuntu

2. navigation 安装

ros-nav的介绍见:http://wiki.ros.org/navigation
在主目录下新建catkin_ws工程, 在其中的src文件夹下载源码,分支为对应的melodic-devel :

cd ~
mkdir catkin_ws
cd catkin_ws
mkdir src
cd src
git clone -b melodic-devel https://github.com/ros-planning/navigation.git

初始化catkin工程并编译:

cd ~/catkin_ws/src
catkin_init_workspace
cd ..
catkin_make

3.运行

a. 新开一个终端

roscore

b. 新开第二个终端

cd catkin_ws
source devel/setup.zsh 或者 source devel/setup.zsh (根据自己终端选择)
roslaunch amcl amcl_diff.launch
# 接着会显示:
[ INFO] [1628238691.407115582]: Requesting the map...
[ WARN] [1628238691.408038696]: Request for map failed; trying again...

这说明没有地图,但是基本环境是没有问题的。
c. 下载地图和测试数据
下载地址: http://download.ros.org/data/amcl/

上图中的*.pgm是地图文件,0.05表示分辨率。其他的bag包都是激光雷达的数据文件。
将所有数据下载到: /home/yx/catkin_ws/src/navigation/amcl/test
d. 建立基本定位和全局定位launch文件
文件示例在/amcl/test下,分别为basic_localization_stage.xml和global_localization_stage.xml,将其拷贝到amcl/examples中:

cp test/basic_localization_stage.xml examples/
cp test/global_localization_stage.xml examples/
mv examples/basic_localization_stage.xml  examples/basic_localization_stage.launch
mv examples/global_localization_stage.xml  examples/global_localization_stage.launch

然后在对应的launch文件末尾添加rviz显示的操作:

<node pkg="rviz" name="rviz" type="rviz" args="-d $(find amcl)/rviz/rviz.rviz" />

最后对应的基本定位launch文件为:

<!-- setting pose: 47.943 21.421 -0.503
setting pose: 30.329 34.644 3.142
117.5s -->
<launch><param name="/use_sim_time" value="true"/><node name="rosbag" pkg="rosbag" type="play" args="-d 5 -r 1 --clock --hz 10 $(find amcl)/test/basic_localization_stage_indexed.bag"/> <!--数据包自行修改替换--><node name="map_server" pkg="map_server" type="map_server" args="$(find amcl)/test/willow-full.pgm 0.1"/><node pkg="amcl" type="amcl" name="amcl" respawn="false" output="screen"><remap from="scan" to="base_scan" /><param name="transform_tolerance" value="0.2" /><param name="gui_publish_rate" value="5.0"/><param name="save_pose_rate" value="0.5"/><param name="laser_max_beams" value="100"/><param name="laser_max_range" value="10.0"/><param name="min_particles" value="300"/><param name="max_particles" value="2000"/><param name="kld_err" value="0.05"/><param name="kld_z" value="0.99"/><param name="odom_model_type" value="diff-corrected"/><param name="odom_alpha1" value="0.1"/><param name="odom_alpha2" value="0.1"/><!-- translation std dev, m --><param name="odom_alpha3" value="0.1"/><param name="odom_alpha4" value="0.1"/><param name="odom_alpha5" value="0.0"/><param name="laser_z_hit" value="0.90"/><param name="laser_z_short" value="0.1"/><param name="laser_z_max" value="0.05"/><param name="laser_z_rand" value="0.05"/><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="likelihood_field_prob"/><!-- <param name="laser_model_type" value="beam"/> --><param name="do_beamskip" value="true"/><param name="beam_skip_distance"  value="0.25" /><param name="beam_skip_threshold" value="0.5" />  <!--0.3--><param name="beam_skip_error_threshold_" value="0.8" />  <!--0.9--><param name="laser_likelihood_max_dist" value="2.0"/><param name="update_min_d" value="0.2"/><param name="update_min_a" value="0.3"/><param name="odom_frame_id" value="odom"/><param name="resample_interval" value="3"/><param name="transform_tolerance" value="2.0"/><param name="recovery_alpha_slow" value="0.0"/><param name="recovery_alpha_fast" value="0.0"/><param name="initial_pose_x" value="47.443"/><param name="initial_pose_y" value="21.421"/><param name="initial_pose_a" value="-1.003"/><param name="initial_cov_xx" value="0.01"/>   <!--0.01-->   <!--default:0.5 * 0.5--><param name="initial_cov_yy" value="0.01"/>   <!--0.01-->   <!--default:0.5 * 0.5--><param name="initial_cov_aa" value="0.01"/> <!--0.01-->   <!--default:0.0685=(M_PI/12.0) * (M_PI/12.0) --></node><test time-limit="180" test-name="basic_localization_stage" pkg="amcl" type="basic_localization.py" args="0 47.060 21.603 -1.053 0.75 0.75 90.0"/><node pkg="rviz" name="rviz" type="rviz" args="-d $(find amcl)/rviz/rviz.rviz" />
</launch>

全局定位launch文件为:

<?xml version="1.0" ?>
<!-- setting pose: 47.943 21.421 -0.503
setting pose: 30.329 34.644 3.142
117.5s -->
<launch><param name="/use_sim_time" value="true"/><node name="rosbag" pkg="rosbag" type="play"args="-d 5 -r 1 --clock --hz 10 $(find amcl)/test/global_localization_stage_indexed.bag"/><node name="map_server" pkg="map_server" type="map_server" args="$(find amcl)/test/willow-full.pgm 0.1"/><node pkg="amcl" type="amcl" name="amcl" respawn="false" output="screen"><remap from="scan" to="base_scan" /><param name="transform_tolerance" value="0.2" /><param name="gui_publish_rate" value="10.0"/><param name="save_pose_rate" value="0.5"/><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_model_type" value="omni"/><param name="odom_alpha1" value="0.2"/><param name="odom_alpha2" value="0.2"/><param name="odom_alpha3" value="0.8"/><param name="odom_alpha4" value="0.2"/><param name="odom_alpha5" value="0.1"/><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_likelihood_max_dist" value="2.0"/><param name="update_min_d" value="0.2"/><param name="update_min_a" value="0.5"/><param name="odom_frame_id" value="odom"/><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><test time-limit="180" test-name="global_localization_stage" pkg="amcl"type="basic_localization.py" args="1 10.00 9.67 6.21 0.25 0.25 28.0" /><node pkg="rviz" name="rviz" type="rviz" args="-d $(find amcl)/rviz/rviz.rviz" />
</launch>

e. 重新编译和运行

cd catkin_ws
catkin_make
source devel/setup.zsh 或者 source devel/setup.bash
roslaunch amcl basic_localization_stage.launch

这时应该会正常出现rviz的画面,点击左下角的Add, 选择By topic, 依次添加Map, LaserScan , Pose, PoseArray(粒子云)。接着,便可以在rviz中看到amcl是怎么实时定位的。


同理也可以运行全局定位。amcl中的basic定位和global定位的区别其实就是一个给了初始位置的先验信息,一个没给初始位置的先验信息, 后者需要全局进行搜索。这些可以在launch文件的参数中体现出来。

ros navigation 中的amcl编译和运行相关推荐

  1. win10中cmd如何编译和运行c/c++程序?

    [1]Windows+R打开cmd [2]跳转到待编译代码的目录下,使用cd /d +目录名 的格式 举例如下 cd /d D:\user\下载\<C和指针>配套代码\ch1 [3]输入编 ...

  2. 【硬核】 ROS Navigation 局部路径规划常见算法

    简介 ​ 最近,作者参加了关于RMUS 高校 SimReal挑战赛,首次接触到了机器人导航领域,这里记录一下这段时间的收货.sim2real的全称是simulation to reality,是强化学 ...

  3. C++代码在Sublime Text 3中编译和运行

    Sublime Text 3中编译和运行 前言 以下可以避免因编码问题导致的乱码现象 前言 在数据结构代码的编写中,我选用了优秀的编辑器Sublime Text 3,但是在实现C++代码的编译和运行上 ...

  4. c在linux中怎样执行文件,如何在Linux中编译和运行C/C+程序,简单示例教懂你

    C是一种过程编程语言.它最初是由Dennis Ritchie在1969年至1973年之间开发的.它主要是作为用于编写操作系统的系统编程语言而开发的.C语言的主要功能包括对内存的低级访问,一组简单的关键 ...

  5. Linux 没有主清单属性,maven编译正常,运行报错:中没有主清单属性

    在pom.xml添加插件 org.apache.maven.plugins maven-shade-plugin 1.2.1 package shade com.xxx.spider.Main 执行命 ...

  6. cmd中加载java源文件_如何在cmd中编译和运行java源文件

    如何在cmd中编译和运行java源文件 首先写一个名为HelloWorld.java的java源文件,存储在如C:/java/src的地址,我们再假设待会要存储的位置是C:/java/bin,则我们做 ...

  7. c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题

    c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题 例如: string myFunc(){ theLogics(); } 发现调用: myFunc(); 崩溃. 但调用: cout ...

  8. Sublime Text 3中配置编译和运行Java的两个方法

    方法一: 打开Sublime Text 3,依次点击Preference, Browse Packages,在打开的窗口中双击User文件夹,新建文件JavaC.sublime-build,用记事本打 ...

  9. Windows中cl命令编译运行C++

    Windows中cl命令编译运行C++ 在dos命令窗口,利用cl命令编译运行C++: 设置步骤: 1.正确安装Visual Studio 2019 我的安装路径是: "C:\Program ...

最新文章

  1. (0017)iOS 开发之Mac上安装Eclipse、创建java后台程序访问本地数据库
  2. java 字符转化字符串_【转载】java字符串的各种编码转换
  3. 实战SSM_O2O商铺_46【Redis缓存】头条信息+商铺目录Service层加入缓存
  4. k 最近邻_k最近邻与维数的诅咒
  5. java面向对象:关键字 —(16)
  6. Spring MVC Controller与jquery ajax请求处理json
  7. Android中土司(Toast)的使用
  8. MongoDB 复制集的结构以及基本概念
  9. AndroidStudio_android通过自定义来实现倒计时的AlertDialog---Android原生开发工作笔记245
  10. Python疑难问题:「」与list()哪个快?为什么快?
  11. 红帽高级总监谈OpenJDK的未来:Java的未来从未如此光明
  12. C# WinForm调用Shell_NotifyIcon
  13. 各种常见3D建模软件比较
  14. 【Circulation love恋爱循环】MMD镜头+动作打包下载.zip
  15. 全国大学生智能汽车竞赛-室外光电组无人驾驶挑战赛-2019
  16. React native和原生之间的通信
  17. 什么是迭代式项目开发
  18. mysqli assoc php,关于php:mysqli_fetch_assoc()期望参数1为mysqli_result,给定布尔值
  19. Creo 4.0 软件安装教程
  20. 程序员的职场晋升之路

热门文章

  1. 华为数字芯片实习面试经过
  2. 编码器与光电码盘相比的缺点
  3. c 语言中cin用法,c中cin的用法
  4. 2022美亚个人赛复盘
  5. 解决ADT大量出现Unexpected value from nativeGetEnabledTags: 0的问题
  6. sw标准件不能配置_solidworks中toolbox不能配置的问题
  7. MatCloud+材料云:高通量多尺度全流程的国产材料集成设计工业软件
  8. vimplus git clone 速度慢 失败
  9. 有向无环图(DAG)拓扑排序的两种方法
  10. 国内外有名的计算机视觉团队和大牛汇总