feat: add session-gated TG3 data collection
This commit is contained in:
73
tg3_data_collection/README.md
Normal file
73
tg3_data_collection/README.md
Normal file
@@ -0,0 +1,73 @@
|
||||
# TG3 data episode sync
|
||||
|
||||
机器人只在 `/home/nvidia/tg3_data_collection/ready` 暴露已经收到 SIGINT、写完
|
||||
`metadata.yaml`、通过 `ros2 bag info` 并生成 SHA-256 清单的 episode。本机服务用免密 SSH/rsync 复制到
|
||||
`Data_Get/.incoming`,逐文件校验后再原子改名为 `Data_Get/<episode_id>`。中断的复制不会
|
||||
显示成完成数据,也不会删除机器人上的备份。
|
||||
|
||||
数据只走本机到 Nvidia 的 SSH 链路,与公网或 EAI 本地 OmniSocket Hub 无关。当前默认:
|
||||
|
||||
```text
|
||||
nvidia@192.168.41.2:/home/nvidia/tg3_data_collection/ready/
|
||||
-> /home/ps/Desktop/TG3_TS1P_OmniSocket_Teleop/Data_Get/
|
||||
```
|
||||
|
||||
先确认免密与依赖:
|
||||
|
||||
```bash
|
||||
ssh -o BatchMode=yes nvidia@192.168.41.2 true
|
||||
command -v rsync
|
||||
ssh nvidia@192.168.41.2 command -v rsync
|
||||
```
|
||||
|
||||
安装本机用户服务:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.config/systemd/user
|
||||
cp tg3_data_collection/tg3-data-get-sync.service ~/.config/systemd/user/
|
||||
systemctl --user daemon-reload
|
||||
systemctl --user enable --now tg3-data-get-sync.service
|
||||
```
|
||||
|
||||
状态:
|
||||
|
||||
```bash
|
||||
systemctl --user --no-pager status tg3-data-get-sync.service
|
||||
python3 -m json.tool Data_Get/sync_status.json
|
||||
```
|
||||
|
||||
也可以只执行一次,便于首次部署验收:
|
||||
|
||||
```bash
|
||||
python3 tg3_data_collection/data_get_sync.py --once
|
||||
```
|
||||
|
||||
日常轮询不会每 2 秒重新读取并哈希全部历史 MCAP;首次原子发布时已经完成深度校验。
|
||||
需要定期审计已有本地数据时单独执行(可能耗时较长):
|
||||
|
||||
```bash
|
||||
python3 tg3_data_collection/data_get_sync.py --once --verify-existing
|
||||
```
|
||||
|
||||
某个旧 episode 损坏会写入 `sync_status.json`,但不会阻止同一轮继续拉取其他新 episode。
|
||||
|
||||
一个完成目录至少包含:
|
||||
|
||||
```text
|
||||
<episode_id>/
|
||||
READY
|
||||
manifest.json
|
||||
bag/metadata.yaml
|
||||
bag/*.mcap
|
||||
ros2_bag.stdout.log
|
||||
ros2_bag.stderr.log
|
||||
```
|
||||
|
||||
同步端会再次核对 `READY`、episode ID、每个 MCAP/metadata 的长度和 SHA-256;远端
|
||||
manifest 在传输中发生变化也会拒绝发布最终目录。`.incoming`、`sync_status.json` 和全部
|
||||
episode 已由 `Data_Get/.gitignore` 排除。服务绝不自动删除机器人端 `ready/` 数据;确认
|
||||
本机备份后如需清理,必须由操作者明确指定具体 episode,不能删除整个项目目录。
|
||||
|
||||
迁移后需要同步修改 service 中的本机项目路径、机器人 SSH 地址和机器人 ready 路径。
|
||||
如果 Nvidia 的 `192.168.41.2` 改变,只改该 unit 的 `--remote`;它不在机器人
|
||||
`config.toml` 或 OmniSocket Peer 设置中。
|
||||
Reference in New Issue
Block a user