# Navigation 工具包說明
source: https://github.com/ros-planning/navigation
## amcl工具包
輸入參數: 地圖(包括了初始位置),掃描數據(scan),tf
輸出參數: 位置估計
注冊topic:
scan(sensor_msgs/LaserScan) #激光數據
tf(tf/tfMessage) #坐標轉換
initialpose(geometry_msgs/PoseWithCovarianceStamped) #初始位置和均值和方差
map(nav/msgs/OccupancyGrid) #當use_map_topic設置為True時,amcl使用map這個topic接收地圖
發布topic:
amcl_pose(geometry_msgs/PoseWithCovarianceStamped) #機器人在地圖中的位姿估計,包括估計方差
particlecloud(geometry_msgs/PoseArray) #濾波器估計的位置
tf(tf/tfMessage) #發布從odom到map的轉換關系
Services:
global_localization(std_srvs/Empty) #初始化全局定位,所有粒子完全隨機分布在地圖上
request_nomotion_update(std_srvs/Empty) #手動更新粒子并發布更新后的粒子
調用的Services:
static_map(nav_msgs/GetMap) #amcl調用此服務接收地圖,用以基于激光掃描的定位
相關參數:
amcl中可設置的相關參數,分為濾波器filter相關,掃描模型laser相關,里程計odometry模型相關
~min_particles(int, default:100) #最小粒子數
~max_particles(int, default:5000) #最大粒子數
~kld_err(double, default:0.01) #估計出的分布模型與真實分布模型的最大允許誤差
~kld_z(double, default:0.99) #
~update_min_d(double, default:0.2 m) #兩次濾波器更新之間平移的距離
~update_min_a(double, default:pi/6.0 rad) #兩次濾波器更新之間旋轉的弧度
~resample_interval(int, default:2) #兩次采樣之間濾波器更新的次數
~transform_tolerance(double, default:0.1 s) #
~recovery_alpha_slow(double, default:0.0) #slow average weight濾波器指數衰減速率,用于決定何時通過添加隨機位姿進行恢復,可設置為0.001
~recovery_alpha_fast(double, default:0.0) #slow average weight濾波器衰減速率,可設置為0.1
~initial_pose_x(double, default:0.0 m) #初始位姿mean(x),用以初始化高斯濾波器
~initial_pose_y(double, default:0.0 m) #初始位姿mean(y),初始化高斯濾波器
~initial_pose_a(double, default:0.0 rad) #初始位姿mean(yaw),初始化高斯濾波器
~initial_cov_xx(double, default:0.5*0.5) #初始位姿協方差covariance(x*x),初始化高斯濾波器
~initial_cov_yy(double, default:0.5*0.5) #初始位姿協方差covariance(y*y),初始化高斯濾波器
~initial_cov_aa(double, default:(pi/12)*(pi/12)) #初始位姿協方差covariance(yaw*yaw),初始化高斯濾波器
~gui_publish_rate(double, default:-1.0 Hz) #掃描數據和路徑可視化的最大速率,-1.0表示禁止
~save_pose_rate(double, default:0.5 Hz) #保存位姿(位姿+方差)的速率,保存的位姿用于不斷初始化濾波器
~use_map_topic(bool, default:false) #設置為True時,amcl注冊到map這個topic上,接收地圖
~first_map_only(bool, default:false) #設置為True時,amcl使用固定的初始地圖,即地圖不會更新
**激光模型相關參數:**
~laser_min_range(double, default:-1.0) #最小掃描距離
~laser_max_range(double, default:-1.0) #最大掃描距離
~laser_max_beams(int, default:30) #均分掃描激光束數目
~laser_z_hit(double, default:0.95) #z_hit部分的混合權重
~laser_z_short(double, default:0.1) #z_short部分的混合權重
~laser_z_max(double, default:0.05) #z_max部分的混合權重
~laser_z_rand(double, default:0.05) #z_rand部分的混合權重
~laser_sigma_hit(double, default:0.2m) #z_hit部分的標準差
~laser_lambda_short(double, default:0.1) #z_short部分的指數衰減系數
~laser_likelihood_max_dist(double, default:2.0m) #對障礙物進行膨脹操作的最大距離,當模型為likelihood_field時使用
~laser_model_type(string, default:"likelihood_field") #選擇模型,"beam","likelihood_field","likelihood_field_prob"
**Odometry模型相關**
當odom_model_type為“diff”時,采用sample_model_odometry算法,見Probabilistic Robotics一書第136頁,
此模型使用odom_alpha1~odom_alpha4參數,各參數定義見書中。當odom_model_type設置為"omni"時,使用odom_alpha1~odom_alpha5
五個參數。
~odom_model_type(string, default:"diff") #設置odom模型,可選"diff","omni","diff-corrected","omni-corrected"
~odom_alpha1(double, default:0.2) #從運動旋轉分量估計出的旋轉量的估計噪聲
~odom_alpha2(double, default:0.2) #從運動平移分量估計出的旋轉量的估計噪聲
~odom_alpha3(double, default:0.2) #從運動平移分量估計出的平移量的估計噪聲
~odom_alpha4(double, default:0.2) #從運動旋轉分量估計出的平移量的估計噪聲
~odom_alpha5(double, default:0.2) #平移相關噪聲參數
~odom_frame_id(string, default:"odom") #里程計使用的坐標系
~base_frame_id(string, default:"base_link") #機器人底座坐標系
~global_frame_id(string, default:"map") #定位系統所發布的坐標系
~tf_broadcast(bool, default:true) #設置為false時,禁止amcl發布從global frame到odometry坐標系的轉換
- 前言
- 第一章 ROS簡介
- 機器人時代的到來
- ROS發展歷程
- 什么是ROS
- 安裝ROS
- 安裝ROS-Academy-for-Beginners教學包
- 二進制與源碼包
- 安裝RoboWare Studio
- 單元測試一
- 第二章 ROS文件系統
- Catkin編譯系統
- Catkin工作空間
- Package軟件包
- CMakeLists.txt
- package.xml
- Metapacakge軟件元包
- 其他常見文件類型
- 單元測試二
- 第三章 ROS通信架構(一)
- Node & Master
- Launch文件
- Topic
- Msg
- 常見msg類型
- 單元測試三
- 第四章 ROS通信架構(二)
- Service
- Srv
- Parameter server
- Action
- 常見srv類型
- 常見action類型
- 單元測試四
- 第五章 常用工具
- Gazebo
- RViz
- Rqt
- Rosbag
- Rosbridge
- moveit!
- 單元測試五
- 第六章 roscpp
- Client Library與roscpp
- 節點初始、關閉與NodeHandle
- Topic in roscpp
- Service in roscpp
- Param in roscpp
- 時鐘
- 日志與異常
- 第七章 rospy
- Rospy與主要接口
- Topic in rospy
- Service in rospy
- Param與Time
- 第八章 TF與URDF
- 認識TF
- TF消息
- tf in c++
- tf in python
- 統一機器人描述格式
- 附錄:TF數學基礎
- 三維空間剛體運動---旋轉矩陣
- 三維空間剛體運動---歐拉角
- 三維空間剛體運動---四元數
- 第九章 SLAM
- 地圖
- Gmapping
- Karto
- Hector
- 第十章 Navigation
- Navigation Stack
- move_base
- costmap
- Map_server & Amcl
- 附錄:Navigation工具包說明
- amcl
- local_base_planner
- carrot_planner
- clear_costmap_recovery
- costmap_2d
- dwa_local_planner
- fake_localization
- global_planner
- map_server
- move_base_msg
- move_base
- move_slow_and_clear
- navfn
- nav_core
- robot_pose_ekf
- rotate_recovery