AI 自動運転 DonkeyCar 各部の動作確認
  RaspberryPi+PCA9685

  • カメラの動作確認

    cd ~/mycar
    
    python manage.py drive
    
      PCのブラウザで以下を開きカメラ画像が見える事を確認する
    ラズパイのHostname.local:8887
    
    または
    
    ラズパイのIPアドレス:8887
    
      カメラの前で手を動かして画像が静止画でない事を確認する
      ctrl+c で終了

  • ジョイスティックの確認

      使用するジョイスティックのUSBドングルを接続
      F710 は D/X の選択スイッチを X にする
    ls /dev/input
    

      js0 がある事を確認
    hexdump /dev/input/js0
    
      スティックやボタンを動かして表示がある事を確認
      無操作で時間が経つとスリープに入るので注意
      ctrl+c で終了

  • PCA9685 の確認

      ラズパイGPIOピンと接続

    PCA9685基板のピン
    ラズパイのGPIO
    ラズパイのピン番号
    
    GND
    GND
    9
    
    OE
    無接続
    -
    
    SCL
    GPIO3/SCL1
    5
    
    SDA
    GPIO2/SDA1
    3
    
    VCC
    3V3
    1
    
    V+
    無接続
    -
    

    sudo i2cdetect -y 1
    

      「40: 40」の表示があること

  • myconfig.py の編集

      myconfig.py のファイル名を myconfig.py.org に変更
    mv myconfig.py myconfig.py.org
    

      新規に myconfig.py を作成して
    nano myconfig.py
    
      以下を記述し保存
    JOYSTICK_MAX_THROTTLE = 1.0
    
    CONTROLLER_TYPE = '使用するジョイスティック名'
    
    AUTO_RECORD_ON_THROTTLE = False
    
    AUTO_CREATE_NEW_TUB = True
    
    
    
    PWM_CENTER = 1520
    
    PWM_MIN = PWM_CENTER-420
    
    PWM_MAX = PWM_CENTER+420
    
    
    
    DRIVE_TRAIN_TYPE = "PWM_STEERING_THROTTLE"
    
    PWM_STEERING_THROTTLE = {
    
    	"PWM_STEERING_PIN": "PCA9685.1:40.1",
    
    	"PWM_STEERING_SCALE": 1.0,
    
    	"PWM_STEERING_INVERTED": False,
    
    	"PWM_THROTTLE_PIN": "PCA9685.1:40.0",
    
    	"PWM_THROTTLE_SCALE": 1.0,
    
    	"PWM_THROTTLE_INVERTED": False,
    
    	"STEERING_LEFT_PWM":    PWM_MIN   /(1000000/4096/(1000/16)),
    
    	"STEERING_RIGHT_PWM":   PWM_MAX   /(1000000/4096/(1000/16)),
    
    	"THROTTLE_FORWARD_PWM": PWM_MIN   /(1000000/4096/(1000/16)),
    
    	"THROTTLE_STOPPED_PWM": PWM_CENTER/(1000000/4096/(1000/16)),
    
    	"THROTTLE_REVERSE_PWM": PWM_MAX   /(1000000/4096/(1000/16)),
    
    }
    
      PWMの数値はフタバ製受信機の出力波形から実測
      (1000/16)はPCA9685の出力波形から実測

  • ESC の確認

      ESCのコネクタをPCA9685基板の0番に接続

      机から車輪を浮かせる
      走行プログラムを起動
    python manage.py drive --js
    
      ESCにバッテリを接続してESC電源スイッチをON
      コントローラの右スティックを前後に動かすとタイヤが回る
      前進後退が合っているかを確認
      逆なら myconfig.py のTHROTTLE_FORWARD_PWMとTHROTTLE_REVERSE_PWMの
      MAXとMINを入れ換える
      ESCのマニュアルにあるセットアップを行う
       タミヤTEU-105BKマニュアル(リンク)
      myconfig.pyのJOYSTICK_MAX_THROTTLEの行を消して
      既定値(0.5)に戻す(若しくは任意の走らせやすい値にする)

  • サーボの確認

      サーボのコネクタをPCA9685基板の1番に接続

      コントローラの左スティックを左右に動かすと前輪の向きが変わる
      左右が合っているか確認
      逆なら myconfig.py のSTEERING_LEFT_PWMとSTEERING_RIGHT_PWMの
      MAXとMINを入れ換える
      ニュートラルでサーボホーンがサーボの中央にある事を確認
      その状態でまっすぐ直進するように前輪のターンバックルを調整する

  • データ保存の確認

      コントローラの「toggle_manual_recording」ボタンを押す
      画面に10,20,…と取得データ数が表示される
      コントローラでステアリングを左右に動かし続けて前輪の動きを目で追う
      前輪の動きがついてこないことは無いか※1,※2
      1000以上になったら「toggle_manual_recording」ボタンでデータ取得を停止
      ctrl+cでdonkeyプログラムを終了
      教師データのファイルを確認
    ls ./data
    
    ls ./data/tub_n_yy_mm_dd
    

      ※1 ごく稀に前輪の動きがついてこないことがある
       ○原因はSDカード
        50ms間隔でipegファイルと操作データをSDカードに保存するが
        ある程度バッファに溜めて書きこむ
        その時アプリが動けない事がある
       ○対策1
        SDカードの容量が16Gだと発生しやすいので大きい物に替える
        (ゼロにはならない)
       ○対策2
        データ保存をSDカードからRamDiskに変更する
        myconfig.py に「DATA_PATH ='/dev/shm/'」を追加
        データ取り後に mycar/data へコピーする
        ラズパイが電源消失,再起動するとデータも消滅するリスクがある
       ○対策3
        小型でUSB接続のSSDを使用する
        myconfig.py に「DATA_PATH = '/media/pi/ドライブ名'」を追加
        データ取り後に mycar/data へコピーする
        ラズパイが電源消失,再起動するとSSDが破損するリスクがある
        USB3.0はケーブルのシールドが甘い物だと2.4GHzのノイズを出してWi-Fi,Bluetoothを妨害する

      ※2 catalog_x.catalog をエクセルで開いて折れ線グラフを作ると明確に分かる
      


    このページのトップに戻る
    トップページに戻る