ros navigation 中的amcl编译和运行
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编译和运行相关推荐
- win10中cmd如何编译和运行c/c++程序?
[1]Windows+R打开cmd [2]跳转到待编译代码的目录下,使用cd /d +目录名 的格式 举例如下 cd /d D:\user\下载\<C和指针>配套代码\ch1 [3]输入编 ...
- 【硬核】 ROS Navigation 局部路径规划常见算法
简介 最近,作者参加了关于RMUS 高校 SimReal挑战赛,首次接触到了机器人导航领域,这里记录一下这段时间的收货.sim2real的全称是simulation to reality,是强化学 ...
- C++代码在Sublime Text 3中编译和运行
Sublime Text 3中编译和运行 前言 以下可以避免因编码问题导致的乱码现象 前言 在数据结构代码的编写中,我选用了优秀的编辑器Sublime Text 3,但是在实现C++代码的编译和运行上 ...
- c在linux中怎样执行文件,如何在Linux中编译和运行C/C+程序,简单示例教懂你
C是一种过程编程语言.它最初是由Dennis Ritchie在1969年至1973年之间开发的.它主要是作为用于编写操作系统的系统编程语言而开发的.C语言的主要功能包括对内存的低级访问,一组简单的关键 ...
- Linux 没有主清单属性,maven编译正常,运行报错:中没有主清单属性
在pom.xml添加插件 org.apache.maven.plugins maven-shade-plugin 1.2.1 package shade com.xxx.spider.Main 执行命 ...
- cmd中加载java源文件_如何在cmd中编译和运行java源文件
如何在cmd中编译和运行java源文件 首先写一个名为HelloWorld.java的java源文件,存储在如C:/java/src的地址,我们再假设待会要存储的位置是C:/java/bin,则我们做 ...
- c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题
c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题 例如: string myFunc(){ theLogics(); } 发现调用: myFunc(); 崩溃. 但调用: cout ...
- Sublime Text 3中配置编译和运行Java的两个方法
方法一: 打开Sublime Text 3,依次点击Preference, Browse Packages,在打开的窗口中双击User文件夹,新建文件JavaC.sublime-build,用记事本打 ...
- Windows中cl命令编译运行C++
Windows中cl命令编译运行C++ 在dos命令窗口,利用cl命令编译运行C++: 设置步骤: 1.正确安装Visual Studio 2019 我的安装路径是: "C:\Program ...
最新文章
- (0017)iOS 开发之Mac上安装Eclipse、创建java后台程序访问本地数据库
- java 字符转化字符串_【转载】java字符串的各种编码转换
- 实战SSM_O2O商铺_46【Redis缓存】头条信息+商铺目录Service层加入缓存
- k 最近邻_k最近邻与维数的诅咒
- java面向对象:关键字 —(16)
- Spring MVC Controller与jquery ajax请求处理json
- Android中土司(Toast)的使用
- MongoDB 复制集的结构以及基本概念
- AndroidStudio_android通过自定义来实现倒计时的AlertDialog---Android原生开发工作笔记245
- Python疑难问题:「」与list()哪个快?为什么快?
- 红帽高级总监谈OpenJDK的未来:Java的未来从未如此光明
- C# WinForm调用Shell_NotifyIcon
- 各种常见3D建模软件比较
- 【Circulation love恋爱循环】MMD镜头+动作打包下载.zip
- 全国大学生智能汽车竞赛-室外光电组无人驾驶挑战赛-2019
- React native和原生之间的通信
- 什么是迭代式项目开发
- mysqli assoc php,关于php:mysqli_fetch_assoc()期望参数1为mysqli_result,给定布尔值
- Creo 4.0 软件安装教程
- 程序员的职场晋升之路