Files
2026-03-30 15:30:30 +08:00

119 lines
2.7 KiB
Markdown
Raw Permalink 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.
# UDP Loopback
独立于原 `rl_control_node.py` 的 localhost UDP 键盘测试目录。
包含:
- `udp_keyboard_sender.py`:从终端读取按键,编码 UDP 报文并发送
- `udp_xbox_sender.py`:订阅 `/xbox_data`,把 Xbox 摇杆/按键转成 UDP 报文
- `udp_loopback_node.py`:接收 UDP 报文,解码事件并计算目标值
- `protocol.py`:自定义协议和状态结构
- `config/udp_loopback.yaml`:本地测试配置
运行方式:
```bash
cd /home/meiqi/tienkung/Deploy_Tienkung
python3 udp_loopback/udp_loopback_node.py
```
另开一个终端:
```bash
cd /home/meiqi/tienkung/Deploy_Tienkung
python3 udp_loopback/udp_keyboard_sender.py
```
接回现有 FSM 的方式:
1. 把 [dex_config.yaml](/home/meiqi/tienkung/Deploy_Tienkung/config/dex_config.yaml) 里的 `control_tool` 改成 `udp_loopback`
2. 启动原控制链,例如:
```bash
cd /home/meiqi/tienkung/Deploy_Tienkung
python3 rl_control_node_sim.py
```
3. 再启动发送端:
```bash
cd /home/meiqi/tienkung/Deploy_Tienkung
python3 udp_loopback/udp_keyboard_sender.py
```
如果改成 Xbox 经 UDP 转发,则启动方式是:
1. 把 [dex_config.yaml](/home/meiqi/tienkung/Deploy_Tienkung/config/dex_config.yaml) 里的 `control_tool` 改成 `udp_loopback`
2. 启动控制节点:
```bash
cd /home/meiqi/tienkung/Deploy_Tienkung
source /opt/ros/jazzy/setup.bash
export ROS_DOMAIN_ID=10
python3 rl_control_node_sim.py
```
3. 启动 MuJoCo
```bash
cd /home/meiqi/tienkung/xSIM_MUJOCO
source /opt/ros/jazzy/setup.bash
export ROS_DOMAIN_ID=10
python3 scripts/simulator_view_asyn.py -m evt2
```
4. 启动手柄节点:
```bash
source /opt/ros/jazzy/setup.bash
export ROS_DOMAIN_ID=10
ros2 run joy joy_node --ros-args -r joy:=/xbox_data
```
5. 启动 UDP Xbox 转发:
```bash
cd /home/meiqi/tienkung/Deploy_Tienkung
source /opt/ros/jazzy/setup.bash
export ROS_DOMAIN_ID=10
python3 udp_loopback/udp_xbox_sender.py
```
默认按键映射:
- `A -> mode_stride -> gotoWALKAMP`
- `X -> pose_home -> gotoZERO`
- `Y -> pose_hold -> gotoSTOP`
- `START -> trim_reset`
- 左摇杆 Y -> 连续前后速度
- 左摇杆 X -> 连续横移速度
- 右摇杆 X -> 连续转向速度
- 十字键左右 -> 高度增减
此时 UDP 接收结果会在接收侧被映射回现有 FSM 命令:
- `pose_home -> gotoZERO`
- `pose_hold -> gotoSTOP`
- `mode_stride -> gotoWALKAMP`
- `surge/sway/spin -> x/y/yaw speed command`
当前事件码不是原工程里的 `gotoZERO` / `gotoSTOP` / `x_speed_command` 这一套,而是:
- `pose_home`
- `pose_hold`
- `mode_stride`
- `surge_up`
- `surge_down`
- `sway_left`
- `sway_right`
- `spin_left`
- `spin_right`
- `set_surge`
- `set_sway`
- `set_spin`
- `set_lift`
- `lift_up`
- `lift_down`
- `trim_reset`
- `session_quit`