ros2笔记-7.1 机器人导航介绍

embedded/2025/1/18 2:51:13/

7.1 机器人导航介绍

7.1.1 同步定位与地图构建

想要导航,就是要确定当前位置跟目标位置。确定位置就是定位问题。

手机的卫星导航在室内 受屏蔽,需要其他传感器获取位置信息。

利用6.5 章节的仿真,打开并运行

会发现轨迹跟障碍物都被记录下来,但是转弯过程出现较大偏差。因此SLAM是同步定位与地图构建(Simultaneous Localization And Mapping)被用来解决机器人定位和见图问题。

分为:激光slam,视觉slam 两种

7.1.2 机器人导航

分为3部分:全局路径规划、局部路径规划、恢复行为三部分。

全局路径规划:全局路径规划算法属于静态规划算法,根据已有的地图信息(SLAM)为基础进行路径规划,寻找一条从起点到目标点的最优路径。

局部路径规划:机器人根据全局 规划路径行驶的过程中发现障碍物时进行障碍物规避的局部避障策略,根据小范围环境重新创建一张局部的代价地图。然后进行路径规划,与全局路径规划相辅相成。

恢复行为:发现行走过程被挡住,没法绕过去,尝试脱困动作称为恢复行为。

7.2 使用 slam_toolbox 完成建图

安装slam_toolbox

sudo apt install ros-$ROS_DISTRO-slam-toolbox

启动tool-box

bohu@bohu-TM1701:~/chapt7/chapt7_ws$ ros2 launch slam_toolbox online_async_launch.py use_sim_time:=True
[INFO] [launch]: All log files can be found below /home/bohu/.ros/log/2025-01-14-19-58-56-245647-bohu-TM1701-33422
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [async_slam_toolbox_node-1]: process started with pid [33432]
[async_slam_toolbox_node-1] [INFO] [1736855936.666816293] [slam_toolbox]: Node using stack size 40000000
[async_slam_toolbox_node-1] [INFO] [1736855936.849725390] [slam_toolbox]: Using solver plugin solver_plugins::CeresSolver
[async_slam_toolbox_node-1] [INFO] [1736855936.850539163] [slam_toolbox]: CeresSolver: Using SCHUR_JACOBI preconditioner.
[async_slam_toolbox_node-1] [WARN] [1736855937.739584413] [slam_toolbox]: minimum laser range setting (0.0 m) exceeds the capabilities of the used Lidar (0.1 m)
[async_slam_toolbox_node-1] Info: clipped range threshold to be within minimum and maximum range!

slam-toolbox 接受输入两个:

来自雷达的/scan话题,用于获取雷达数据。

来自里程计坐标系的odom到机器人的base_footprint之间的变化。

产生的地图数据会通过/map话题发布。可以通过rviz通过话题订阅。

打开终端,通过键盘控制机器人移动。添加了map,TF ,robotModel之后。

获取的地图是乱的,问题是走直线没问题,转弯进房间就是乱的。

小鱼老师说需要重新调整里程计标定

我折腾了回去,把第6章视频有看了一遍,调整了协方差矩阵参数。终于再跑一遍好了,形成了书上完整的地图。

保存地图

新建功能包fishbot_navigation2,新建文件夹maps.在maps下指令保存命令

 ros2 run nav2_map_server map_saver_cli -f room

[WARN] [1736859960.290999663] [map_saver]: Free threshold unspecified. Setting it to default value: 0.250000
[WARN] [1736859960.291040822] [map_saver]: Occupied threshold unspecified. Setting it to default value: 0.650000
[WARN] [1736859960.530664620] [map_io]: Image format unspecified. Setting it to: pgm
[INFO] [1736859960.531061091] [map_io]: Received a 376 X 221 map @ 0.05 m/pix
[INFO] [1736859960.676217431] [map_io]: Writing map occupancy data to room.pgm
[INFO] [1736859960.677935222] [map_io]: Writing map metadata to room.yaml
[INFO] [1736859960.678163871] [map_io]: Map saved
[INFO] [1736859960.678190540] [map_saver]: Map saved successfully
[INFO] [1736859960.679332572] [map_saver]: Destroying

打开文件夹可以看到图片room.pgm

还有个图片描述文件:room.yaml

image: room.pgm
mode: trinary
resolution: 0.05
origin: [-10.4, -6.46, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25

参数意义不同:

image是描述地图文件名称

mode:地图类型,trinary是每个像素点有三种可能状态:障碍物的占据(occupied)用黑色表示,无障碍自由(free)用白色表示,未知(unknown)的用灰色表示。

resolution:表示分标率,0.05单位是米

origin:地图坐标是原点。单位是米

negate表示取反。0不取反

剩下两个参数表示阈值。占据阈值(occupied_thresh),比如0.65,则表示栅格占据率大于0.65的认为是有障碍物。空闲阈值(free_thresh),比如0.25,则表示栅格占据率小于0.25的认为没有障碍物。那在free_thresh和occupied_thresh之间的则认为是未知区域(未探索)

为啥这样呢不是0,1表示?小鱼老师解释是传感器有噪声(有误差),所以有没有障碍物不是完全确定。所以也把地图数据分割为一块块的栅格来表达地图信息,就是栅格地图


http://www.ppmy.cn/embedded/154829.html

相关文章

女性机器人有市场吗

随着AI技术和仿生技术的发展,可以预见,未来的市场上必然出现女性机器人,女性机器人未来会有市场吗?如何定义女性机器人? 1、如果你不想生娃,女性机器人完全可以代替真人。将来的机器人她能干几乎所有的家务…

【20250115】Nature子刊:柔性生物传感与深度学习结合的上肢运动增强外骨骼机器人...

【基本信息】 论文标题:Intelligent upper-limb exoskeleton integrated with soft bioelectronics and deep learning for intention-driven augmentation 发表期刊:npj Flexible Electronics 发表时间:2024年2月10日 【访问链接】 论文链接…

Python从0到100(八十三):神经网络-使用残差网络RESNET识别手写数字

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能…

mobaxterm内置编辑器中文出现乱码如何解决:直接更换编辑器为本地编辑器

诸神缄默不语-个人CSDN博文目录 使用场景是我需要用mobaxterm通过SSH的方式登录服务器,进入服务器之后我就直接打开代码文件,mobaxterm会直接用内置的编辑器(MobaTextEditor)打开,但这会导致中文编程乱码。 我一开始是…

【MySQL实战】mysql_exporter+Prometheus+Grafana

要在Prometheus和Grafana中监控MySQL数据库,如下图: 可以使用mysql_exporter。 以下是一些步骤来设置和配置这个监控环境: 1. 安装和配置Prometheus: - 下载和安装Prometheus。 - 在prometheus.yml中配置MySQL通过添加以下内…

浅谈云计算14 | 云存储技术

云存储技术 一、云计算网络存储技术基础1.1 网络存储的基本概念1.2云存储系统结构模型1.1.1 存储层1.1.2 基础管理层1.1.3 应用接口层1.1.4 访问层 1.2 网络存储技术分类 二、云计算网络存储技术特点2.1 超大规模与高可扩展性2.1.1 存储规模优势2.1.2 动态扩展机制 2.2 高可用性…

Vue2中使用正则表达式限制输入框输入

Vue2中使用正则表达式限制输入框输入 说明工具类测试使用正则表达式限制文本框输入 说明 这里记录下自己在Vue2的项目通过文本输入框的input方法使用正则表达式来限制文本框的输入。这里将自己目前项目里面所用到的正则表达式全部写到一个js里面当做一个工具类使用。这里承接自…

vue3封装el-tour漫游式引导

vue3使用el-tour漫游式引导组件封装 我们这里先看下运行效果&#xff1a; 预览效果 引入的第三方库方法我这里就不写了&#xff0c;可以自行去官网查找。 我们看一下组件封装的部分。 tourPage.vue <el-tour v-model"open" :show-close"false" change…