A teleoperation system for OpenArm robots using KER (Kinematic Equivalent Replica).
- Joint mapping: Flexible configuration-based mapping from leader to follower joints
- USB communication: Interface with M5Stack CoreS3 via USB vendor mode
sudo apt install libusb-1.0-0-devUSB vendor mode only (normal use):
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="303a", MODE="0666"' | sudo tee /etc/udev/rules.d/99-m5stack.rules
sudo udevadm control --reload-rules && sudo udevadm triggerIf you also want to flash firmware (adds stable device name /dev/m5_ker_485):
Put M5Stack into flashing mode (hold RST 3 seconds until green LED lights up), then run:
SERIAL=$(udevadm info -q property -n /dev/ttyACM0 | grep ID_SERIAL_SHORT | cut -d= -f2)
sudo tee /etc/udev/rules.d/99-m5stack.rules << EOF
# USB vendor mode (normal operation)
SUBSYSTEM=="usb", ATTRS{idVendor}=="303a", MODE="0666"
# Serial mode (flashing) with stable device name
SUBSYSTEM=="tty", ATTRS{idVendor}=="303a", ATTRS{idProduct}=="1001", ATTRS{serial}=="$SERIAL", MODE="0666", SYMLINK+="m5_ker_485"
EOF
sudo udevadm control --reload-rules && sudo udevadm triggerPress RST once to reboot normally.
uv pip install openarm_kerPlug the M5Stack CoreS3 into your PC via USB and run:
openarm-ker-cli pingExpected output:
{
"fw": "v1.0.0",
"hw": "KER-v1.0.0",
"updated": "2026-05-25"
}from openarm_ker import KERStream
with KERStream(transport="usb") as stream:
data = stream.latest()
if data is not None:
ts = data["timestamp"]
angles = data["angles"]
enc_val = data["encoder_value"]
enc_btn = data["encoder_button"]
angles_str = " | ".join([f"CH{i+1:02d}: {a:8.2f}°" for i, a in enumerate(angles)])
print(f"TS: {ts:10d} | {angles_str} | ENC: {enc_val:4d} (Btn: {int(enc_btn)})", end='\r')# Check device connection and fetch schema
openarm-ker-cli ping
# Stream raw data to terminal
openarm-ker-cli stream
# Serial transport
openarm-ker-cli stream --transport serial --port /dev/m5_ker_485 --baud 2000000- 📚 Read the documentation
- 💬 Join the community on Discord
- 📬 Contact us through openarm@enactic.ai
Licensed under the Apache License 2.0. See LICENSE.txt for details.
Copyright 2026 Enactic, Inc.
All participation in the OpenArm project is governed by our Code of Conduct.