导航实现02_amcl定位

参考视频:【奥特学园】ROS机器人入门课程《ROS理论与实践》零基础教程_哔哩哔哩_bilibili

参考文档:http://www.autolabor.com.cn/book/ROSTutorials/

所谓定位就是推算机器人自身在全局地图中的位置,当然,SLAM中也包含定位算法实现,不过SLAM的定位是用于构建全局地图的,是属于导航开始之前的阶段,而当前定位是用于导航中,导航中,机器人需要按照设定的路线运动,通过定位可以判断机器人的实际轨迹是否符合预期。在ROS的导航功能包集navigation中提供了 amcl 功能包,用于实现导航中的机器人定位。

1.amcl简介

AMCL(adaptive Monte Carlo Localization) 是用于2D移动机器人的概率定位系统,它实现了自适应(或KLD采样)蒙特卡洛定位方法,可以根据已有地图使用粒子滤波器推算机器人位置。

amcl已经被集成到了navigation包,navigation安装前面也有介绍,命令如下:

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

2.amcl节点说明

amcl 功能包中的核心节点是:amcl。为了方便调用,需要先了解该节点订阅的话题、发布的话题、服务以及相关参数。

3.amcl使用

3.1编写amcl节点相关的launch文件

关于launch文件的实现,在amcl功能包下的example目录已经给出了示例,可以作为参考,具体实现:

roscd amcl
ls examples

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

此处参考前者,新建 launch 文件,复制 amcl_diff.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>

参数

~odom_model_type(string, default:"diff")

  • 里程计模型选择: "diff","omni","diff-corrected","omni-corrected" (diff 差速、omni 全向轮)

~odom_frame_id(string, default:"odom")

  • 里程计坐标系。

~base_frame_id(string, default:"base_link")

  • 机器人极坐标系。

~global_frame_id(string, default:"map")

  • 地图坐标系。

.... 参数较多,上述是几个较为常用的参数,其他参数介绍可参考官网。

3.2编写测试launch文件

amcl节点是不可以单独运行的,运行 amcl 节点之前,需要先加载全局地图,然后启动 rviz 显示定位结果,上述节点可以集成进launch文件,内容示例如下:

<launch><!-- 设置地图的配置文件 --><arg name="map" default="nav.yaml" /><!-- 运行地图服务器,并且加载设置的地图--><node name="map_server" pkg="map_server" type="map_server" args="$(find mycar_nav)/map/$(arg map)"/><!-- 启动AMCL节点 --><include file="$(find mycar_nav)/launch/amcl.launch" /><!-- 运行rviz --><node pkg="rviz" type="rviz" name="rviz"/>
</launch>

View Code

<!--测试文件-->
<launch><!--启动 rviz--><node pkg="joint_state_publisher" name="joint_state_publisher" type="joint_state_publisher" /><node pkg="robot_state_publisher" name="robot_state_publisher" type="robot_state_publisher" /><node pkg="rviz" type="rviz" name="rviz"  /><!--加载地图服务--><include file="$(find nav_demo)/launch/nav03_map_server.launch" /><!--amcl文件--><include file="$(find nav_demo)/launch/nav04_amcl.launch" /></launch>

当然,launch文件中地图服务节点和amcl节点中的包名、文件名需要根据自己的设置修改。

3.3执行

1.先启动 Gazebo 仿真环境;

cys@ubuntu:~/demo05_ws$ source ./devel/setup.bash
cys@ubuntu:~/demo05_ws$ roslaunch urdf02_gazebo demo03_env.launch

2.启动键盘控制节点:

rosrun teleop_twist_keyboard teleop_twist_keyboard.py

3.启动上一步中集成地图服务、amcl 与 rviz 的 launch 文件;

cys@ubuntu:~/demo05_ws$ source ./devel/setup.bash
cys@ubuntu:~/demo05_ws$ roslaunch nav_demo test_amcl.launch 

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

 

5.通过键盘控制机器人运动,会发现 posearray 也随之而改变。

机器人导航(仿真)(二)——amcl定位相关推荐

  1. 在Jetson Nano上学习ROS的记录(版本Ubuntu18.04,课程来源赵虚左老师的《ROS理论与实践》)第十二章 机器人导航(仿真)

    系列文章目录 第一章 ROS空间创建.helloworld的实现.开启多个节点 第二章 话题通信 第三章 服务通信 第四章 参数服务器 第五章 常用指令 第六章 通信机制实操 第七章 ROS通信机制进 ...

  2. ROS学习笔记08、机器人导航仿真(slam、map_server、amcl、move_base与导航消息介绍)

    文章目录 前言 一.导航概述 1.1.导航模块 1.2.导航之坐标系 二.导航实现 准备工作(安装导航包和新建工程包) 2.1.SLAM建图 2.1.1.认识gmapping 2.1.2.实操 2.2 ...

  3. Chapter7 机器人导航仿真(Ⅰ)----导航实现

    目录 一.机器人导航实现 1.1 本章简介 1.1.1 本章主要内容介绍 1.1.2 预期达成的学习目标 1.1.3 导航模块简介 1.1.4 导航之坐标系 1.1.5 导航条件要求 1.2 导航实现 ...

  4. ROS机器人导航仿真(kinetic版本)

    准备工作: ubuntu 16.04系统;ROS kinetic版本;ROS包turtlebot,导航包rbx1,模拟器arbotix,可视化rviz 1.安装ubuntu 16.04系统与安装ROS ...

  5. 机器人导航(仿真)(三)——路径规划(更新中)

    参考视频:[奥特学园]ROS机器人入门课程<ROS理论与实践>零基础教程_哔哩哔哩_bilibili 参考文档:http://www.autolabor.com.cn/book/ROSTu ...

  6. 机器人导航(仿真)(一)——SLAM建图

    导航实现01_SLAM建图 参考视频:[奥特学园]ROS机器人入门课程<ROS理论与实践>零基础教程_哔哩哔哩_bilibili 参考文档:http://www.autolabor.com ...

  7. 【ROS】—— 机器人导航(仿真)—导航实现(十八)[重要][重要][重要]

    文章目录 前言 准备条件 1. 导航实现01_SLAM建图 1.1 gmapping简介 1.2 gmapping节点说明 1.3 gmapping使用 1.3.1 编写gmapping节点相关lau ...

  8. 【ROS】—— 机器人导航(仿真)—导航原理(十七)

    文章目录 前言 1. 导航模块简介 1.1 全局地图 1.2 自身定位 1.3 路径规划 1.4 运动控制 1.5 环境感知 2. 导航之坐标系 前言

  9. 【学习笔记】ROS-移动机器人导航相关

    [学习笔记]ROS-移动机器人导航相关 一.定位 二.导航 1. move_base现存问题 三.可视化 1. Rviz显示机器人运动轨迹方法: 一.定位 二.导航 1. move_base现存问题 ...

最新文章

  1. java程序设计pdf下载_Java程序设计(迟立颖) PDF扫描版[21MB]
  2. JAVA用JNI方法调用C代码实现HelloWorld
  3. How far away ? HDU - 2586
  4. JavaScript实现squareRoot平方根算法(附完整源码)
  5. ateq测漏仪f620中文说明书_Yaman雅萌美容仪详细介绍及2019年韩国免税店最新报价...
  6. xfce4终端的字体颜色修改
  7. python getopt
  8. jquery.form.js插件中ajaxSubmit提交在jquery1.4版本中的应用
  9. 单例设计模式之安全的懒汉式
  10. 获取当前图层所处的坐标系统(C++)(ArcObject开发)
  11. 统一返回对象和异常处理(一)
  12. mysql中order by的原理
  13. 【论文笔记】DeepIGeoS:A Deep Interactive Geodesic Framework for Medical Image Segmentation
  14. 数字图像处理_05_(图像锐化与边缘检测——Premittt算子、Roberts算子、Sobel算子、Scharr算子、Laplacian算子、LoG算子、Canny算子)
  15. Mybatis的特性详解——四大操作标签
  16. mysql 28000 远程_启用远程MySQL连接:错误1045(28000):拒绝用户访问
  17. 计算机科学论文生成器,高考满分作文生成器来了!分分钟批量完成「生活在XX上」...
  18. Python基于PHP+MySQL的个人网页设计与实现
  19. 自建服务器打印机,打印机服务器搭建 -cups
  20. MySQL春节收支表怎么建立_怎样建立收支账目表

热门文章

  1. Nginx的超时keeplive_timeout配置详解
  2. VOIP信号传输过程
  3. 训练集、验证集、测试集的作用和意义
  4. 网络编程和网络应用开发
  5. Ubuntu20.04 安装谷歌拼音(googlepinyin)输入法
  6. 百家讲坛 雍正十三年(下部)
  7. 单密钥差分攻击和相关密钥差分攻击
  8. ros --- 录制imu bag包 和 imu标定
  9. 什么是基本表?什么是视图?两者的联系和区别是什么?视图有哪些优点?
  10. 搭建Janus的HTTPS环境