You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mei9zatru 4d6aeb0464
Update README.md
21 hours ago
README.md Update README.md 21 hours ago
cyber_routing.py init route and TL setting func 22 hours ago
cyber_trafficlight.py init route and TL setting func 22 hours ago

README.md

Apollo 外部命令控制脚本

两个用于 Apollo 9.0 仿真环境的 Python 控制脚本,支持手动控制红绿灯状态和发送车道跟随命令。

环境要求

  • Apollo 9.0 Docker 环境Cyber RT 已安装)
  • Python 3.6+
  • 已启动模块Planning、Control、external_command_processor

脚本 1红绿灯控制cyber_trafficlight.py

功能

/apollo/perception/traffic_light 话题发送红绿灯消息,手动切换红/绿灯状态,测试车辆启停响应。

配置

编辑脚本开头 SIGNAL_IDS 列表,确保 ID 与地图 base_map 中的 signal.id 完全一致:

SIGNAL_IDS = ["signal_123", "signal_456"]

使用

python cyber_trafficlight.py

交互操作:

  • 1 → 红灯(车辆停车)
  • 2 → 绿灯(车辆通行)
  • 3 → 退出

脚本 2车道跟随命令cyber_routing.py

功能

/apollo/external_command/lane_follow 服务发送起点→终点坐标命令车辆自动沿车道行驶heading 由 Apollo 自动匹配)。

使用

  1. 编辑脚本中的坐标:
start_x, start_y = parse_coordinate("(587107.23,4141578.02)")  # 起点
end_x, end_y   = parse_coordinate("(587010.55,4141603.85)")    # 终点
  1. 运行脚本:
python cyber_routing.py
  1. 若响应 status=1RUNNING车辆即开始行驶。

常见问题速查

现象 可能原因 解决命令
红绿灯无响应 ID 不匹配 / 话题错误 检查 SIGNAL_IDS 与地图一致;确认话题 /apollo/perception/traffic_light
车道跟随返回 ERROR 缺少 routing 拓扑图 ./scripts/generate_routing_topo_graph.sh --map_dir /path/to/map
坐标无效 起点/终点不在可行驶车道 用 Dreamview 或 query_position.py 验证坐标
服务无响应 external_command_processor 未启动 cyber_node list | grep external_command

状态码说明

  • 1 → RUNNING 执行中
  • 2 → FINISHED 已完成
  • 3 → ERROR 失败(查日志)

日志查看

# 规划决策日志(含红绿灯响应)
tail -f /apollo/data/log/planning.INFO

# 外部命令处理日志
tail -f /apollo/data/log/external_command.INFO

# 实时监听话题(调试用)
cyber_channel echo /apollo/perception/traffic_light
cyber_channel echo /apollo/external_command/lane_follow

目录结构

.
├── README.md
├── cyber_trafficlight.py
└── cyber_routing.py

base_map.bin 文件处理指南

在 Apollo 中,高精度地图通过 Protocol Buffersprotobuf协议定义。base_map.bin 是二进制格式,文件小但不可读;base_map.txt 是文本格式,方便查看和调试,但文件较大。日常仿真使用 .bin 文件,而在需要手动修改地图数据(例如编辑红绿灯 ID会用到下面介绍的格式转换命令。

格式转换命令

以下命令在 Apollo Docker 容器内执行。应使用地图实际目录,示例中的 /path/to/your/map/directory/ 路径请自行替换。

二进制(.bin) 转 文本(.txt)

protoc --decode=apollo.hdmap.Map /apollo/modules/map/proto/map.proto < /path/to/your/map/directory/base_map.bin > base_map.txt

执行后,可读的 base_map.txt 文件会保存在当前工作目录下。该命令常用于确认特定路口的 signal ID 或边界坐标。

文本(.txt) 转 二进制(.bin)

protoc --encode=apollo.hdmap.Map /apollo/modules/map/proto/map.proto < base_map.txt > /path/to/your/map/directory/base_map.bin

此命令将编辑后的 .txt 文件重新编码回 Apollo 可用的二进制格式。为确保新的 base_map.bin 文件能被 Dreamview 正确加载,强烈建议在替换后执行下一步,重新生成其他辅助地图文件。

重新生成 routing_mapsim_map

地图数据发生变化时,务必执行此步骤,以保证路由规划和可视化模块能同步更新。

# 生成 routing_map路由模块用
./scripts/generate_routing_topo_graph.sh --map_dir /path/to/your/map/directory/

# 生成 sim_mapDreamView 显示用)
bazel-bin/modules/map/tools/sim_map_generator --map_dir /path/to/your/map/directory/ --output_dir /path/to/your/map/directory/

编辑红绿灯 ID 的完整流程

当需要修改地图中某个红绿灯的 ID例如从 "451089193" 改为 "14")时,完整操作流程如下:

  1. 解码:使用 base_map.bin.txt 命令将地图解码。
  2. 编辑:用文本编辑器打开 base_map.txt,找到信号灯 signal 部分,修改 id 字段的数值。
    signal {
      id {
        id: "14"       # 修改此处ID
      }
      ...
    }
    
  3. 编码:使用 .txtbase_map.bin 命令将修改后的文件重新编码回二进制格式。
  4. 更新:用新生成的 base_map.bin 替换原文件,并执行命令重新生成 routing_mapsim_map