导航
相关源码文件
以下文件被用作生成此 wiki 页面的上下文:
目的与范围
导航栈在 RoboFrame 内集成定位、路径规划、局部控制、语音触发与底盘桥接。主要通过 robot_navigation ROS 包管理,并由 robot_config launch 构建器编排,系统支持双传感器 profile:使用 RealSense 与 RTAB-Map 的视觉惯性配置,以及使用 Livox MID-360、FAST-LIO 与 SLAM Toolbox 或 AMCL 的激光雷达配置 src/robot_navigation/README.md:5-15。
来源:src/robot_navigation/README.md:1-18
系统架构与数据流
导航流水线将用户语音命令或远程目标桥接到 Nav2 动作服务器,通过 MPPI 或 DWB 控制器解析轨迹,并通过 cmd_vel_bridge_node 将本体坐标系 twist 命令(/cmd_vel)转换为轮空间角速度(rad/s)src/robot_navigation/README.md:19-60。
graph TD
subgraph NaturalLanguageSpace ["Natural Language & Intent"]
UserVoice["UserVoiceInput"]
end
subgraph ROSNodeSpace ["ROS 2 Node Entities"]
VoiceASR["robot_navigation.voice_asr_node"]
VoiceCtrl["robot_navigation.voice_control"]
NavClient["robot_navigation.nav2_goal_client"]
Nav2Server["nav2_bt_navigator"]
CmdBridge["robot_navigation.cmd_vel_bridge_node"]
Controller["ros2_control hardware_interface"]
end
UserVoice -->|"Audio Stream"| VoiceASR
VoiceASR -->|"/voice_command"| VoiceCtrl
VoiceCtrl -->|"/voice_asr/keyword_matched"| NavClient
NavClient -->|"NavigateToPose Action"| Nav2Server
Nav2Server -->|"/cmd_vel"| CmdBridge
CmdBridge -->|"/base_velocity_controller/commands"| Controller
style NaturalLanguageSpace fill:none,stroke:#000,stroke-width:2px
style ROSNodeSpace fill:none,stroke:#000,stroke-width:2px
图 5.5.1:导航执行的自然语言到代码实体数据流映射。
来源:src/robot_navigation/README.md:29-60, src/robot_navigation/setup.py:37-56
导航 Launch 构建器
配置框架区分仿真 bringup 与真机部署。robot_config/robot_config/launch_builders/navigation.py 模块评估当前配置 schema,决定加载轻量 EKF 仿真节点还是完整真机导航栈 src/robot_config/robot_config/launch_builders/navigation.py:1-54。
graph TD
GenNav["robot_config.launch_builders.navigation.generate_navigation_nodes"] --> CheckConfig{"'modes' in config?"}
CheckConfig -->|Yes| SimNav["_generate_sim_navigation"]
CheckConfig -->|No| RealNav["_generate_real_navigation"]
RealNav --> GenFastLIO["generate_fast_lio_nodes"]
RealNav --> GenStaticTF["generate_static_tf_nodes"]
RealNav --> GenLoc["generate_localization_nodes"]
RealNav --> GenNav2["generate_nav2_nodes"]
RealNav --> GenCmdVel["generate_cmd_vel_nodes"]
RealNav --> GenVoice["generate_voice_nav_nodes"]
style GenNav fill:none,stroke:#000,stroke-width:2px
style RealNav fill:none,stroke:#000,stroke-width:2px
图 5.5.2:导航 launch 构建器的代码实体架构。
启用真机导航时,_generate_real_navigation 对运动速度契约执行断言,并调用针对 FAST-LIO、静态变换、RTAB-Map/AMCL 定位、Nav2 服务器、命令桥接与语音集成的子构建器 src/robot_config/robot_config/launch_builders/navigation.py:103-157。
来源:src/robot_config/robot_config/launch_builders/navigation.py:1-173
控制器与运动包络
导航栈同时支持模型预测路径积分控制器(MPPIController)与动态窗口方法(DWBLocalPlanner)控制器 src/robot_navigation/config/nav2_params.yaml:116-188, src/robot_navigation/config/nav2_params_dwb.yaml:116-157。
运动边界与控制器参数镜像当前 LeKiwi profile 的运动包络(robot.navigation.motion_envelope)src/robot_navigation/README.md:108-111。单元测试验证控制器约束符合硬件限制与轮空间速度可行性 src/robot_navigation/test/test_nav2_controller_config.py:111-163。
# Wheel-space feasibility check pattern in test suite
def _assert_wheel_feasible(envelope, bridge):
velocity = envelope["velocity"]
for vx, vy, wz in itertools.product(
(velocity["vx"]["min"], velocity["vx"]["max"]),
(velocity["vy"]["min"], velocity["vy"]["max"]),
(velocity["wz"]["min"], velocity["wz"]["max"]),
):
wheel_radps = _body_to_wheel_radps(
vx, vy, wz,
bridge["wheel_radius"],
bridge["base_radius"],
float("inf"),
)
assert max(abs(value) for value in wheel_radps) <= bridge["max_radps"] + 1e-9
来源:src/robot_navigation/config/nav2_params.yaml:116-188, src/robot_navigation/test/test_nav2_controller_config.py:111-163
FAST-LIO 与 Livox 集成
对于基于激光雷达的 profile(MID-360),导航架构集成 Livox SDK2 驱动、FAST-LIO 惯性激光雷达里程计以及 SLAM Toolbox 或 AMCL .gitmodules:1-35, src/robot_navigation/README.md:13-15。
graph TD
LivoxSensor["Livox MID-360 LiDAR"] -->|"/livox/lidar & /livox/imu"| FastLio["FAST-LIO State Estimation"]
FastLio -->|"/Odometry & TF odom->base_link"| FastBridge["robot_navigation.fast_lio_odom_bridge"]
FastBridge -->|"/odometry/filtered"| Nav2Stack["Nav2 Costmaps & Local Planner"]
Nav2Stack -->|"/cmd_vel_safe"| CollisionMonitor["nav2_collision_monitor"]
CollisionMonitor -->|"/cmd_vel"| CmdBridge["robot_navigation.cmd_vel_bridge_node"]
style LivoxSensor fill:none,stroke:#000,stroke-width:2px
style FastLio fill:none,stroke:#000,stroke-width:2px
style Nav2Stack fill:none,stroke:#000,stroke-width:2px
图 5.5.3:FAST-LIO 与激光雷达导航数据流。
fast_lio_odom_bridge 为下游导航消费者规范化官方 FAST-LIO 里程计消息,确保与 Nav2 costmap 传感器源及碰撞监测器兼容 src/robot_navigation/README.md:84, src/robot_navigation/setup.py:49。
来源:.gitmodules:18-30, src/robot_navigation/README.md:13-17, src/robot_navigation/setup.py:49-50