Files
sim_smart_car_bridge/README.md
2026-06-20 21:54:04 +08:00

124 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# sim_smart_car_bridge
ROS2 桥接中转节点:将 [Origincar 仿真](https://github.com/mxxxdev/motrixsim) 的 HTTP API端口 8765全面桥接到 ROS2 话题。
## 数据流
```
origincar_bridge
仿真机 HTTP API ←──── HTTP ────→ ←── ROS2 ──→ 你的其他节点
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 / LaserScan |
| `nav_msgs` | Odometry |
| `geometry_msgs` | Twist / Quaternion |
| `std_msgs` | Float32 (PowerVoltage) |
| `cv_bridge` | OpenCV ↔ ROS Image |
| `opencv-python` | JPEG 解码 |
| `numpy` | 图像数组 |
| `requests` | HTTP 客户端 |
## 安装
```bash
cd <your_workspace>
git clone http://106.14.170.56:57575/cyy/sim_smart_car_bridge.git src/origincar_bridge
colcon build --packages-select origincar_bridge --symlink-install
source install/setup.bash
```
## 使用
```bash
# launch 启动(推荐)
ros2 launch origincar_bridge bridge.launch.py http_host:=192.168.11.159
# 直接运行
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
```
## 可配置参数
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `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/data_raw` | IMU 发布话题 |
| `scan_topic` | `/scan` | 激光雷达发布话题 |
| `odom_topic` | `/odom` | 里程计发布话题 |
| `power_topic` | `/PowerVoltage` | 电池电压发布话题 |
| `cmd_vel_topic` | `/cmd_vel` | 控制指令订阅话题 |
## 上游 HTTP API
| 端点 | 方法 | 返回 | 说明 |
|------|------|------|------|
| `/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}` |
### /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
├── resource/
│ └── origincar_bridge # 包标记
├── launch/
│ └── bridge.launch.py # 启动文件
└── origincar_bridge/
├── __init__.py
└── bridge_node.py # ★ 全功能桥接节点
```