射线投射传感器#
RaycasterSensor 提供基于射线的距离测量,可用于 LIDAR 仿真、接近传感和障碍物检测。
概述#
射线投射传感器:
从连杆的坐标系向场景中投射射线
返回与几何体相交的距离
支持可配置的射线模式(线性、平面、自定义)
使用 GPU 加速的 BVH 遍历高效计算
用法#
import genesis as gs
gs.init()
scene = gs.Scene()
robot = scene.add_entity(gs.morphs.URDF(file="robot.urdf"))
scene.add_entity(gs.morphs.Box(pos=(2, 0, 0.5))) # 障碍物
scene.build()
# 添加射线投射传感器(使用 Lidar 选项)
lidar = scene.add_sensor(
gs.sensors.Lidar(
link=robot.get_link("sensor_link"),
)
)
# 仿真循环
for i in range(100):
scene.step()
# 获取距离数据
ranges = lidar.get_data() # (n_rays,) 距离数组
print(f"Min range: {ranges.min():.2f} m")
配置#
gs.sensors.Raycaster(
link=link, # 附加传感器的 RigidLink
n_rays=360, # 投射的射线数量
min_range=0.1, # 最小检测范围 (m)
max_range=10.0, # 最大检测范围 (m)
pattern="circular", # 射线模式类型
# 角度范围(用于圆形/线性模式)
fov_horizontal=360.0, # 水平视场角 (度)
fov_vertical=0.0, # 垂直视场角 (度)
# 相对于连杆坐标系的位置偏移
offset_pos=(0, 0, 0),
offset_quat=(0, 0, 0, 1),
)
射线模式#
圆形(2D LIDAR)#
lidar_2d = robot.add_sensor(
gs.sensors.Raycaster(
link=base,
n_rays=360,
pattern="circular",
fov_horizontal=360.0,
)
)
平面(3D LIDAR)#
lidar_3d = robot.add_sensor(
gs.sensors.Raycaster(
link=base,
n_rays=16 * 360, # 16 个垂直层
pattern="planar",
fov_horizontal=360.0,
fov_vertical=30.0,
)
)
自定义模式#
import numpy as np
# 定义自定义射线方向
rays = np.array([
[1, 0, 0], # 前方
[0, 1, 0], # 左方
[-1, 0, 0], # 后方
[0, -1, 0], # 右方
])
sensor = robot.add_sensor(
gs.sensors.Raycaster(
link=base,
ray_directions=rays,
)
)
输出格式#
输出 |
形状 |
描述 |
|---|---|---|
|
|
到交点的距离(无碰撞时为 max_range) |
|
|
有效相交的布尔掩码 |
性能#
Raycaster 使用 GPU 加速的线性 BVH(LBVH)进行高效的射线-场景相交计算:
随场景复杂度扩展良好
可高效处理数百至数千条射线
在并行环境中批处理
API 参考#
另请参阅#
Sensors - 传感器概述
相机 (Camera) - 视觉传感