Skip to content

自主导航阶段 — 移交文档

本文移交给下一 session(自主导航阶段)。上一阶段(CAN 集成 + SLAM 建图)已完成并硬件验证, cmd_vel 命令链路也已打通。本文交代:现状、系统架构、Jetson 侧细节、以及自主导航还要做什么。

配套阅读:00_集成Review与计划_CN.md(控制板/FOC/刹车 CAN 集成)、01_CAN接口规范_CN.md(CAN 真源)。

日期:2026-06-01


1. 当前状态(已完成、已验证)

模块状态
三板 CAN 集成(控制板↔FOC 0x210/0x211/0x212、↔刹车 0x220、↔伺服 0x64+)✅ 硬件验证(双电机正反转、VBUS 遥测、刹车、IMU)
手动 / 遥控 / 训练 / 采集(SLAM) 模式✅ 采集模式可遥控驾驶 + 上报 IMU/速度/转向
SLAM 建图链路✅ 采集→Jetson slam_toolbox 建图→存图,已建出 ~31m 地图
里程计✅ 轮速 + IMU 陀螺Z 的 2D 里程计(/odom + odom→base_link
Jetson 开机自启 + 串口自愈✅ systemd 服务 + 设备消失自动重连
cmd_vel → 控制板命令链路✅ 本次修好(Jetson 发二进制 0x10 跟随帧,控制板跟随模式执行)

2. 系统数据流

                 ┌──────────────────────── Jetson Orin Nano (ROS2 Humble) ────────────────────┐
 RS16 雷达 ─UDP→ │ rslidar_sdk → /rslidar_points → pointcloud_to_laserscan → /scan            │
                 │                                                          ↘                  │
 控制板 ─USART1/CH340→ serial_bridge_node ─→ /imu, /odom(轮速+IMU), /vehicle/mode_event        │
   (采集模式: 0x07帧 + IMU CSV行)            ↘ odom→base_link TF      ↘                         │
                 │ mapping_manager: mode_event=SLAM_START→起 slam_toolbox 建图; STOP→存图        │
                 │                                                                              │
 控制板 ←USART1── serial_bridge._on_cmd_vel ← /cmd_vel(Twist)  [自主导航用; 本次修好 0x10 帧]    │
                 └──────────────────────────────────────────────────────────────────────────┘
  • 控制板 ↔ FOC/刹车/伺服 全走 CAN(见 01_CAN接口规范_CN.md)。
  • 控制板 ↔ Jetson 走 USART1 / CH340 USB(115200,22 字节二进制帧 + ASCII IMU 行多路复用)。

3. Jetson 侧(~/ros2_ws/src/vehicle_driver

节点

  • serial_bridge_node:读控制板串口,demux(AA55 二进制帧 / ASCII 行);发 /imu/odom/vehicle/mode_eventodom→base_link TF;订阅 /cmd_vel → 写 0x10 跟随帧给控制板。 含设备消失看门狗(USB 重枚举/掉线自动重连)。
  • mapping_manager_node:订阅 /vehicle/mode_eventSLAM_START→启 vehicle_mapping.launch.pySLAM_STOPmap_saver 存图到 ~/ros2_ws/maps/slam_<ts> 并停。

关键约定

  • MCU 帧 TYPE:0x07 采集→SLAM_START;0x05 手动 / 0x06 遥控→SLAM_STOP;0x10=host→MCU 跟随命令。
  • IMU 行:IMU,ax,ay,az,gx,gy,gz,roll,pitch,yaw(±4g→LSB_PER_G=8192;±2000dps→GYRO_SCALE=0.00122173; roll/pitch/yaw 发 0 未用)。
  • /cmd_vel→0x10 帧换算(cmd_sender.py参数待标定):油门 thr_ref=v/V_MAX*1000(前进), 转向自行车模型 δ=atan(L·ω/v)V_MAX=1.5、WHEELBASE=0.6、MAX_STEER=37°、STEER_SIGN=1

运行(systemd 已开机自启)

  • 服务:/etc/systemd/system/vehicle_agent.service(enabled;Conflicts=autodrive.service)。
  • 手动:sudo systemctl start/stop/restart vehicle_agent;看日志 journalctl -u vehicle_agent -f
  • 与 autodrive 互斥(抢同一串口);建图/导航时跑 vehicle_agent,自动驾驶旧栈跑 autodrive。
  • 设备名:CH340 枚举为 /dev/ttyCH341USB*(会变号)。建议装 udev 固定 /dev/vehicle_mcuecho 'SUBSYSTEM=="tty",ATTRS{idVendor}=="1a86",ATTRS{idProduct}=="7523",SYMLINK+="vehicle_mcu"' | sudo tee /etc/udev/rules.d/99-vehicle-mcu.rules && sudo udevadm control --reload-rules && sudo udevadm trigger

SLAMslam_toolbox(async, mapping);config/vehicle_slam.yaml;雷达外参 base→rslidar=(-0.45,0,1.20,0,0,0); base→imu_link 单位 TF。雷达走以太网(192.168.3.227:6707)。


4. 控制板「跟随模式」如何执行命令(自主导航的执行端)

  • 屏选 跟随(FOLLOW) 模式 → 伺服使能、回中位、等上位机 0x10 帧。
  • TrainUART_PollFollowCmd 解析 0x10 帧 → FollowCmd_t{steer_01(0.1°), thr_ref(0..1000), brake}
  • 应用:steer_01→伺服目标位置(绕 home,±物理 37°);thr_ref→电机油门(前进);brake→停。
  • 200ms 无 0x10 帧 → 超时保护(brake=1、油门 0)。
  • 要真正走车还需:档位 D + 整车使能 + FOC 标定有效(同手动/遥控的行走前提)。

5. 下一阶段:自主导航 还要做什么

cmd 链路已通(缺口#2 已修)。剩余:

① 搭 Nav2 导航栈(最大块,未做)

  • map_server 加载保存的地图(~/ros2_ws/maps/slam_*.yaml)。
  • 定位:AMCL 或 slam_toolbox localization 模式(用 /scan+/odom 在已知图里定位,发 map→odom)。
  • planner_server + controller_server阿克曼用 Regulated Pure Pursuit)+ bt_navigator
  • 需新增 launch(如 vehicle_nav.launch.py)+ Nav2 参数 yaml。确认 Nav2 已 apt install ros-humble-nav2-*

② 阿克曼运动学 + 命令标定(部分已搭,待调)

  • cmd_sender.pyV_MAX/WHEELBASE/MAX_STEER/STEER_SIGN 按实车标定(轮径 250mm;轴距实测; 先用遥控/手动验证 STEER_SIGN 方向对不对)。
  • Nav2 controller 的最小转弯半径、速度限幅与车实际能力对齐。

③ 里程计/外参标定(提升精度)

  • 轮速→线速度系数(控制板 FOC_WHEEL_CIRCUMFERENCE_MM 按轮径 250mm 核对)。
  • IMU 陀螺Z 符号 + 零偏(/odom 前进左转应 x↑、yaw↑;不对则 gyro_z_sign 翻号)。
  • 雷达外参(水平度 + yaw 对准)——目前目测水平,地图若旋转/扭曲需精调。

④ 安全

  • Nav2 速度限幅要保守;保留遥控/手动急停接管(切手动即停跟随)。
  • 户外供电:Jetson + USB 稳压独立供电,避免电机瞬态拉低导致掉电重枚举。

6. 关键文件 / 命令速查

用途位置
控制板固件DlaBoard_A/(跟随模式 dla_cart_loop.inc switch case MODE_FOLLOW;0x10 解析 train_uart.c
控制板烧录STLINK:STM32_Programmer_CLI -c port=SWD sn=<F407> -w DlaBoard_A.elf -v -rst(F407 SN 见 --list
Jetson 串口桥/命令~/ros2_ws/src/vehicle_driver/vehicle_driver/{serial_bridge_node,cmd_sender,protocol,imu_parser}.py
Jetson 建图launch/vehicle_mapping.launch.pyconfig/vehicle_slam.yamlmaps/
重新构建cd ~/ros2_ws && colcon build --packages-select vehicle_driver --symlink-install
改动备份*.bak_<ts>(Jetson);控制板 git/历史