Files

77 lines
1.7 KiB
Markdown

# ros-control-c
`ros-control-c` keeps the original 24-byte `twist_cmd_t` control payload and now supports two runtime transports:
- `udp` (default): unchanged from the original implementation
- `kcp`: sent through OmniSocket using `MSG_TYPE_BINARY`
Note:
- This README documents the `ros-control-c` path only.
- `ros-control-py` now uses OmniSocket for both `transport:=udp` and `transport:=kcp`; its `udp` mode is no longer raw socket UDP.
## Build
On Linux:
```bash
make -C ros-control-c
```
If the robot-side Python bridge will use KCP, build and install the OmniSocket Python extension from the repo root first:
```bash
make python-ext
make python-install
```
## UDP Mode
Sender:
```bash
./ros-control-c/build/keyboard_controller -i 192.168.1.100 -p 9870
./ros-control-c/build/gamepad_controller -i 192.168.1.100 -p 9870
```
Robot bridge:
```bash
python3 ros-control-c/robot/udp_ros_bridge.py
```
## KCP Mode
Start the existing OmniSocket KCP hub from the repo root:
```bash
./bin/kcpserver -listen :9002 -telemetry-peer peer-a-telemetry
```
Sender:
```bash
./ros-control-c/build/keyboard_controller -t kcp -s 192.168.1.50:9002 -I ros-keyboard-ctrl -T ros-bridge-ctrl
./ros-control-c/build/gamepad_controller -t kcp -s 192.168.1.50:9002 -I ros-gamepad-ctrl -T ros-bridge-ctrl
```
If a relay is needed, add `-r <relay_addr>` to the controller command.
Robot bridge:
```bash
python3 ros-control-c/robot/udp_ros_bridge.py --ros-args \
-p transport:=kcp \
-p kcp_server:=192.168.1.50:9002 \
-p peer_id:=ros-bridge-ctrl
```
Optional sender filtering:
```bash
python3 ros-control-c/robot/udp_ros_bridge.py --ros-args \
-p transport:=kcp \
-p peer_id:=ros-bridge-ctrl \
-p expected_sender:=ros-keyboard-ctrl
```