scan_merger
役割
scan_merger は複数の LaserScan を 1 本の仮想 scan に再投影します。入力は各 LiDAR frame、出力は frame_id parameter、通常 base_link です。
Interface
種別 |
名前 |
型 / 内容 |
|---|---|---|
subscribe |
|
|
publish |
|
|
parameter |
|
出力 frame |
parameter |
|
publish 周期 |
parameter |
|
出力 scan の角度 grid |
parameter |
|
出力 scan の距離範囲 |
出力 bin
出力 bin 数は次式です。
初期 range は全 bin で \(+\infty\) です。
入力 beam の再投影
入力 beam index \(i\) の角度は、
です。有効 range \(\rho_i\) を入力 frame の点へ変換します。
TF で出力 frame へ変換します。
出力 frame で極座標に戻します。
出力範囲に入る場合、bin index は丸めで決めます。
同じ bin では最小距離を採用します。
この最小化により、複数 LiDAR が同じ方向を見た場合も LaserScan として自然な「最初の hit」を残します。
時刻ずれ
厳密な同期は行いません。topic ごとの最新 scan を timer 周期で統合します。ロボット速度を \(v\)、scan 間の時刻ずれを \(\Delta t\) とすると、並進方向の見かけ誤差は概ね \(v\Delta t\) です。
設定ファイル
sample では example/sample/config/sensing/config.yaml の scan_merger.ros__parameters と sick_picoscan の両方が関係します。
設定元 |
key |
対応 |
|---|---|---|
|
|
picoscan 無効時の入力 scan topic 配列 |
|
|
picoscan 有効時の入力 scan topic 配列 |
|
|
|
|
|
ノード起動の有効/無効 |
picoscan が有効な場合、scan_topics は YAML の scan_merger ではなく LiDAR 定義から自動生成されます。
picoscan が無効な場合は scan_merger.ros__parameters.scan_topics を使います。sample では次です。
scan_merger:
ros__parameters:
scan_topics:
- /lidar1/scan
- /lidar2/scan
frame_id と frequency は YAML ではなく sensing.launch.py の launch argument です。default は base_link と 40.0 Hz です。angle_min/max、angle_increment、range_min/max、scan_time は launch から渡されないため、実装 default が使われます。