119 lines
2.7 KiB
Markdown
119 lines
2.7 KiB
Markdown
# 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`
|