本项目采用 Core + ROS Wrapper 分层架构,实现 ROS 与算法逻辑的解耦。
src/
├── autodrive_msgs/ # 统一消息定义
├── fsd_launch/ # 统一启动配置
│ └── launch/
│ ├── trackdrive.launch # 任务入口: 高速循迹
│ ├── skidpad.launch # 任务入口: 八字绕环
│ ├── acceleration.launch # 任务入口: 直线加速
│ ├── autocross.launch # 任务入口: 综合赛道
│ ├── subsystems/ # 子系统: perception, planning, control, localization
│ ├── tools/ # 工具: rviz, rosbag_play, debug
│ └── simulation/ # 全仿真启动
├── fsd_visualization/ # 统一可视化节点
├── perception_core/ # 感知算法核心 (无 ROS 依赖)
├── perception_ros/ # 感知 ROS 包装层
├── planning_core/ # 规划算法核心 (无 ROS 依赖)
├── planning_ros/ # 规划 ROS 包装层
├── control_core/ # 控制算法核心 (无 ROS 依赖)
├── control_ros/ # 控制 ROS 包装层
├── localization_core/ # 定位算法核心 (无 ROS 依赖)
├── localization_ros/ # 定位 ROS 包装层
├── vehicle_interface_core/ # 车辆通信协议核心
├── vehicle_interface_ros/ # 车辆通信接口 ROS 包装层
├── vehicle_racing_num_core/ # 比赛编号管理核心
├── vehicle_racing_num_ros/ # 比赛编号管理 ROS 包装层
└── ins/ # INS 消息兼容桥接
cd ~/2025huat
catkin build # 构建所有包
source devel/setup.bash
# 构建特定包
catkin build <package_name>
# 清理并重新构建
catkin clean -y
catkin build# 运行所有测试
catkin run_tests
# 运行特定包的测试
catkin run_tests <package_name>仿真模式(rosbag 回放):
# 基础仿真
roslaunch fsd_launch trackdrive.launch simulation:=true bag:=/path/to/bag.bag
# 循环播放
roslaunch fsd_launch trackdrive.launch simulation:=true bag:=/path/to/bag.bag loop:=true
# 自定义播放速率
roslaunch fsd_launch trackdrive.launch simulation:=true bag:=/path/to/bag.bag rate:=0.5实车模式:
bash autoStartGkj/start.sh# 双窗口模式 (默认)
roslaunch fsd_launch trackdrive.launch simulation:=true bag:=/path/to/bag.bag rviz_mode:=dual
# 仅点云
roslaunch fsd_launch trackdrive.launch simulation:=true bag:=/path/to/bag.bag rviz_mode:=pointcloud
# 仅全局俯视图
roslaunch fsd_launch trackdrive.launch simulation:=true bag:=/path/to/bag.bag rviz_mode:=global| 任务 | 启动命令 | 说明 |
|---|---|---|
| TrackDrive | roslaunch fsd_launch trackdrive.launch |
高速循迹 |
| Skidpad | roslaunch fsd_launch skidpad.launch |
8字绕环 |
| Acceleration | roslaunch fsd_launch acceleration.launch |
直线加速 |
| Autocross | roslaunch fsd_launch autocross.launch |
综合赛道 |
src/fsd_launch/launch/trackdrive.launchsrc/fsd_launch/launch/skidpad.launchsrc/fsd_launch/launch/autocross.launchsrc/fsd_launch/launch/acceleration.launch
src/fsd_launch/launch/subsystems/perception.launchsrc/fsd_launch/launch/subsystems/localization.launchsrc/fsd_launch/launch/subsystems/planning.launchsrc/fsd_launch/launch/subsystems/control.launchsrc/fsd_launch/launch/subsystems/vehicle.launch
src/fsd_launch/launch/tools/rosbag_play.launchsrc/fsd_launch/launch/tools/rviz.launchsrc/fsd_launch/launch/tools/debug.launchsrc/fsd_launch/launch/tools/topic_bridge.launch
说明:任务入口位于
src/fsd_launch/launch/根目录,直接使用roslaunch fsd_launch trackdrive.launch ...
示例(仿真 + 回放 + 双窗口 RViz + 循环):
roslaunch fsd_launch trackdrive.launch \
simulation:=true \
bag:=/home/kerwin/rosbag/22910_2.bag \
rviz_mode:=dual \
loop:=true参数说明(来自 trackdrive.launch):
| 参数 | 默认值 | 作用 |
|---|---|---|
simulation |
false |
是否仿真模式;为 true 时启用 /use_sim_time 并播放 rosbag |
bag |
"" |
rosbag 文件路径(仿真模式必填) |
rate |
1.0 |
rosbag 播放速率 |
loop |
false |
rosbag 是否循环播放(传给 tools/rosbag_play.launch) |
launch_rviz |
true |
是否启动 RViz(通过 tools/rviz.launch) |
launch_viz |
true |
是否启动 fsd_visualization 可视化节点 |
rviz_mode |
main |
RViz 显示模式:main/global/pointcloud/dual |
| 话题 | 类型 | 描述 |
|---|---|---|
/velodyne_points |
PointCloud2 | 原始点云 |
/perception/lidar_cluster/detections |
autodrive_msgs/HUAT_ConeDetections |
感知锥桶检测输出 |
/localization/car_state |
autodrive_msgs/HUAT_CarState |
统一车辆状态 |
/planning/pathlimits |
autodrive_msgs/HUAT_PathLimits |
规划输出路径约束 |
/vehicle/cmd |
autodrive_msgs/HUAT_VehicleCmd |
统一控制指令 |
/fsd/viz/* |
Marker/MarkerArray | 可视化标记 |
兼容链路仍可选 legacy 话题(默认关闭):
/Carstate、/vehcileCMDMsg。
- ROS 版本: Noetic
- C++ 标准: C++17
- 构建工具: catkin_tools
- 许可证: BSD-3-Clause
- 包版本: 1.0.0 (统一)
本项目采用分层架构,将算法核心与 ROS 中间件解耦:
- 可测试性: Core 包可独立进行单元测试,无需 ROS 环境
- 可移植性: 算法核心可移植到非 ROS 系统
- 清晰分离: 算法逻辑与通信层职责明确
- 易维护: 修改算法无需关注 ROS 细节,修改接口无需改动算法
- 在对应的
*_core/包中实现算法(无 ROS 依赖) - 在
*_core/test/中添加单元测试 - 在对应的
*_ros/包中创建 ROS 包装层 - 根据需要在
fsd_launch/中添加启动文件 - 根据需要在
fsd_visualization/中添加可视化
# 使用调试工具启动
roslaunch fsd_launch tools/debug.launch mission:=trackdrive bag:=/path/to/bag.bag
# 检查话题
rostopic list
rostopic echo /perception/lidar_cluster/detections
rostopic hz /velodyne_points
# 检查坐标变换
rosrun tf tf_echo velodyne base_link- CLAUDE.md - Claude Code 开发指南(英文)
- HANDOFF.md - 当前代码状态与阶段性交接说明
- RESTRUCTURE_PLAN.md - 规整化重构规划与实施记录
- docs/README.md - 文档导航索引
- docs/remaining_work_audit_2026-03-06.md - 当前未完成事项、未实现功能与缺失依赖审计
- 各包 README - 查看
src/*/README.md
- ✅ 所有包构建通过
- ✅ 所有 core 包有单元测试
- ✅ 所有 core 包有文档
- ✅ 版本号统一为 1.0.0
- ✅ 许可证统一为 BSD-3-Clause
- ✅ 文件权限已规范化
- ✅ CI/CD 自动化测试
- ✅ 代码覆盖率报告
- ✅ 静态代码分析
- 项目维护者: kerwin (zhangjszs@foxmail.com)