検索コード

レッスン7/10: ライン追跡、崖検知 グレースケールセンサーの較正 Raspberry Pi Picoカー

このレッスンはの一部です: Raspberry Pi Pico 4WDスマートカー

レッスン7/10: ライン追跡、崖検知 グレースケールセンサーの較正 Raspberry Pi Picoカー

Raspberry Pi Picoスマートカーコースの第7課では、グレースケールセンサーモジュールを使用したライントレースと崖検知の重要な機能について学びます。このモジュールは車の「目」として機能し、事前に設定された経路を自律的に追従し、危険な落下を回避することができます。このプロジェクトでは、正確な読み取りのためのセンサーのキャリブレーション方法と、車を軌道に保つロジックの実装方法を実演し、崖検知をシミュレートする楽しい「Don't Push Me」機能も備えています。このガイドは、基本的なリモコン操作を超えて、センサー誘導ロボティクスの世界に飛び込みたい方に最適です。

この技術には、単なる楽しいDIYプロジェクト以外にも多くの実用的な応用があります。ここで学ぶ原理は、実際の自律システムを構築するための基礎となります。以下にいくつかのアイデアをご紹介します。

  • 自動配達ロボット:マークされたラインに沿って倉庫やオフィスフロアを移動し、荷物を配達する小型ロボットを構築します。
  • テーブルトップ迷路ソルバー:黒い絶縁テープで描かれた複雑な迷路をナビゲートできるロボットを作成します。
  • 安全・警備ロボット:設定された経路に沿って巡回し、崖検知を使用して階段や高い場所からの落下を回避するパトロールボットを実装します。
  • 教育プラットフォーム:車を使用して、PID制御、センサーフュージョン、自律ナビゲーションの基礎を教えます。

ハードウェアとコンポーネント

このプロジェクトは、SunFounder Raspberry Pi Pico 4WDカーキットを基にしています。このレッスンの主要コンポーネントはグレースケールセンサーモジュールで、ライントレースと崖検知の両方に不可欠です。このモジュールには3つの独立したセンサーが搭載されており、下の表面から反射される光の量を測定します。このデータは、黒いライン、白い表面、そして「崖」または開放空間を区別するために使用されます。フルキットには、Picoカーのシャーシ、モーター、システムに電力を供給するバッテリーパックも含まれています。

配線ガイド

適切な配線は、センサーを動作させるための最初のステップです。グレースケールモジュールは、4本のワイヤーを使用してRaspberry Pi Picoに接続します。配線は簡単で、ビデオで明確に説明されています。

ビデオで示されている配線構成は次のとおりです(ビデオの03:01時点):

  • 黒いワイヤー:PicoのGNDピンに接続します。
  • 赤いワイヤー:Picoの3.3Vピンに接続します。
  • 黄色いワイヤー(右センサー):GPIOピン28に接続します。
  • 茶色いワイヤー(中央センサー):GPIOピン27に接続します。
  • 白/灰色のワイヤー(左センサー):GPIOピン26に接続します。

グレースケールセンサーのキャリブレーション

車が確実にラインを追従する前に、白、黒、および空間の異なる読み取り値を理解するためにセンサーをキャリブレーションする必要があります。これは、車が正しい判断を下すことを保証するための重要なステップです。センサーの感度は、モジュール上の小さなポテンショメータで調整できます。

ビデオでは、キャリブレーションプロセスが説明されています(ビデオの04:39時点)。センサーは、地面から約11ミリメートルまたは1センチメートルの最適な高さに配置して、明確な読み取り値を得る必要があります。ポテンショメータを調整して値を観察することで、最適なポイントを見つけることができます。目標は、白い表面(多くの光を反射する)と黒いライン(ほとんど光を反射しない)の読み取り値に有意な差を持たせることです。

読み取り値の意味の概要は次のとおりです:

  • 白い表面:反射が高く、センサー値が高くなります(例:約20,000)。
  • 黒いライン:反射が低く、センサー値が低くなります(例:約3,000)。
  • 崖(空洞スペース):反射がなく、センサー値が最も低くなります(例:約1,200)。

コードの説明

このレッスンではコードが提供されていないため、車を動作させるためにRobojaxライブラリから使用される主要な機能と概念的なロジックに焦点を当てます。ビデオでは、提供されたライブラリから使用する2つの主要な機能について説明しています。

センサーのテスト

最初のステップは、簡単なスクリプトでセンサーをテストすることです。このスクリプトは、get_grayscale_value()と呼ばれる関数を使用して、3つのセンサーから生の値を読み取ります。これらの値をシリアルモニターに出力して、センサーが異なる表面の上にあるときに値がどのように変化するかを確認できます。これは、配線の確認とキャリブレーション手順の実行に役立ちます。


# これはテスト関数の概念的な例です
from machine import Pin, ADC
import time

# グレースケールセンサーのADCピンを定義
grayscale_pins = [26, 27, 28]
sensors = [ADC(Pin(pin)) for pin in grayscale_pins]

while True:
    # センサーから生の16ビット値を読み取る
    values = [sensor.read_u16() for sensor in sensors]
    print("Left: {} Center: {} Right: {}".format(values[0], values[1], values[2]))
    time.sleep_ms(100)

ライントレースロジック

ライントレースでは、コードは生のアナログ値を使用しません。代わりに、それらを単純なデジタルステータスに変換します:センサーが黒いラインの上にある場合は1、白い表面の上にある場合は0です。これは、3つの値のリスト(例:[0, 1, 0])を返す関数によって処理されます。メインの制御ループは、このリストを使用して車の動作を決定します。

ロジックは、センサーの状態を事前に定義された条件と比較することに基づいています。例えば、状態が[0, 1, 0]の場合、車はライン上に完全にあり、前進する必要があります。状態が[1, 0, 0]の場合、車は左にそれており、右に進路を修正する必要があります。動画ではこれらの条件を詳しく説明しており(動画の13:05)、センサー読み取り値の異なる組み合わせが、左折、右折、急な修正などの異なるモーターコマンドにどのように対応するかを示しています。


# これはライン追従ロジックの概念的な例です
# 'status' がグレースケールセンサーからの [0, 1, 0] のようなリストであると仮定します

if status == [0, 1, 0]:  # 中央センサーがライン上にある
    # 前進
    pass
elif status == [1, 0, 0]:  # 左センサーがライン上にある
    # 右折
    pass
elif status == [0, 0, 1]:  # 右センサーがライン上にある
    # 左折
    pass
# ... より急な曲がり用の他の条件

ライブプロジェクトデモンストレーション

動画のデモンストレーションでは、車は太い黒いラインが印刷されたトラックに置かれています。車はラインに沿って進み、経路に沿って曲がりや修正を行いながら、正常にラインを追従します。動画では、急な曲がりでホイールが緩むことがあるという一般的な問題が取り上げられており、ホイールシャフトに小さなテープを追加してしっかりとフィットさせるという簡単な解決策が示されています。これが修正されると、車はトラック全体をスムーズに走行し、キャリブレーションとライン追従ロジックの有効性を示しています。

動画チャプター

  • [00:00] ライントラッキングと崖検出の紹介
  • [03:01] グレースケールセンサーモジュールの配線
  • [04:39] グレースケールセンサーのキャリブレーション
  • [13:05] ライン追従ロジックの理解
  • [19:43] ライントラッキングコードのテスト
  • [24:50] テストトラックでのライブデモンストレーション
コードは添付されていません。

リソースと参考文献

まだリソースはありません。

ファイル📁

ファイルは利用できません。