news 2026/9/30 2:23:23

挑战一周学会 ROS(第八天)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
挑战一周学会 ROS(第八天)

今天开始学习机器人导航模块

关键技术:

1.全局地图(全局概览图:定位+路径规划)

2.自身定位(确定在地图中的位置)

3.路径规划(全局路径规划+局部路径规划)

4.运动控制(控制前进速度方向)

5.环境感知(感知周围环境)

SLAM:即时定位与地图构建,机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和地图进行自身定位,同时在自身定位的基础上建造增量式地图,以绘制出外部环境的完全地图,SLAM只是实现地图构建和及时定位

里程计定位:

优点:里程计定位信息是连续的,没有离散的跳跃

缺点:里程计存在累计误差,不利于长距离或长期定位

会产生误差:路面不平、测速不准、车轮打滑、长距离、长时间运行会导致误差累积

传感器定位:

优点:比里程计定位更精确

缺点:传感器定位会出现跳变的情况,且传感器定位在标志物较少的环境下,精度会大打折扣

gmapping是ROS开源社区中较为常见且比较成熟的SLAM算法之一,gmapping可以根据移动机器人里程计数据和激光雷达数据来绘制二维的栅格地图

#声明地图图片资源的路径 image: /home/fan20/demo05_ws/src/nav_demo/map/nav.pgm #地图刻度尺单位是 米每像素 resolution: 0.050000 #地图的位姿信息(按照右手坐标系地图右下角相对于rviz中的原点信息) #值1:x方向上的偏移量 #值2:y方向上的偏移量 #值3:地图的偏航角度(弧度) origin: [-50.000000, -50.000000, 0.000000] #是否取反 negate: 0 #地图中的障碍物判断 #判断规则:白色是可通行区 黑色是障碍物 蓝灰色是未知区域 #地图中的每个象素都有取值[0,255] 白色:255 黑色:0 像素值设为x #根据像素值计算比例 p=(255-x)/255 白色0 黑色1 #判断是否是障碍物 p>占用阈值 就是障碍物 小于就视为无物,可以自由通行 #占用阈值 occupied_thresh: 0.65 #空闲阈值 free_thresh: 0.196

amcl适用于2D移动机器人的概率定位系统,实现了自适应蒙特卡洛定位的方法,根据已有的地图使用粒子滤波器推算机器人位置

对比项base_linkbase_footprint
实体属性真实机身刚体(URDF 存在该 link)纯虚拟坐标系,无物理部件
Z 轴高度离地有高度(正数,底盘离地间隙)Z=0,完全贴合地面
旋转 / 姿态车身真实倾斜(上坡、颠簸会俯仰滚转)永远平行地面,抵消车身离地高度
TF 关系父系通常为 map/odom;子系是雷达、相机、轮子父系 base_link,只有垂直平移 TF(无旋转)
使用场景传感器数据、机器人三维模型、机械臂、里程计计算导航路径规划、代价地图、运动控制、避障

amcl定位

joint_state_publisher + robot_state_publisher 作用详解

1. 两个节点分工

joint_state_publisher

  • 功能:发布/joint_states话题
  • 内容:机器人所有关节(轮子、机械臂活动关节)的角度数据
  • 场景:
    1. 无硬件真实关节时,提供默认 0 角度关节数据
    2. 可视化 URDF 模型必须依赖这个话题,否则 RViz 机器人模型不显示、模型散架
  • 如果你是差分轮小车:左右驱动轮、万向轮都会生成关节数据

robot_state_publisher

  • 核心功能:接收/joint_states+ URDF 机器人模型,实时计算、发布全部 TF 坐标变换
  • 输出 TF:
    • base_link ↔ wheel_left / wheel_right
    • base_link ↔ laser / camera / imu
    • base_link ↔ base_footprint(如果 URDF 配置了)
  • 导航 / AMCL 刚需:AMCL、map_server、move_base 全程依赖 TF 树获取机器人底盘、雷达坐标关系,没有 TF 直接报错、定位失效

2. 为什么跑 AMCL 导航必须同时启动二者?

① RViz 可视化前提

不启动:RViz 添加 RobotModel 插件后一片空白,看不到小车模型,无法直观观察定位、雷达点云匹配地图。

② AMCL 定位依赖雷达 TF 变换

AMCL 需要知道:激光雷达相对于底盘 base_link 的坐标(TF),才能把激光点云匹配到地图上做粒子滤波定位。 robot_state_publisher 负责解析 URDF 生成雷达→底盘 TF,缺失则:

  • RViz 激光点云飘飞
  • AMCL 无法计算激光与地图匹配,定位直接失效

③ 完整 TF 树是导航基础

后续建图、代价地图、路径规划全部依靠 TF 坐标系。缺少这两个节点,TF 树断裂,所有导航功能瘫痪。

补充区分

  • joint_state_publisher:只发关节角度(原始数据)
  • robot_state_publisher:根据关节角度 + URDF 模型算出全部坐标变换 TF(导航核心)

代价地图是导航包(move_base/nav2)基于栅格地图生成的带危险权值的二维栅格图层。 原始静态地图只有「占用 / 空闲」两种状态;代价地图给每一个格子分配代价值,代表靠近该格子的危险程度,规划器根据代价选择安全路线。

代价地图的组成(多层叠加):

1、静态层 ---SLAM绘制的静态地图

2、障碍物层---导航中传感器感知的障碍物

3、膨胀层--为了避免膨胀而设计的安全区

4、自定义层--根据业务自设计的地图数据

自主导航

全局路径(绿色)/本地路径(红色)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 2:23:00

【Docker】网络

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 🔥 系列专栏:Docker_秦jh_的博客-CSDN博客 ​​​​​ 目录 Docker Network(网络) Docker 为什么需要网络管理 Docker 网络架构简介 CNM Libnetwor…

作者头像 李华
网站建设 2026/9/30 2:22:23

如何用命令行管理百度网盘:BaiduPCS-Go 实战教程

如何用命令行管理百度网盘:BaiduPCS-Go 实战教程 【免费下载链接】BaiduPCS-Go iikira/BaiduPCS-Go原版基础上集成了分享链接/秒传链接转存功能 项目地址: https://gitcode.com/GitHub_Trending/ba/BaiduPCS-Go 一个常见场景:每天凌晨&#xff0c…

作者头像 李华
网站建设 2026/9/30 2:22:07

小程序逆向加解密实录-元一软件

小程序逆向加解密实录 反编译 想要逆向wx小程序首先要找到小程序的路径 Android:/data/data/com.tencent.mm/MicroMsg/xxxxxxxxxxxxxxxxxxxxxxxxx(wxid)/appbrand/pkg/xxx.wxapkg(小程序版本号.wxapkg) iOS:/User/Containers/Data/Application/xxxx-xxx-…

作者头像 李华
网站建设 2026/9/30 2:20:05

A Sparsity Predicting Approach for Large Language Models via Activation Pattern Clustering

文章主要内容和创新点 主要内容 本文聚焦大型语言模型(LLMs)的激活稀疏性(即输入仅激活部分神经元),旨在通过高效预测激活模式降低计算成本。由于直接预测单个神经元的激活状态计算开销极大(因神经元数量庞大),作者提出一种基于聚类的激活模式压缩框架:将相似的激活…

作者头像 李华