外观
Loading search…
外观
Loading search…
本文移交给下一 session(自主导航阶段)。上一阶段(CAN 集成 + SLAM 建图)已完成并硬件验证, cmd_vel 命令链路也已打通。本文交代:现状、系统架构、Jetson 侧细节、以及自主导航还要做什么。
配套阅读:
00_集成Review与计划_CN.md(控制板/FOC/刹车 CAN 集成)、01_CAN接口规范_CN.md(CAN 真源)。
日期:2026-06-01
| 模块 | 状态 |
|---|---|
| 三板 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 跟随帧,控制板跟随模式执行) |
┌──────────────────────── 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 帧] │
└──────────────────────────────────────────────────────────────────────────┘01_CAN接口规范_CN.md)。~/ros2_ws/src/vehicle_driver) 节点
serial_bridge_node:读控制板串口,demux(AA55 二进制帧 / ASCII 行);发 /imu、/odom、 /vehicle/mode_event、odom→base_link TF;订阅 /cmd_vel → 写 0x10 跟随帧给控制板。 含设备消失看门狗(USB 重枚举/掉线自动重连)。mapping_manager_node:订阅 /vehicle/mode_event;SLAM_START→启 vehicle_mapping.launch.py; SLAM_STOP→map_saver 存图到 ~/ros2_ws/maps/slam_<ts> 并停。关键约定
0x07 采集→SLAM_START;0x05 手动 / 0x06 遥控→SLAM_STOP;0x10=host→MCU 跟随命令。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。/dev/ttyCH341USB*(会变号)。建议装 udev 固定 /dev/vehicle_mcu: echo '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 triggerSLAM:slam_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)。
TrainUART_PollFollowCmd 解析 0x10 帧 → FollowCmd_t{steer_01(0.1°), thr_ref(0..1000), brake}。steer_01→伺服目标位置(绕 home,±物理 37°);thr_ref→电机油门(前进);brake→停。cmd 链路已通(缺口#2 已修)。剩余:
① 搭 Nav2 导航栈(最大块,未做)
map_server 加载保存的地图(~/ros2_ws/maps/slam_*.yaml)。/scan+/odom 在已知图里定位,发 map→odom)。planner_server + controller_server(阿克曼用 Regulated Pure Pursuit)+ bt_navigator。vehicle_nav.launch.py)+ Nav2 参数 yaml。确认 Nav2 已 apt install ros-humble-nav2-*。② 阿克曼运动学 + 命令标定(部分已搭,待调)
cmd_sender.py 的 V_MAX/WHEELBASE/MAX_STEER/STEER_SIGN 按实车标定(轮径 250mm;轴距实测; 先用遥控/手动验证 STEER_SIGN 方向对不对)。③ 里程计/外参标定(提升精度)
FOC_WHEEL_CIRCUMFERENCE_MM 按轮径 250mm 核对)。/odom 前进左转应 x↑、yaw↑;不对则 gyro_z_sign 翻号)。④ 安全
| 用途 | 位置 |
|---|---|
| 控制板固件 | 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.py、config/vehicle_slam.yaml、maps/ |
| 重新构建 | cd ~/ros2_ws && colcon build --packages-select vehicle_driver --symlink-install |
| 改动备份 | 各 *.bak_<ts>(Jetson);控制板 git/历史 |