nav2
1 概述
2 安装
2.1 安装 slam_toolbox
1 | sudo apt install ros-jazzy-slam-toolbox -y |
2.2 安装 nav2
1 | sudo apt install ros-jazzy-nav2-map-server |
3 使用
3.1 建图
Terminal 1 使用.
1 | # 设置的启动脚本. |
Terminal 2 使用.
1 | ros2 launch slam_toolbox online_async_launch.py |
Terminal 3 使用.
1 | rviz2 |
之后在地图中移动机器人进行建图.
Terminal 4 使用.
然后创建新的功能包, 这里命名为 robot_nav2 保存地图, 在其目录下创建 maps 目录, 进入目录.
1 | # 订阅 /map 话题并保存为文件. |
之后生成了
.pgm: 图像文件.
.yaml: 描述文件.
其中 .pgm.
其中 .yaml.
room.yaml 字段说明
1 | image: room.pgm |
字段 | 示例值 | 含义 | 备注/常见取值 |
---|---|---|---|
image |
room.pgm |
地图灰度图文件名 | 黑=占用,白=空闲,灰=未知 |
mode |
trinary |
地图读写模式 | 常见:trinary / scale / raw |
resolution |
0.05 |
分辨率(米/像素) | 每像素 0.05 m(5 cm/px) |
origin |
[-5.97, -4.95, 0] |
像素 (0,0) 的世界位姿 (x,y,yaw) | (0,0) 在图像左下角;yaw 单位:弧度 |
negate |
0 |
是否反转黑白 | 0 :黑占用/白空闲;1 :相反 |
occupied_thresh |
0.65 |
判定为“占用”的阈值 | 主要影响非三值图(mode≠trinary ) |
free_thresh |
0.25 |
判定为“空闲”的阈值 | 同上 |
附:常用公式(可选)
场景 | 公式/说明 |
---|---|
灰度→占用概率(negate=0 ) |
p_occ = (255 - 灰度) / 255 |
占用/空闲判定 | p_occ ≥ 0.65 占用;p_occ ≤ 0.25 空闲;介于两者为未知 |
地图覆盖范围(PGM 尺寸 W×H 像素) |
x ∈ [origin.x, origin.x + W*resolution] ;y ∈ [origin.y, origin.y + H*resolution] |
3.2 模拟导航
在功能包 robot_nav2 下创建 config 目录, 进入目录.
1 | cp /opt/ros/jazzy/share/nav2_bringup/params/nav2_params.yaml . |
然后根据需要修改参数, 这里我们目前主要关注 robot_radius
, inflation_radius
, xy_goal_tolerance
, yaw_goal_tolerance
.
之后在 launch 目录下, 写入 launch 脚本.
1 | # nav2.launcch.py |
先启动机器人, 再启动该脚本.
单点导航.
多点导航.
3.3 导航应用开发
在 nav2 中, 机器人的位置信息是由 amcl 节点计算的.
我们可以查看节点的相关信息.
1 | ros2 node info /amcl |
通过对 /initialpose
话题进行发布则可以设置机器人的初始位置.
通过对 navigate_to_pose
动作服务进行处理就可以控制机器人的单点导航.
通过对 follow_waypoints
动作服务进行处理就可以控制机器人的路点导航.
4 References
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.