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/
相关推荐
武子康1 小时前
调查研究-198 Agent 到底该记住什么?读懂《What Must Generalist Agents Remember?》
人工智能·openai·agent
aqi001 小时前
15天学会AI应用开发(九)利用Chroma持久化向量数据
人工智能·python·大模型·ai编程·ai应用
武子康3 小时前
调查研究-197 FAISS vs Elasticsearch 全面对比:从向量检索、全文搜索到 RAG 选型指南
人工智能·elasticsearch·agent
青禾网络3 小时前
Web 前端如何接入 AI 音效生成:从零到可用的完整方案
人工智能·设计模式
用户252736278143 小时前
【技术实战】用 Spring Boot + Vue3 + LM Studio 在本地跑通 RAG 知识库
人工智能
用户5191495848453 小时前
VBScript随机数生成器内部机制:从时间种子到密码令牌破解
人工智能·aigc
米小虾3 小时前
Context Engineering —— 知识与记忆的窗口
人工智能·agent
IT_陈寒4 小时前
Python里这个赋值坑,连老司机都能翻车
前端·人工智能·后端
Shockang14 小时前
AI 设计工作流全景拆解:Figma MCP / Claude Design / Codex / Google Stitch
人工智能