sim_smart_car_bridge
ROS2 桥接中转节点:将 Origincar 仿真 的 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 客户端 |
安装
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
使用
# 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
运行时调参
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 转为阿克曼转向角。
{"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 # ★ 全功能桥接节点
Description
Languages
Python
100%