数据查询
get_base_data()
Python
get_base_data(key: str) -> list[float]
读取基体(躯干)的运动学数据,约 100 Hz 更新。
key 值 | 返回维度 | 说明 |
|---|---|---|
'quat_xyzw' | 4 | 姿态四元数(x, y, z, w),base → world |
'quat_wxyz' | 4 | 姿态四元数(w, x, y, z),base → world |
'rpy' | 3 | 横滚 / 俯仰 / 偏航角(rad) |
'omega_W' | 3 | 角速度,世界坐标系(rad/s) |
'omega_B' | 3 | 角速度,机体坐标系(rad/s) |
'acc_W' | 3 | 线加速度,世界坐标系(m/s²) |
'acc_B' | 3 | 线加速度,机体坐标系(m/s²) |
'vel_W' | 3 | 线速度,世界坐标系(m/s) |
'vel_B' | 3 | 线速度,机体坐标系(m/s) |
'pos_W' | 3 | 位置,世界坐标系(m) |
速度与位置存在静止偏置
GR-W 在静止(状态 0/1/3、无人操控)时,vel_B/vel_W 存在约 0.9 m/s 量级的常值偏置,pos_W 随之以约 1 m/s 漂移;omega_B/rpy 正常近零,安全保护状态(9)下偏置消失。因此:
- 不要用
vel_B的绝对值判断"机器人是否静止",也不要把pos_W当作可信的定位来源; - 速度命令是否生效可用
vel_B相对自身基线的增量判断(例如 0.05 m/s 命令的窗口内增量约 +0.05 m/s),停止与否以现场观察为准。
示例
Python
import os
import time
os.environ.setdefault("FASTDDS_BUILTIN_TRANSPORTS", "UDPv4") # 机器人上运行必须设置
from fourier_aurora_client import AuroraClient
client = AuroraClient.get_instance(domain_id=123, robot_name="grw")
try:
time.sleep(1.0) # 等待状态数据到达
rpy = client.get_base_data("rpy")
print(f"roll={rpy[0]:.3f}, pitch={rpy[1]:.3f}, yaw={rpy[2]:.3f}")
finally:
client.close()
get_true_data()
Python
get_true_data(key: str) -> list[float]
读取 true_data_pub 中的真值数据。
key 值 | 说明 |
|---|---|
'vel_B' | 线速度,机体坐标系(m/s) |
'vel_W' | 线速度,世界坐标系(m/s) |
'pos_W' | 位置,世界坐标系(m) |
'contact_fz' | 各脚接触法向力(N) |
'contact_prob' | 各脚接触概率 [0, 1] |
GR-W 当前限制
当前 GR-W 部署中,vel_B、vel_W 和 pos_W 返回零向量,contact_fz 和 contact_prob 返回空数组;这些字段尚不能作为 GR-W 的实时机体或接触数据使用。读取机体位姿和速度请使用 get_base_data()。
get_contact_data()
Python
get_contact_data(key: str) -> list[float]
读取 contact_data_pub 的接触数据。
key 值 | 说明 |
|---|---|
'contact_force' | 各脚接触力(N) |
'contact_prob' | 各脚接触概率 [0, 1] |
GR-W 当前限制
GR-W 没有双足接触语义。当前部署中 contact_force 返回 12 个零值,contact_prob 返回 2 个数值;它们不应被解释为脚部接触状态,也不应用于安全或运动决策。
示例
Python
import os
import time
os.environ.setdefault("FASTDDS_BUILTIN_TRANSPORTS", "UDPv4") # 机器人上运行必须设置
from fourier_aurora_client import AuroraClient
client = AuroraClient.get_instance(domain_id=123, robot_name="grw")
try:
time.sleep(1.0) # 等待状态数据到达
force = client.get_contact_data("contact_force")
prob = client.get_contact_data("contact_prob")
print(f"contact force: {force}, prob: {prob}")
finally:
client.close()
get_cartesian_state()
Python
get_cartesian_state(group_name: str, key: str = 'pose') -> list[float]
读取指定末端执行器的笛卡尔状态。
| 参数 | 类型 | 说明 |
|---|---|---|
group_name | str | 关节组名称(如 "left_manipulator") |
key | str | 状态类型,见下表 |
key 值 | 说明 |
|---|---|
'pose' | 末端位姿(位置 + 四元数),默认 |
'twist' | 末端速度(线速度 + 角速度) |
'wrench' | 末端力/力矩 |
当前 GR-W 的左右机械臂会发布 pose(7 个元素)和 twist(6 个元素);wrench 当前返回空数组。请在使用前检查返回长度,不要假设力/力矩数据已提供。
示例
Python
import os
import time
os.environ.setdefault("FASTDDS_BUILTIN_TRANSPORTS", "UDPv4") # 机器人上运行必须设置
from fourier_aurora_client import AuroraClient
client = AuroraClient.get_instance(domain_id=123, robot_name="grw")
try:
time.sleep(1.0) # 等待状态数据到达
pose = client.get_cartesian_state("left_manipulator", key="pose")
print(f"left end-effector pose: {pose}")
finally:
client.close()