更新接口

This commit is contained in:
cyy
2026-06-20 21:54:04 +08:00
parent 954ca7f8a7
commit a58cbbf481
5 changed files with 366 additions and 203 deletions

View File

@@ -1,28 +1,45 @@
# sim_smart_car_bridge
ROS2 桥接中转节点:将 Origincar 仿真的 HTTP API 与 ROS2 话题双向桥接
ROS2 桥接中转节点:将 [Origincar 仿真](https://github.com/mxxxdev/motrixsim) 的 HTTP API端口 8765全面桥接到 ROS2 话题。
## 数据流
```
仿真机 HTTP API ←———HTTP———→ origincar_bridge ←———ROS2———→ 你的其他节点
origincar_bridge
仿真机 HTTP API ←──── HTTP ────→ ←── ROS2 ──→ 你的其他节点
GET /image ──→ cv_bridge 解码 ──→ sensor_msgs/Image /image
GET /imu ──→ 填充字段 ──→ sensor_msgs/Imu /imu
POST /cmd ── speed/steer ── geometry_msgs/Twist /cmd_vel
GET /image ──→ cv_bridge 解码 ──→ sensor_msgs/Image /image
GET /imu ──→ 填充字段 ──→ sensor_msgs/Imu /imu/data_raw
GET /scan ── 填充字段 ── sensor_msgs/LaserScan /scan
GET /odom ──→ 填充字段 ──→ nav_msgs/Odometry /odom
GET /power ──→ Float32 ──→ std_msgs/Float32 /PowerVoltage
POST /cmd ←── vx / wz ←── geometry_msgs/Twist /cmd_vel
```
| 方向 | 话题 | 消息类型 | HTTP 端点 | 频率 |
|------|------|----------|-----------|------|
| 上行 | `/image` | `sensor_msgs/Image` | `GET /image` | 10 Hz可配 |
| 上行 | `/imu/data_raw` | `sensor_msgs/Imu` | `GET /imu` | 30 Hz sync |
| 上行 | `/scan` | `sensor_msgs/LaserScan` | `GET /scan` | 30 Hz sync |
| 上行 | `/odom` | `nav_msgs/Odometry` | `GET /odom` | 30 Hz sync |
| 上行 | `/PowerVoltage` | `std_msgs/Float32` | `GET /power` | 30 Hz sync |
| 下行 | `/cmd_vel` | `geometry_msgs/Twist` | `POST /cmd` | 事件驱动 |
> **帧 ID**: `camera_front`(图像)、`gyro_link`IMU、`laser`(雷达)、`odom`→`base_link`(里程计)
## 依赖
| 依赖 | 用途 |
|------|------|
| `rclpy` | ROS2 Python 客户端 |
| `sensor_msgs` | Image / Imu 消息 |
| `geometry_msgs` | Twist 消息 (cmd_vel) |
| `cv_bridge` | OpenCV ↔ ROS Image 转换 |
| `opencv-python` | 图像解码 |
| `numpy` | 图像数组处理 |
| `requests` | HTTP 请求 |
| `sensor_msgs` | Image / Imu / LaserScan |
| `nav_msgs` | Odometry |
| `geometry_msgs` | Twist / Quaternion |
| `std_msgs` | Float32 (PowerVoltage) |
| `cv_bridge` | OpenCV ↔ ROS Image |
| `opencv-python` | JPEG 解码 |
| `numpy` | 图像数组 |
| `requests` | HTTP 客户端 |
## 安装
@@ -35,15 +52,11 @@ source install/setup.bash
## 使用
### launch 启动(推荐)
```bash
# launch 启动(推荐)
ros2 launch origincar_bridge bridge.launch.py http_host:=192.168.11.159
```
### 直接运行
```bash
# 直接运行
ros2 run origincar_bridge bridge_node --ros-args -p http_host:=192.168.11.159
```
@@ -51,6 +64,7 @@ ros2 run origincar_bridge bridge_node --ros-args -p http_host:=192.168.11.159
```bash
ros2 param set /origincar_bridge image_rate 15.0
ros2 param set /origincar_bridge sync_rate 20.0
ros2 param set /origincar_bridge timeout 2.0
```
@@ -58,30 +72,44 @@ ros2 param set /origincar_bridge timeout 2.0
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `http_host` | `192.168.11.159` | 仿真机 IP 地址 |
| `http_host` | `192.168.11.159` | 仿真机 IP |
| `http_port` | `8765` | HTTP API 端口 |
| `timeout` | `1.0` | HTTP 请求超时 (s) |
| `sync_rate` | `30.0` | scan/odom/imu/power 统一同步频率 (Hz) |
| `image_rate` | `10.0` | 图像独立拉取频率 (Hz) |
| `image_topic` | `/image` | 图像发布话题 |
| `imu_topic` | `/imu` | IMU 发布话题 |
| `imu_topic` | `/imu/data_raw` | IMU 发布话题 |
| `scan_topic` | `/scan` | 激光雷达发布话题 |
| `odom_topic` | `/odom` | 里程计发布话题 |
| `power_topic` | `/PowerVoltage` | 电池电压发布话题 |
| `cmd_vel_topic` | `/cmd_vel` | 控制指令订阅话题 |
| `image_rate` | `30.0` | 图像拉取频率 (Hz) |
| `imu_rate` | `30.0` | IMU 拉取频率 (Hz) |
| `timeout` | `1.0` | HTTP 请求超时 (秒) |
## 上游 API
## 上游 HTTP API
本节点对接 [Origincar Simulation](https://github.com/mxxxdev/motrixsim) 的 HTTP API端口 8765
| 端点 | 方法 | 返回 | 说明 |
|------|------|------|------|
| `/image` | GET | JPEG bytes | 前置摄像头图像 |
| `/imu` | GET | JSON | IMU 数据MPU6050 噪声) |
| `/scan` | GET | JSON | LSLIDAR N10 2D 激光雷达360°, 450 点) |
| `/odom` | GET | JSON | 里程计(位置/姿态/速度) |
| `/power` | GET | JSON | 电池电压 `{"voltage": 12.0}` |
| `/state` | GET | JSON | 小车完整状态 |
| `/cmd` | POST | — | 控制指令 `{"vx": vx, "wz": wz}` |
| 端点 | 方法 | 说明 |
|------|------|------|
| `/image` | GET | 前置摄像头 JPEG 图像 |
| `/imu` | GET | IMU 数据 (MPU6050) JSON |
| `/state` | GET | 小车状态 JSON |
| `/cmd` | POST | 发送控制指令 `{"speed": 1.0, "steer": 0.3}` |
### /cmd 控制模式
HTTP `/cmd` 使用差速模式 `{"vx": vx, "wz": wz}`(匹配串口协议,与 `Twist` 语义一致),服务端内部通过 bicycle model 将 `wz` 转为阿克曼转向角。
```json
{"vx": 1.0, "wz": 0.5}
```
## 项目结构
```
origincar_bridge/
├── README.md
├── .gitignore
├── package.xml # ROS2 包清单
├── setup.py # ament_python 构建入口
├── setup.cfg
@@ -91,5 +119,5 @@ origincar_bridge/
│ └── bridge.launch.py # 启动文件
└── origincar_bridge/
├── __init__.py
└── bridge_node.py # 桥接节点主程序
└── bridge_node.py # ★ 全功能桥接节点
```