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.
4.0 KiB
4.0 KiB
以下是为两个 Python 脚本编写的 README.md 文件,包含红绿灯控制脚本 (cyber_trafficlight.py) 和车道跟随命令脚本 (cyber_routing.py) 的详细说明。
# Apollo 外部命令控制脚本
本仓库提供两个用于 Apollo 9.0 仿真环境的 Python 脚本,分别用于手动控制红绿灯状态和发送车道跟随命令,以测试规划与控制模块的响应。
## 环境要求
- Apollo 9.0 Docker 容器环境(已安装 Cyber RT 及相关模块)
- Python 3.6+
- 已启动 Dreamview 或相关 Cyber 节点(`Planning`、`Control`、`external_command_processor` 等)
## 脚本说明
### 1. 红绿灯控制脚本 (`cyber_trafficlight.py`)
**功能**
向 `/apollo/perception/traffic_light` 话题周期性发送红绿灯检测消息,手动切换红绿灯状态,用于仿真中测试车辆在红灯前的停车及绿灯后的起步行为。
**消息协议**
- 使用 `modules/common_msgs/perception_msgs/traffic_light_detection.proto`
- 每个 `TrafficLight` 消息包含 `id`(地图中的信号灯 ID)、`color`、`tracking_time` 等字段
- 支持同时控制多个红绿灯 ID
**使用方法**
```bash
python cyber_trafficlight.py
运行后按提示输入数字:
1→ 将所有指定红绿灯设为红灯,车辆应停车2→ 设为绿灯,车辆应通行3→ 退出程序
配置
在脚本开头的 SIGNAL_IDS 列表中,可修改需要控制的红绿灯 ID(必须与地图 base_map 中的 signal.id 一致)。
2. 车道跟随命令脚本 (cyber_routing.py)
功能
通过 Cyber 客户端向 /apollo/external_command/lane_follow 服务发送 LaneFollowCommand,命令车辆从指定起点行驶至终点。不手动设置车辆朝向(heading),由 Apollo 自动匹配最近车道的切线方向。
消息协议
- 使用
modules/common_msgs/external_command_msgs/lane_follow_command.proto - 必需的字段:
command_id、is_start_pose_set、way_point(起点)、end_pose(终点)
使用方法
- 确认
external_command_processor已运行(通常跟随 Planning 模块启动)。 - 执行脚本:
python cyber_routing.py
- 脚本会输出发送的命令及服务响应状态,若响应
status=1(RUNNING),车辆即开始沿车道行驶。
坐标输入
脚本中使用 parse_coordinate() 函数解析形如 "(x,y)" 的字符串,可方便地更换起点/终点坐标。示例:
start_x, start_y = parse_coordinate("(587107.2299980448,4141578.018806449)")
end_x, end_y = parse_coordinate("(587010.5463351277,4141603.8543796046)")
常见问题
红绿灯脚本发送后车辆无响应
- 检查话题名称是否正确:
/apollo/perception/traffic_light - 确认 Planning/Control 模块已启动,且红绿灯 ID 与地图中的
signal.id完全匹配(注意前缀signal_) - 查看 Planning 日志中是否有
stop by TL_xxx的决策输出
车道跟随命令返回 ERROR
- 最常见原因:缺少
routing_map文件。执行以下命令生成(替换为实际地图路径):./scripts/generate_routing_topo_graph.sh --map_dir /path/to/map/directory - 检查起点/终点坐标是否落在可行驶车道上(可使用
query_position.py工具验证) - 确认
external_command_processor模块已运行:cyber_channel list | grep external_command
响应状态码含义
0→ STATUS_UNKNOWN(未知)1→ STATUS_RUNNING(执行中)2→ STATUS_FINISHED(已完成)3→ STATUS_ERROR(失败,查看日志)
日志查看
- 红绿灯相关日志:
tail -f /apollo/data/log/planning.INFO - 外部命令日志:
tail -f /apollo/data/log/external_command.INFO
许可证
本脚本仅用于 Apollo 仿真学习与测试,遵循 Apollo 项目所使用的 Apache 2.0 许可证。
该 README 文件可直接保存为 `README.md`,与两个 Python 脚本放在同一目录下。