VR端基本操作指南
一、设备介绍
Pico4 Ultra外观和按键说明
1、佩戴调节旋钮:操作者佩戴VR头显,调节旋钮适配操作者头部大小

2、开机和音量键:下图红色框为开机键,长按开机;绿色框为音量调节按钮。

3、手柄按键说明

二、设备连网
点击右手手柄Home键,唤醒菜单页面,在控制中心中点击WIFI设置,可以将设备连网。

三、APP基本操作
3.1 启动
点击Home键唤出菜单,随后扣动扳机选择菜单栏中的资源库,扣动扳机启动APP程序BlackEyeVision



3.2 登录页面
1、启动后默认界面是登录页面,可以使用管理员创建的账号登录,也可以使用用户手机号注册的账号登录

2、如果使用管理员创建的账号登录,在下图中自由体系账号选择开启;如果使用手机号直接注册的账号登录,自由体系账号选择关闭

3、 局域网直接发现设备,在下图中选择局域网查询,同一个局域网设备会自动被发现上来

3.3 设备列表页面

1、显示公网和局域网设备,点击设备跳转到设备控制页面;
2、点击头像进入个人信息详情页面;
3、位置按钮:打开MR混合模式,外部场景会加载到app场景内部;
4、刷新按钮:点击刷新设备数据;
5、添加按钮:点击绑定新设备(只适用于非自由体系账号);
6、机器狗:点击进行机器人和机器狗模式切换;机器狗模式下才可遥操机器狗;机器人模式下发送位姿数据
3.4 设备控制页面
机器狗模式

机器人模式

从左到右,从上到下依次为:
1、显示设备名称;
2、数据通道(机器人模式):是否发送头显,手柄的位姿和操作数据到服务器端;
3、跟随按钮:点击跟随头显位置;
4、双向语音按钮:点击开启双向语音;vr端和设备端进行双向语音通话;
5、截图按钮:点击截图视频画面保存在本地;
6、录屏按钮:点击录取视频画面保存在本地;
7、视频切换按钮:进行多路视频源显示和取消显示操作;
8、设置按钮:进行多种指令的相关操作;
9、网络状态显示;
10、设备在线状态显示;
11、信息开关按钮:显示视频源的相关信息;
12、起立按钮(机器狗模式):点击起立和蹲下;
13、急停按钮(机器狗模式):点击机器狗进行断电模式(慎用)
3.5 个人信息页面

1、个人资料显示和编辑;进入个人资料编辑:修改头像和昵称;注销账号;
2、设备分享:可查看可分享的设备和分享设备给指定的用户;
3、退出账号
3.6 使用手柄进行机器狗的运动控制
机器狗模式下的按键说明
| VR手柄 | 功能 | 示意图 |
|---|---|---|
| 左摇杆前后 | 前进后退 | ![]() |
| 左摇杆左右 | 左移右移 | ![]() |
| 右摇杆左右 | 左转右转 | ![]() |
| X/A按下弹起 | 起立 | |
| Y/B按下弹起 | 坐下 | |
| 右手部扳机按住弹起 | 双击退出沉浸模式,显示UI面板 | ![]() |
四、其他服务说明
4.1 人型机器人拓展安装包
安装包名称:cockpit_package_fk.tar.gz
(拓展安装包请联系当虹技术支持人员获取)
上传并解压安装包到设备后,执行一键安装脚本
sudo ./install_cockpit.sh
4.2 数据监听服务
目前通过监听指定的端口获取PICO端发送的数据,监听的端口为127.0.0.1:5560;
查看设备的接收的数据
tail -f /userdata/arcvideo/robotEngine/logs/cockpit_application.log
日志内容:

4.3 机器人模式下:人形机器人通讯数据格式
4.3.1 采集头部和手柄的位姿数据:
每帧数据格式为:

数据内容详解:
1、头显位姿
| P1 | P2 | P3 | P4 | P5 | P6 | P7 |
|---|---|---|---|---|---|---|
| x轴位置 | y轴位置 | z轴位置 | 四元数w | 四元数x | 四元数y | 四元数z |
2、左手位姿(定义同头显位姿)
3、右手位姿(定义同头显位姿)
4、左手柄按键(8个值)
| B1 | B2 | B3 | B4 | T1 | T2 | T3 | T4 |
|---|---|---|---|---|---|---|---|
| A/X键 | B/Y键 | 菜单键 | 摇杆键值 | 抓握键 | 板机键 | 摇杆x方向 | 摇杆y方向 |
5、左手柄按键(定义同左手柄按键,其中B3赋值为1,不关联按键)
6、时间戳(1个double):VR头显发送数据的时间戳
7、校验和(1个uint32)
CRC32校验和,用于数据完整性验证
坐标系使用OpenXR中的定义,手柄位姿选取前端坐标系
4.3.2 全身骨骼数据,需要配合Pico的动捕设备
{
"body_joints_pose": [...],
"timestamp_ns": 123456789,
"left_trigger": 0.0,
"right_trigger": 0.0,
"left_grip": 0.0,
"right_grip": 0.0,
"left_menu_button": false,
"right_menu_button": false,
"left_axis": [0.0,0.0],
"right_axis": [0.0,0.0],
"A_button": false,
"B_button": false,
"X_button": false,
"Y_button": false,
"left_axis_click": false,
"right_axis_click": false
}
| body_joints_pose | timestamp_ns | left_trigger | right_trigger | left_grip | right_grip | left_menu_button | right_menu_button |
|---|---|---|---|---|---|---|---|
| 24个骨骼节点 | 时间戳 | 左手扳机键 | 右手扳机键 | 左手抓握键 | 右手抓握键 | 左手菜单键 | 无;默认值 |
| left_axis | right_axis | A_button | B_button | X_button | Y_button | left_axis_click | right_axis_click |
|---|---|---|---|---|---|---|---|
| 左摇杆 | 右摇杆 | 右手A | 右手B | 左手X | 左手Y | 左摇杆按下 | 右摇杆按下 |
1、body_joints_pose
数据类型:float[24][7] 表示24个骨骼节点。
每个节点:[x,y,z,qx,qy,qz,qw] 含义同头显位姿
骨骼索引定义
public enum BodyTrackerRole
{
Pelvis = 0, // 骨盆
LEFT_HIP = 1, // 左侧臀部
RIGHT_HIP = 2, // 右侧臀部
SPINE1 = 3, // 脊柱
LEFT_KNEE = 4, // 左腿膝盖
RIGHT_KNEE = 5, // 右腿膝盖
SPINE2 = 6, // 脊柱
LEFT_ANKLE = 7, // 左脚踝
RIGHT_ANKLE = 8, // 右脚踝
SPINE3 = 9, // 脊柱
LEFT_FOOT = 10, // 左脚
RIGHT_FOOT = 11, // 右脚
NECK = 12, // 颈部
LEFT_COLLAR = 13, // 左侧锁骨
RIGHT_COLLAR = 14, // 右侧锁骨
HEAD = 15, // 头部
LEFT_SHOULDER = 16, // 左肩膀
RIGHT_SHOULDER = 17, // 右肩膀
LEFT_ELBOW = 18, // 左手肘
RIGHT_ELBOW = 19, // 右手肘
LEFT_WRIST = 20, // 左手腕
RIGHT_WRIST = 21, // 右手腕
LEFT_HAND = 22, // 左手
RIGHT_HAND = 23 // 右手
}
2、时间戳,VR头显发送数据的时间戳
数据类型:int64
3、左手Trigger
数据类型:float
4、右手Trigger
数据类型:float
5、left_grip
数据类型:float
6、right_grip
数据类型:float
7、left_menu_button
数据类型:bool
8、right_menu_button
数据类型:bool
9、left_axis
数据类型:float[2]
内容:[x,y] 范围:-1.0 ~ +1.0
10、right_axis 数据类型 同上
11、ABXY按键
数据类型:bool
12、left_axis_click
数据类型:bool
13、right_axis_click
数据类型:bool



