Files

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:

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:

make python-ext
make python-install

UDP Mode

Sender:

./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:

python3 ros-control-c/robot/udp_ros_bridge.py

KCP Mode

Start the existing OmniSocket KCP hub from the repo root:

./bin/kcpserver -listen :9002 -telemetry-peer peer-a-telemetry

Sender:

./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:

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:

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