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/
相关推荐
kunlong_luo2 小时前
用 200 行 Python 搭一个全本地 RAG:一次笔记本工程师的踩坑实录
人工智能
前端7412 小时前
Cursor 被 SpaceX 盯上了:600 亿美元买的不是编辑器,是你的键盘
人工智能
俊哥V2 小时前
每日 AI 研究简报 · 2026-04-23
人工智能·ai
czkm2 小时前
AI有情绪吗?从AI夸我是写作领域大神说起
人工智能·程序员·ai编程
smileNicky2 小时前
Spring AI系列之基于MCP协议实现天气预报工具插件
人工智能·spring boot·spring
elseif1232 小时前
分组背包1
c++·学习·算法
deephub2 小时前
LLM 幻觉的架构级修复:推理参数、RAG、受约束解码与生成后验证
人工智能·python·大语言模型·ai幻觉
uzong2 小时前
最新:DeepSeek V4 国产大模型之光,万亿参数重构 AI 格局,让国产大模型迈入普惠新纪元
人工智能·后端
不做无法实现的梦~2 小时前
Linux 嵌入式开发完整入门:工具、配置和学习路线
linux·运维·学习