# openarm_joint_recorder

用于录制关节位置轨迹并按记录时间回放。

## 功能

- 订阅控制器状态话题（JointTrajectoryControllerState）并录制每个采样点的时间与位置
- 通过 ROS2 service 启停录制与回放
- 轨迹保存到 YAML 文件，支持加载后回放

## 参数

- `input_topic`：录制输入话题，默认 `/left_joint_trajectory_controller/controller_state`
- `output_topic`：回放输出话题，默认 `/left_joint_trajectory_controller/joint_trajectory`
- `play_speed`：回放速度倍率，默认 `1.0`
- `loop_playback`：是否循环回放，默认 `false`
- `storage_path`：保存/加载文件路径，默认 `/tmp/openarm_joint_trajectory.yaml`

## 启动

```bash
ros2 launch openarm_joint_recorder joint_trajectory_recorder.launch.py
```

## 服务接口

- `~/set_recording` (`std_srvs/srv/SetBool`): `true` 开始录制，`false` 停止录制
- `~/play` (`std_srvs/srv/Trigger`): 开始回放
- `~/stop_playback` (`std_srvs/srv/Trigger`): 停止回放
- `~/save` (`std_srvs/srv/Trigger`): 保存轨迹到 `storage_path`
- `~/load` (`std_srvs/srv/Trigger`): 从 `storage_path` 加载轨迹
- `~/clear` (`std_srvs/srv/Trigger`): 清空内存轨迹

## 示例命令

```bash
# 开始录制
ros2 service call /joint_trajectory_recorder/set_recording std_srvs/srv/SetBool "{data: true}"

# 停止录制
ros2 service call /joint_trajectory_recorder/set_recording std_srvs/srv/SetBool "{data: false}"

# 保存
ros2 service call /joint_trajectory_recorder/save std_srvs/srv/Trigger "{}"

# 回放
ros2 service call /joint_trajectory_recorder/play std_srvs/srv/Trigger "{}"
```
