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/