navigation2导航包(ROS2)说明-Smac Planner

SmacPlanner是一个包含三种插件的Nav2Planner插件,用于不同类型的机器人路径规划,如Hybrid-A*支持腿足和车辆模型,StateLattice适用于非圆形机器人,2DA*适合差速和全向机器人。该规划器优化了搜索算法,实现了多分辨率和代价感知惩罚,以提高路径质量和速度。此外,它还提供了平滑器和碰撞检查功能,适用于高速和曲率受限的规划场景。

Smac Planner

SmacPlanner 是 Nav2 Planner 的插件。它目前包括 3 个不同的插件:
1.SmacPlannerHybrid:
高度优化完全可重新配置的 Hybrid-A* 实现,支持 Dubin 和 Reeds-Shepp 模型(腿足模型、ackermann 模型和汽车模型)。
2.SmacPlannerLattice:
高度优化完全可重新配置的状态格实现,支持可配置的最小控制集,并为阿克曼模型、腿足模型、差速模型和全向模型提供了控制集。
3.SmacPlanner2D:高度优化完全可重构的基于网格的 A* 实现,支持 8 个连接的邻域模型。

它还介绍了以下基本构建块
CostmapDownsampler:一个库,用于接收代价图对象并将其下采样到另一个分辨率。
AStar:规划插件使用搜索通用且高度优化的 A* 模板库。使用它还可以提供用于规划的其他模板。CollisionChecker:基于机器人半径或足迹的碰撞检查。
Smoother:一个简单的路径平滑器,用于平滑 2D、Hybrid-A* 和 State Lattice 路径。

有关其他参数说明,请参阅其配置指南页面。

介绍说明:
nav2_smac_planner 包含一个优化的模板化 A* 搜索算法,用于为多种类型的机器人平台创建多个基于 A* 的规划器。它是由 Steve Macenski 在三星研究院时建造的。使用实现代价感知 A* 规划器的 SmacPlanner2D 规划器支持圆形差速驱动和全向驱动机器人。使用实现 Hybrid-A* 规划器的 SmacPlannerHybrid 插件支持腿足机器人、汽车、类车和阿克曼车辆。支持实现状态栅格规划器的 SmacPlannerLattice 插件可用于非圆形、任意形状的任何模型车辆。它包含用于阿克曼、腿式、差速驱动和全向车辆,但您可以为另一种机器人类型提供自己的,或具有不同的规划行为。最后两个插件对于曲率约束或运动学上可行的规划也很有用,例如在高速规划机器人以确保它们不会翻转或以其他方式打滑时失控。它也适用于需要基于姿势的碰撞检查的非圆形机器人(例如差速/全向传动系统的大矩形或任意形状的机器人)。

SmacPlannerHybrid 实现了 Hybrid-A* 规划器,如 Practical Search Techniques in Path Planning for Autonomous Driving 中提出的那样,修改了启发式遍历函数以提高路径质量,而无需昂贵的基于优化的平滑处理。

SmacPlannerLattice 实现了 State Lattice 规划器。虽然我们没有与State Lattices中的最优、平滑、非完整移动机器人运动规划(Optimal, Smooth, Nonholonomic MobileRobot Motion Planning in State Lattices)完全相同的方式实现它(使用为离散状态空间中的约束运动规划生成近最小跨度控制集找到控制集),但是它非常相似,可以作为一个很好的参考。使用了对接近分析扩展和改进的启发式函数的额外优化,在很大程度上与 Hybrid-A* 相匹配,以允许它们共享这些优化的实现,以更快地推动搜索朝着目标前进。

总结:
SmacPlannerHybrid 设计用于:
1.阿克曼、汽车和类车机器人
2.高速或曲率受限的机器人(以免高速翻转、打滑或倾卸负载)
3.任意形状、非圆形差速或全向机器人需要运动学上可行的规划和 SE2 碰撞检查
4.腿式机器人

SmacPlannerLattice 设计用于: 
1.任意形状的非圆形机器人需要运动学上可行的规划,并使用传动系统的全部功能进行 SE2 碰撞检查 
2.灵活使用其他机器人模型类型或提供非圆形差速器、ackermann 和 omni支持

SmacPlanner2D 设计用于:
1.圆形、差速或全向机器人
2.相对于环境大小的相对较小的机器人(例如走廊中的遥控车或会议中心中的大型机器人),可以用圆形足迹来近似。

特性:
我们通过以下方式进一步改进了 Hybrid-A*:
通过使用小 10 倍的motion primitive元进行搜索(与其上采样率相同),消除了对上采样的需求。
多分辨率搜索允许在更宽的空间中以更粗略的分辨率进行规划(更快的 O(N^2))。
搜索中的代价感知惩罚函数导致更平滑的计划(进一步降低平滑的要求)。
梯度下降,基本的但快速更平滑
通过高度优化模板A*算法,比原论文更快的规划。
通过自定义预计算启发值、motion primitive和其他功能加快规划。
通过运动模型、代价地图分辨率自动调整搜索运动模型大小。
如果找不到精确路径或在无效空间中,则选择在误差范围内接近的最近路径。
多模型混合搜索,包括 Dubin 和 Reeds-Shepp 模型。可以轻松添加更多模型。
高单元和集成测试覆盖率,doxygen 文档。
使用现代 C++14 语言功能,各个组件很容易重用。
速度优化:主循环中没有数据结构图查找、接近零复制的主循环、动态生成的图和基于动态规划的障碍启发式算法、可选的启发式算法重新计算以用于同一目标的后续规划请求等。
模板化节点和 A* 实现以支持额外的机器人扩展。
选择性地重新评估每个目标/地图或每次迭代的障碍启发式算法,这可以将后续重新规划速度提高 20 倍或更多。

SmacP
<think>嗯,用户想要了解ROS1中的差速运动学模型。根据提供的参考资料,虽然主要涉及ROS2和通用差速运动学原理,但核心模型在ROS1和ROS2中是相通的。用户可能正在学习ROS1的机器人控制,需要基础理论支持。 从引用[3]看,差速底盘的核心是轮速与线速度、角速度的换算关系:$v_r = v + \frac{L \cdot \omega}{2}$ 和 $v_l = v - \frac{L \cdot \omega}{2}$。这应该是回答的重点,同时要补充ROS1的具体实现方式。 用户之前的提问和当前需求一致,说明ta可能刚接触机器人运动学。需要强调两个关键点:1) 运动学模型本身的数学表达 2) ROS1中如何应用这个模型。特别是odometry的计算和twist消息的转换,这是ROS1实践中最常用的部分。 考虑到用户引用中提到PID控制和路径跟踪,可能在后续问题中会涉及控制算法,可以预先准备相关延伸方向。不过当前回答要聚焦运动学基础,避免过度展开控制部分。 注意到用户特别要求“ROS1”的信息,需明确区分ROS1和ROS2的实现差异,比如ROS1的里程计发布话题是/odom而非ROS2的/odometry,TF树结构也略有不同。但核心数学原理是通用的。 </think>以下是ROS1中差速运动学模型的详细解析,结合核心原理与ROS实现: ### 一、差速运动学基础模型 1. **核心方程**(引用自[^3]) 差速机器人通过左右轮速差实现转向,关键方程为: $$ \begin{cases} v_l = v - \frac{L \cdot \omega}{2} \\ v_r = v + \frac{L \cdot \omega}{2} \end{cases} $$ 其中: - $v_l$, $v_r$:左右轮线速度(m/s) - $v$:机器人中心线速度 - $\omega$:机器人角速度(rad/s) - $L$:轮间距(m) 2. **逆运动学计算**(ROS控制核心) 根据期望的$v$和$\omega$计算轮速,Python实现如下: ```python def inverse_kinematics(v, omega, wheelbase): vr = v + wheelbase * omega / 2 # 右轮速度 vl = v - wheelbase * omega / 2 # 左轮速度 return vr, vl ``` ### 二、ROS1中的实现机制 1. **消息传递** - 输入:通过`geometry_msgs/Twist`消息接收控制指令 ```cpp twist.linear.x = v; // 线速度 twist.angular.z = ω; // 角速度 ``` - 输出:将轮速发送给电机控制器(单位通常为rad/s或m/s) 2. **里程计计算**(正运动学) 通过轮编码器数据计算位姿: $$ \begin{aligned} \Delta \theta &= \frac{(v_r - v_l) \Delta t}{L} \\ \Delta x &= \frac{v_r + v_l}{2} \cos(\theta) \Delta t \\ \Delta y &= \frac{v_r + v_l}{2} \sin(\theta) \Delta t \end{aligned} $$ ROS1通过`nav_msgs/Odometry`消息发布该数据。 3. **TF坐标变换** 实时更新`odom`(世界坐标系)到`base_link`(机器人坐标系)的变换,提供位姿信息。 ### 三、关键ROS1软件 1. **`diff_drive_controller`** - 功能:实现差速模型与硬件接口的对接 - 配置文件示例: ```yaml controller: type: "diff_drive_controller/DiffDriveController" left_wheel: ['left_wheel_joint'] right_wheel: ['right_wheel_joint'] wheel_separation: 0.5 # 轮间距L ``` 2. **`robot_pose_ekf`** 融合轮式里程计与IMU数据,提升定位精度[^1]。 ### 四、应用场景 1. **路径跟踪控制** 基于运动学模型设计PID控制器,实现轨迹跟踪(引用[^2]中方法的ROS1等效实现)。 2. **SLAM建图** 轮式里程计为激光SLAM(如Gmapping)提供运动先验。 3. **自主导航** 与`move_base`集成,完成路径规划与动态避障。 ```mermaid graph LR A[Twist消息] --> B[逆运动学] B --> C[左右轮速指令] C --> D[电机驱动] D --> E[编码器数据] E --> F[正运动学] F --> G[Odometry消息] G --> H[TF广播] ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值