前回は4足歩行ロボットの姿勢制御について学びました。

LiDAR(レーザ距離センサ)の基礎と利用

1. LiDAR(ライダー)とは?
LiDAR(Light Detection And Ranging)は
レーザー光を照射 → 距離を測定 するセンサです。
◆ どうやって距離を測る?
- センサがレーザー光を発射
- 物体に当たって反射
- 帰ってくるまでの時間(Time of flight)を測定
- 距離=「光速 × 時間 / 2」から計算
→「物体までの距離」と「方向」がわかる
◎ 360度回転できるモデルは
周囲の障害物を全方向で測定可能
2. DOGZILLA に搭載されている LiDAR
DOGZILLA S2 には
MS200シリーズのLiDAR が搭載されています。
| 特徴 | 説明 |
|---|---|
| 最大測距 12m | かなり広い範囲を検出可能 |
| 360°スキャン | 周囲全方向を測定 |
| 高速スキャン | 移動中も利用可能 |
| コンパクト | DOGZILLAに搭載しやすい |
3. LiDARから取得できるデータ
LiDARは ROS2 上で
/scan トピックとして配信されます。
/scan の内容
| 内容 | 説明 |
|---|---|
| angle_min | 計測開始角度(例:0°) |
| angle_max | 計測最終角度(例:360°) |
| ranges[] | 距離データ配列(単位 m) |
| intensities[] | 反射強度(物体の材質で変化) |
ranges 配列
→ たとえば360点なら
1°ごとの距離が格納されるイメージです。
4. LiDAR用ノードの起動
基本的にこのロボットではROS2で以下の bringup を行うことでLiDARノードも起動できます。
ros2 launch bringup Navigation_bringup.launch.py起動後に以下のコマンドを別のターミナルで実行すると配信されているトピックを確認できます。
ros2 topic list以下のようなトピックが配信されていることがわかります。
ros2 topic list
/cmd_vel
/imu/data_raw_self
/joint_states
/parameter_events
/robot_description
/rosout
/scan
/tf
/tf_static中身は以下のコマンドで確認できます。
ros2 topic echo /scanGUIで確認したければRviz2で確認してみましょう。
rviz2- Add → LaserScan
- Topic に
/scanを指定 - Fixed Frame→base footprint
→ 360度の距離が点群として見えます

障害物回避
LiDAR(レーザ距離センサ)を使って
周囲の障害物を検知し、自動で回避行動をとる仕組みを学びます。
LiDARは前章で説明したように、360°の距離データを取得できます。
このデータを使えば、ロボットの前方に「壁」「人」「物体」があるかを判断し、
止まる・方向を変えるといった動作を自律的に行えます。
まずはbringupを起動します。
ros2 launch bringup Navigation_bringup.launch.py次に障害物回避ノードを起動します。
ros2 run yahboom_laser laser_Avoidance_xgo_RS200起動すると、ターミナルに
“Start it.”
のようなログが表示されます。
障害物回避プログラムは
デフォルトではオフ(Switch=False) のため動作しません。
3つ目のターミナルでパラメータを変更できるGUIを起動します。
ros2 run rqt_reconfigure rqt_reconfigure
Switchに✓を入れるとロボットが動き出します。
このGUIではほかに、
ResponseDist(障害物距離)
linear(前進速度)
angular(旋回速度)
LaserAngle(観測角度)
の値を調整できます。
LiDAR の /scan を読み取り:
- 右側に一定数以上の近距離点 → 右に障害物
- 左側 → 左に障害物
- 正面 → 前方に障害物
という判定を行い、
状況に応じて /cmd_vel を出力します。
例:
- 前が空いている → 前進
- 前が近い → 左 or 右に回避
- 左右も近い → 一旦後退 → 再判定
課題15
こちらの障害物回避のプログラムのソースを確認し、プログラムのアルゴリズムの内容を説明してください。
/root/yahboomcar_ws/src/yahboom_laser/yahboom_laser/laser_Avoidance_xgo_RS200.py
LiDAR Trackin(LiDAR 追従)
LiDAR Tracking とは、
LiDAR が検知した “もっとも近い物体” の方向を検出し、
DOGZILLA をその方向へ向かわせたり、
対象に追従する動作を実現するものです。
この機能は LiDAR の /scan 情報から
- いちばん近い物体の方向(角度)
- その物体までの距離
を計算し、
- 物体の方向へ旋回
- 適度な距離を維持しつつ前進する
といった動作を実現します。
障害物回避の「避ける」に対して、
LiDAR Tracking は「追いかける」機能に相当します。
まずはbringupを起動します。
ros2 launch bringup Navigation_bringup.launch.py次にRadar Tracking ノードを起動します。
ros2 run yahboom_laser laser_Tracke_RS200Radar Tracking は Switch=False のままでは動きません。
別ターミナルでGUIを起動します。
ros2 run rqt_reconfigure rqt_reconfigureswitchにチェックを入れると動きます。

| パラメータ | 意味 | 設定 |
|---|---|---|
| Switch | 自律追従のON/OFF | ✔にする |
| ResponseDist | 追従したい距離 | 例:0.5〜1.0 |
| linear | 前進スピード | 0.2〜0.5 |
| angular | 旋回スピード | 0.5〜1.0 |
| LaserAngle | 探す角度範囲 | 30〜60° |
動作は以下の通りです。
手を正面にかざす
→ DOGZILLA が前進しながら距離調整
手を左に動かす
→ DOGZILLA が左旋回して追いかける
後ろに下げる
→ DOGZILLA が距離を詰めてくる
課題16
こちらのLiDAR Trackinのプログラムのソースを確認し、プログラムのアルゴリズムの内容を説明してください。
/root/yahboomcar_ws/src/yahboom_laser/yahboom_laser/laser_Tracker_xgo_RS200.py
Lidar Guard(警備モード)
この章では DOGZILLA の 「Lidar Guard(警備モード)」 を学びます。
Lidar Guard の動作イメージ
- LiDAR が最も近い物体を検出する
- 物体が横に動くとき、ロボットも同じ方向に向きを変える
- 物体がロボットに近づき、設定した距離よりも近くなるとアラーム音を鳴らす
- 物体が遠ざかるとアラームは止む
「不審者が近づきすぎたら警告する見張りモード」
を実現する機能です。
まずはbringupを起動します。
ros2 launch bringup Navigation_bringup.launch.py次に警備モード(Lidar Guard)を起動します。
ros2 run yahboom_laser laser_Warning_RS200起動しただけでは動きません。
必ず動的パラメータで Switch を有効化します。
別ターミナルで以下を実行します。
ros2 run rqt_reconfigure rqt_reconfigure
| パラメータ | 意味 | 推奨値 |
|---|---|---|
| Switch | 警備モード ON/OFF | ✔ ON |
| ResponseDist | ブザーを鳴らす距離 | 0.4〜1.0 など |
| LaserAngle | 監視する左右角度 | 30〜60° |
| angular | 旋回スピード | 0.5〜1.0 |
前に立って近づいてみる
→ 距離が近づくとブザーが鳴る
左右に移動してみる
→ ロボットが向きを合わせて追従
ResponseDist を変えてみる
→ 警告が鳴るタイミングが変わる
課題17
こちらのLidar Guardのプログラムのソースを確認し、プログラムのアルゴリズムの内容を説明してください。
/root/yahboomcar_ws/src/yahboom_laser/yahboom_laser/laser_Warning_xgo_RS200.py
次回はこちら
Comming soon
