感知
感知模块通过一致的接口提供对所有机载传感器数据的访问。无论是在仿真还是硬件上运行,相同的方法返回相同格式的数据,使仿真到真实的迁移变得简单。
3we 参考平台包括:
- USB 相机 - 640x480 RGB,30 fps
- LD06 LiDAR - 360 度 2D 扫描,12 m 范围,10 Hz
- BNO055 IMU - 9 轴(加速度计、陀螺仪、磁力计),100 Hz
- OAK-D Lite(可选) - 立体深度相机,用于 RGB-D
get_camera_image()
Section titled “get_camera_image()”从 RGB 相机捕获单帧图像。
image = robot.get_camera_image()# Returns: numpy.ndarray with shape (480, 640, 3), dtype uint8, BGR color order参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
camera_id | int | 0 | 连接多个相机时的相机索引。 |
encoding | str | "bgr8" | 颜色编码。选项:"bgr8"、"rgb8"、"gray"。 |
get_lidar_scan()
Section titled “get_lidar_scan()”获取最新的 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_range | float | 12.0 | 丢弃超过此距离的点(米)。 |
min_range | float | 0.05 | 丢弃近于此距离的点(米)。 |
get_imu()
Section titled “get_imu()”读取当前 IMU 状态。
imu = robot.get_imu()# Returns: IMUReading(linear_acceleration, angular_velocity, orientation, timestamp)所有向量以机体坐标系中 (3,) 形状的 numpy.ndarray 返回。方向为四元数 (x, y, z, w)。
get_rgbd_image()
Section titled “get_rgbd_image()”捕获对齐的 RGB-D 帧(需要深度相机)。
color, depth = robot.get_rgbd_image()# color: numpy.ndarray, shape (H, W, 3), uint8# depth: numpy.ndarray, shape (H, W), float32, meters参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
align | bool | True | 将深度对齐到彩色帧。 |
max_depth | float | 5.0 | 裁剪超过此范围的深度值。 |
订阅连续数据
Section titled “订阅连续数据”对于实时管线,使用回调代替轮询:
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") 转换到机器人基座坐标系。