Skip to content

Planar LiDAR

fibril_sim/planar_lidar は instantaneous scan と rolling scan の両方を扱う planar LiDAR Device です。 sample type ID は fibril_sim/planar_lidar_sample/v1 です。

MuJoCo 側の要件

site で scan origin と orientation を指定します。 site の owning body は ray cast の自己除外に使われます。

最小設定

components:
  - id: lidar
    type: fibril_sim/planar_lidar
    config:
      site: lidar_site
      beam_count: 181
      angle_min_rad: -1.57079632679
      angle_max_rad: 1.57079632679
      range_min: 0.05
      range_max: 20.0
      period_s: 0.05

Hokuyo UTM-30LX と UST-30LC は device profile から scan geometry、range contract、nominal timing を設定できます。 UST-30LC は複数個体の実機録画で再現した range/intensity residual を generic empirical profile として追加できます。

UST-30LC本体をvisual込みで配置する場合は、package://fibril_sim_models/mujoco/sensors/hokuyo_ust_30lc.xml をMuJoCo model assetとしてattachできます。 prefix="lidar_" でattachするとmeasurement siteは lidar_site になり、既存のComponent設定からそのまま参照できます。 このMJCF moduleは筐体visualとmeasurement frameだけを持ち、scan timingやnoiseはprofile側に残します。

1
2
3
4
5
6
7
8
components:
  - id: lidar
    type: fibril_sim/planar_lidar
    config:
      site: lidar_site
      profiles:
        device: hokuyo_ust_30lc_nominal
        empirical: hokuyo_ust_30lc_empirical

*_nominal の device facet は sensor family の再利用可能な contract だけを持ちます。 hokuyo_ust_30lc_empirical は 3 個体の training/held-out で共有できた range noise、intensity-conditioned noise/dropout、return intensity residual を持ちます。 scene 固有 artifact、mounting、host/driver timing は含めません。 測定 provenance は fibril_sim_models/profiles/evidence/hokuyo_ust_30lc_empirical.md に置きます。

UTM-30LX は独立個体での再現確認が不足しているため、generic empirical profile には昇格させていません。

Device profile Beams Angle ROS range window Resolution Period Beam span
hokuyo_utm_30lx_nominal 1081 -135° to +135° 0.023 m to 60 m 1 mm 25 ms 18.75 ms
hokuyo_ust_30lc_nominal 2161 -135° to +135° 0.01 m to 60 m 1 mm 25 ms 18.75 ms

表の range window はメーカー保証精度範囲ではなく、実機 urg_node が publish した sensor_msgs/LaserScan の range_min / range_max contract です。 UST-30LC の reflectivity は可視色 geom_rgba とは分離し、Component config の相対NIR reflectivityとして指定します。 入射角、環境光、透明・鏡面材による実際の検出限界はまだ model 化しません。 Multi-Echo / glass transmission も現在の自己位置推定用途では使用しないため対象外です。

profile で設定される field は個別の config field で override できます。

Configuration の項目

Field Type Required Default Meaning
site string yes MuJoCo site name
profiles.device string no none hokuyo_utm_30lx_nominal または hokuyo_ust_30lc_nominal
profiles.empirical string no none UST-30LC では hokuyo_ust_30lc_empirical。必要なら consuming project が installed-unit profile を追加
beam_count size_t profile 未指定時 yes profile beam 数、2 以上
angle_min_rad double profile 未指定時 yes profile first beam angle
angle_max_rad double profile 未指定時 yes profile last beam angle
range_min double profile 未指定時 yes profile valid minimum range
range_max double profile 未指定時 yes profile valid maximum range
resolution double no profile または 0.0 positive の場合の range quantization step
range_error mapping no profile または zero error range error model
angular_error mapping no profile または zero error beam angle error model
detection mapping no profile または no dropout beam-level detection model
intensity mapping no UST profile または disabled return intensity / reflectivity model
period_s double profile 未指定時 yes profile scan start period
phase_s double no 0.0 acquisition phase
latency_s double no 0.0 delivery latency
jitter_s double no 0.0 delivery jitter standard deviation
loss_probability double no 0.0 whole-scan transport loss probability
quantization string no next_boundary schedule quantization
scan_mode string no profile または instantaneous instantaneous または rolling
scan_time_s double rolling かつ profile 未指定時 yes profile または 0.0 LaserScan scan_time 相当の scan start period metadata
beam_span_s double no scan_time_s または profile first beam から last beam までの実際の nominal acquisition span
raycast_geom_groups list no all groups ray cast対象に含めるMuJoCo geom group。各値は0から5、重複不可

raycast_geom_groups はscanのbeam数、角度、timing、range/noise/intensity modelを変更せず、MuJoCo ray castの対象集合だけを明示します。 例えばcamera描画のためにrender-only geomを同じmodelへ保持する構成では、物理形状を置くgroupだけを指定することでvisual meshを測距対象から除外できます。 省略時は全 geom group を対象にします。

range_error は次の field を持ちます。

Field Default Meaning
bias_m 0.0 additive range bias
noise_stddev_m 0.0 core independent Gaussian range noise standard deviation
intensity_noise_scale_lut [] [intensity, scale] のpiecewise-linear LUT。最終sigmaは noise_stddev_m * scale

angular_error は次の field を持ちます。

Field Default Meaning
bias_rad 0.0 beam angle bias applied before ray casting
noise_stddev_rad 0.0 independent Gaussian beam angle noise applied before ray casting

detection は次の field を持ちます。

Field Default Meaning
dropout_probability 0.0 hit が存在してもinvalid returnにする一様beam-level dropout probability
intensity_dropout_probability_lut [] [intensity, probability] のpiecewise-linear LUT。弱いreturnだけ欠測率を上げる
edge_depth_threshold_m 0.0 隣接するvalid beamのrange差がこの値以上ならdepth edge candidate。0で無効
edge_dropout_probability 0.0 depth edge candidateで片側1 beamをinvalidにする確率
invalid_return_value_m +inf no-hit / dropout / range-window外を表す出力値。finite値ならvalid range window外である必要がある

intensity は次の field を持ちます。

Field Default Meaning
enabled section指定時 true intensity model の有効化
max_value 0.0 intensity saturation ceiling
reference_value 0.0 reflectivity=1、reference range以下でのnominal intensity。0ならmax_valueを使用
resolution 0.0 intensity quantization step
default_reflectivity 1.0 mapping未指定geomの相対NIR return coefficient、0以上
reference_range_m 1.0 range attenuationの基準距離
range_exponent 0.0 I proportional to (reference_range/range)^exponent。0なら距離依存なし
relative_noise_stddev_lut [] [intensity, relative_sigma] のpiecewise-linear LUT
geom_reflectivity {} MuJoCo geom名から相対NIR reflectivityへのmapping

例えば次の設定では、black_panel のreturn intensityを強いtargetの10%として扱います。

1
2
3
4
5
intensity:
  geom_reflectivity:
    black_panel: 0.10
    white_wall: 0.85
    retroreflective_tape: 1.50

このreflectivityは材料の物理的なNIR反射率[%]を直接表す校正値ではなく、LiDAR return strengthを与える相対係数です。 1.0 を通常の強い拡散反射targetの基準とし、retroreflectiveな対象は1を超える値を指定できます。 geom_rgba は可視色でありLiDAR波長の反射特性とは一致しないため使用しません。

angle_max_rad は angle_min_rad より大きい必要があります。 range と noise の validation は rangefinder と同じ方向の制約を持ちます。

rolling scan では 0 < beam_span_s <= scan_time_s <= period_s である必要があります。 period_s は scan の開始周期です。 Hokuyo profile では回転周期と LaserScan scan_time は 25 msですが、publishされる270°のbeam列が占める時間は time_increment * (beam_count - 1) = 18.75 ms です。 残り6.25 msは270°の公開視野外に相当します。 beam は nominal beam time に応じて各 physics boundary へまとめられ、その boundary の site pose から ray cast されます。 したがって、scan start period が 25 ms でも途中の robot motion を physics timestep の粒度で反映します。 rolling scan の最後の公開beamを取得した時刻は acquisition_time として保持し、完成したscanは scan_time_s の境界でconsumerへ渡します。 beam_span_s < scan_time_s の場合、公開視野外の時間をread-only raycast workerの完了待ちに利用するため、最後のbeam取得直後にphysics owner threadを停止しません。 この処理は beam の取得時刻を移動せず、LaserScan の header は scan start の nominal acquisition time から生成します。

Output の形式

PlanarLidarSample は angle_min_rad、angle_increment_rad、range window、ranges_m と optional intensities を持ちます。 generic configではno-hitまたはrange window外のbeamはpositive infinityです。 Hokuyo profileではdriver出力との互換性を優先し、UST-30LCは 65.533 m、UTM-30LXは 0.001 m を代表invalid sentinelとして出力します。 どちらも range_min <= range <= range_max を満たさないため、consumerはfinite判定ではなくrange windowでvalidityを判定する必要があります。 rolling scan では scan_time_s と per-beam nominal time_increment_s も設定されます。 intensity modelが無効なら intensities は空です。 有効ならrangeと同じbeam数を持ち、no-return beamは0です。 ROS bridgeはこのvectorを sensor_msgs/LaserScan.intensities へそのまま変換します。