跳转到内容

感知

感知模块通过一致的接口提供对所有机载传感器数据的访问。无论是在仿真还是硬件上运行,相同的方法返回相同格式的数据,使仿真到真实的迁移变得简单。

3we 参考平台包括:

  • USB 相机 - 640x480 RGB,30 fps
  • LD06 LiDAR - 360 度 2D 扫描,12 m 范围,10 Hz
  • BNO055 IMU - 9 轴(加速度计、陀螺仪、磁力计),100 Hz
  • OAK-D Lite(可选) - 立体深度相机,用于 RGB-D

从 RGB 相机捕获单帧图像。

image = robot.get_camera_image()
# Returns: numpy.ndarray with shape (480, 640, 3), dtype uint8, BGR color order

参数:

参数类型默认值描述
camera_idint0连接多个相机时的相机索引。
encodingstr"bgr8"颜色编码。选项:"bgr8""rgb8""gray"

获取最新的 2D LiDAR 扫描数据。

scan = robot.get_lidar_scan()
# Returns: LaserScan(ranges, angles, timestamp)
# ranges: numpy.ndarray of float32, shape (N,), in meters
# angles: numpy.ndarray of float32, shape (N,), in radians

参数:

参数类型默认值描述
max_rangefloat12.0丢弃超过此距离的点(米)。
min_rangefloat0.05丢弃近于此距离的点(米)。

读取当前 IMU 状态。

imu = robot.get_imu()
# Returns: IMUReading(linear_acceleration, angular_velocity, orientation, timestamp)

所有向量以机体坐标系中 (3,) 形状的 numpy.ndarray 返回。方向为四元数 (x, y, z, w)

捕获对齐的 RGB-D 帧(需要深度相机)。

color, depth = robot.get_rgbd_image()
# color: numpy.ndarray, shape (H, W, 3), uint8
# depth: numpy.ndarray, shape (H, W), float32, meters

参数:

参数类型默认值描述
alignboolTrue将深度对齐到彩色帧。
max_depthfloat5.0裁剪超过此范围的深度值。

对于实时管线,使用回调代替轮询:

def on_scan(scan):
print(f"Got {len(scan.ranges)} points")
robot.subscribe("lidar", on_scan)

可用主题:"lidar""camera""imu""rgbd"

所有传感器数据默认在传感器自身坐标系中返回。使用 robot.transform(data, target_frame="base_link") 转换到机器人基座坐标系。