Pika数据采集与处理

1. 数据采集

以下涉及到遥操作的数据采集代码都为两个pika sense以及两个pika gripper的情况

1.1 启动软件

根据设备实际情况选择命令启动设备

|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------|
| 1个sensor | cd ~/pika_ros/scripts/ && bash start_single_sensor.bash |
| 1个gripper | cd ~/pika_ros/scripts/ && bash start_single_gripper.bash |
| 2个sensor | cd ~/pika_ros/scripts/ && bash start_multi_sensor.bash |
| 2个gripper | cd ~/pika_ros/scripts/ && bash start_multi_gripper.bash |
| 1个sensor 1个gripper | cd ~/pika_ros/scripts/ && bash start_sensor_gripper.bash |
| 2个sensor 2个gripper | cd ~/pika_ros/scripts/ && bash start_multi_sensor.bash sensor cd ~/pika_ros/scripts/ && bash start_multi_gripper.bash gripper sensor |

启动代码后,rviz界面中显示 pika 的tf坐标

1.2 数据采集

注意:本小节遥操数采必须搭配 pika gripper 使用

软件启动完成后,运行以下命令进行数据采集。

其中datasetDir参数为数据目录;episodeIndex参数为数据组别,每组数据递增方式,0即第0组

bash 复制代码
source ~/pika_ros/install/setup.bash 
roslaunch data_tools run_data_capture.launch type:=single_pika datasetDir:=$HOME/agilex/data episodeIndex:=0  # 单夹持器
roslaunch data_tools run_data_capture.launch type:=multi_pika datasetDir:=$HOME/agilex/data episodeIndex:=0  # 双夹持器
roslaunch data_tools run_data_capture.launch type:=single_pika_teleop datasetDir:=$HOME/agilex/data episodeIndex:=0  # 单夹持器遥操作
roslaunch data_tools run_data_capture.launch type:=multi_pika_teleop datasetDir:=$HOME/agilex/data episodeIndex:=0  # 双夹持器遥操作

若想使用双击开启数据采集的情况,请在roslaunch data_tools run_data_capture.launch 后添加参数 useService:=true,如:

bash 复制代码
source ~/pika_ros/install/setup.bash 
roslaunch data_tools run_data_capture.launch useService:=true type:=single_pika datasetDir:=$HOME/agilex/data episodeIndex:=0  # 单夹持器
roslaunch data_tools run_data_capture.launch useService:=true type:=multi_pika datasetDir:=$HOME/agilex/data episodeIndex:=0  # 双夹持器
roslaunch data_tools run_data_capture.launch useService:=true type:=single_pika_teleop datasetDir:=$HOME/agilex/data episodeIndex:=0  # 单夹持器遥操作
roslaunch data_tools run_data_capture.launch useService:=true type:=multi_pika_teleop datasetDir:=$HOME/agilex/data episodeIndex:=0  # 双夹持器遥操作

若采集程序成功开启,终端显示如下:

XML 复制代码
path: /home/agilex/data/episode0
total time: 7.0014 
topic: frame in 1 second / total frame 
/camera/color/image_raw: 0 / 165 
/camera_fisheye/color/image_raw: 0 / 0 
/camera/depth/image_rect_raw: 0 / 165 
/pika_pose: 0 / 0 
/gripper/data: 0 / 367 
sum total frame: 1229 

请在采集过程中确保每个话题的"frame in 1 second"符合传感器数据频率。

按下Enter按钮结束采集,显示如下为采集结束

XML 复制代码
Done 
[data_tools_dataCapture-1] process has finished cleanly 
log file: /home/noetic/.ros/log/21114750-1995-11ef-b6f1-578b5ce9ba2e/data_tools_dataCapture-1*.log 
all processes on machine have died, roslaunch will exit 
shutting down processing monitor... 
... shutting down processing monitor complete 
done

若出现程序中断无法运行的情况,请使用下述指令检查话题频率,并尝试拔插 usb 设备重新运行

bash 复制代码
rostopic hz {终端显示的需要检查的话题}

保存数据目录:

2. 数据处理

2.1 数据同步

运行以下命令进行数据同步。其中datasetDir参数为数据目录;episodeIndex参数为需要同步数据的组别,若为-1则同步datasetDir目录下的所有数据组\

bash 复制代码
source ~/pika_ros/install/setup.bash 
roslaunch data_tools run_data_sync.launch type:=single_pika datasetDir:=$HOME/agilex/data/ episodeIndex:=-1  # 单夹持器
roslaunch data_tools run_data_sync.launch type:=multi_pika datasetDir:=$HOME/agilex/data/ episodeIndex:=-1  # 双夹持器
roslaunch data_tools run_data_sync.launch type:=single_pika_teleop datasetDir:=$HOME/agilex/data/ episodeIndex:=-1  # 单夹持器遥操作
roslaunch data_tools run_data_sync.launch type:=multi_pika_teleop datasetDir:=$HOME/agilex/data/ episodeIndex:=-1  # 双夹持器遥操作

同步完成之后,将在每个特定数据路径中生成一个sync.txt文件。例如,图像数据同步索引文件路径:/home/agilex/data/episode0/camera/color/pikaDepthCamera/sync.txt

以pikaDepthCamera的RGB数据为例子,其sync.txt文件如下所示。其中包含了文件名,各个传感器同步后的sync.txt行数一致,为同步后的结果

2.2 数据转换

2.2.1 数据转换HDF5

直接转换HDF5:

bash 复制代码
cd ~/pika_ros/scripts
pip3 install numpy==1.21.6 --upgrade --user #(可选,当numpy版本小于1.21.6时)
python3 data_to_hdf5.py --type single_pika --datasetDir $HOME/agilex/data/ --useCameraPointCloud ""  # 单夹持器
python3 data_to_hdf5.py --type multi_pika --datasetDir $HOME/agilex/data/ --useCameraPointCloud ""  # 双夹持器
python3 data_to_hdf5.py --type single_pika_teleop --datasetDir $HOME/agilex/data/ --useCameraPointCloud ""  # 单夹持器遥操作
python3 data_to_hdf5.py --type multi_pika_teleop --datasetDir $HOME/agilex/data/ --useCameraPointCloud ""  # 双夹持器遥操作

若使用点云,先进行点云转换:

bash 复制代码
cd ~/pika_ros/scripts
pip3 install numpy==1.21.6 --upgrade --user #(可选,当numpy版本小于1.21.6时)
python3 camera_point_cloud_filter.py --type single_pika --datasetDir $HOME/agilex/data/  # 单夹持器
python3 camera_point_cloud_filter.py --type multi_pika --datasetDir $HOME/agilex/data/  # 双夹持器
python3 camera_point_cloud_filter.py --type single_pika_teleop --datasetDir $HOME/agilex/data/  # 单夹持器遥操作
python3 camera_point_cloud_filter.py --type multi_pika_teleop --datasetDir $HOME/agilex/data/  # 双夹持器遥操作

之后,转换HDF5:

bash 复制代码
cd ~/pika_ros/scripts
python3 data_to_hdf5.py --type single_pika --datasetDir $HOME/agilex/data/  # 单夹持器
python3 data_to_hdf5.py --type multi_pika --datasetDir $HOME/agilex/data/  # 双夹持器
python3 data_to_hdf5.py --type single_pika_teleop --datasetDir $HOME/agilex/data/  # 单夹持器遥操作
python3 data_to_hdf5.py --type multi_pika_teleop --datasetDir $HOME/agilex/data/  # 双夹持器遥操作

data.hdf5文件包含同步的图像路径索引、位姿数据等

2.3 数据重播

请确保数据已经完成同步。

运行以下命令以读取sync.txt的方式进行数据重播。其中datasetDir参数为数据目录;episodeIndex参数为需要重播的数据组别

bash 复制代码
source ~/pika_ros/install/setup.bash
roslaunch data_tools run_data_publish.launch type:=single_pika datasetDir:=$HOME/agilex/data/ episodeIndex:=0  # 单夹持器
roslaunch data_tools run_data_publish.launch type:=multi_pika  datasetDir:=$HOME/agilex/data/ episodeIndex:=0  # 双夹持器
roslaunch data_tools run_data_publish.launch type:=single_pika_teleop datasetDir:=$HOME/agilex/data/ episodeIndex:=0  # 单夹持器遥操作
roslaunch data_tools run_data_publish.launch type:=multi_pika_teleop  datasetDir:=$HOME/agilex/data/ episodeIndex:=0  # 双夹持器遥操作

若数据已经生成HDF5,也可采用以下命令以读取HDF5的方式进行数据重播。其中datasetDir参数为数据目录;episodeName 参数为需要重播的数据文件夹名称

bash 复制代码
cd ~/pika_ros/scripts
python3 data_publish.py --type single_pika --datasetDir $HOME/agilex/data/ --episodeName episode0  # 单夹持器
python3 data_publish.py --type multi_pika --datasetDir $HOME/agilex/data/ --episodeName episode0  # 双夹持器
python3 data_publish.py --type single_pika_teleop --datasetDir $HOME/agilex/data/ --episodeName episode0  # 单夹持器遥操作
python3 data_publish.py --type multi_pika_teleop --datasetDir $HOME/agilex/data/ --episodeName episode0  # 双夹持器遥操作

重播的数据将以话题的形式重新发布,可以通过订阅话题进行查看

2.4 数据加载

在训练过程中加载数据

提供一个加载数据的示例,可以参照~/pika_ros/scripts/load_data_example.py文件进行修改,运行以下命令测试加载数据。其中datasetDir参数为数据目录

bash 复制代码
python3 load_data_example.py --datasetDir $HOME/agilex/data/
相关推荐
Xxtaoaooo8 分钟前
用 JiuwenSwarm 搭建论文写作 Agent 团队:文献检索、大纲生成、语法润色与引用格式避坑
人工智能·论文写作·智能体·jiuwenswarm·agent 团队
nashane8 分钟前
HarmonyOS 6学习:Web组件同层渲染事件处理与智能长截图实现
前端·学习·harmonyos·harmonyos 5
云边云科技_云网融合15 分钟前
企业出海的 “数字丝绸之路“:SD-WAN 如何重构全球网络竞争力
大数据·运维·网络·人工智能
nashane28 分钟前
HarmonyOS 6学习:Web组件同层渲染触摸事件与长截图拼接实战
前端·学习·harmonyos·harmonyos 5
超级架构师29 分钟前
Huiwen Han — Preprints Public Inventory v10.15
人工智能
189228048611 小时前
NV243美光MT29F32T08GWLBHD6-24QJES:B
大数据·服务器·人工智能·科技·缓存
stars-he1 小时前
基于 Python 的 DTMF 双音多频信号识别实验
学习·dsp开发
z小猫不吃鱼1 小时前
02 Transformer 基础:Self-Attention 原理详解
人工智能·深度学习·transformer
是Dream呀1 小时前
vLLM适配昇腾NPU:DeepSeek-V3 PD分离部署完整流程
人工智能
Java后端的Ai之路1 小时前
CodeBuddy-Rules配置
人工智能·python·ai编程