IMU 传感器#
IMUSensor(惯性测量单元)提供用于机器人状态估计的加速度计和陀螺仪读数。
概述#
IMU 传感器测量:
线加速度:包含重力在内的 3D 加速度
角速度:3D 旋转速度
方向:当前方向(可选)
用法#
import genesis as gs
gs.init()
scene = gs.Scene()
robot = scene.add_entity(gs.morphs.URDF(file="quadruped.urdf"))
scene.build()
# 添加 IMU 到机器人基座
imu = scene.add_sensor(
gs.sensors.IMU(
link=robot.get_link("base_link"),
)
)
# 仿真循环
for i in range(1000):
scene.step()
# 获取 IMU 读数
data = imu.get_data()
accel = data.linear_acceleration # (3,) 加速度,单位 m/s^2
gyro = data.angular_velocity # (3,) 角速度,单位 rad/s
配置#
gs.sensors.IMU(
link=link, # 附加传感器的 RigidLink
frame="local", # 参考坐标系:"world" 或 "local"
# 加速度计参数
accel_noise_density=0.0, # 噪声密度 (m/s^2/sqrt(Hz))
accel_random_walk=0.0, # 随机游走 (m/s^3/sqrt(Hz))
accel_bias_correlation_time=0.0, # 偏置相关时间 (s)
# 陀螺仪参数
gyro_noise_density=0.0, # 噪声密度 (rad/s/sqrt(Hz))
gyro_random_walk=0.0, # 随机游走 (rad/s^2/sqrt(Hz))
gyro_bias_correlation_time=0.0, # 偏置相关时间 (s)
)
噪声建模#
IMU 支持基于 Allan 方差参数的真实噪声建模:
加速度计噪声#
参数 |
描述 |
典型值 |
|---|---|---|
|
白噪声 |
0.001-0.01 m/s^2/sqrt(Hz) |
|
偏置不稳定性 |
0.0001-0.001 m/s^3/sqrt(Hz) |
陀螺仪噪声#
参数 |
描述 |
典型值 |
|---|---|---|
|
白噪声 |
0.0001-0.001 rad/s/sqrt(Hz) |
|
偏置不稳定性 |
0.00001-0.0001 rad/s^2/sqrt(Hz) |
示例:四足机器人状态估计#
import genesis as gs
import numpy as np
gs.init()
scene = gs.Scene()
quadruped = scene.add_entity(gs.morphs.URDF(file="go2.urdf"))
scene.build()
# 添加带有真实噪声的 IMU
imu = scene.add_sensor(
gs.sensors.IMU(
link=quadruped.get_link("base"),
)
)
# 状态估计循环
velocity_estimate = np.zeros(3)
dt = scene.dt
for i in range(1000):
scene.step()
data = imu.get_data()
# 简单积分(实际系统使用卡尔曼滤波)
velocity_estimate += data.linear_acceleration * dt