【AIラジコンカー】 プロポの入力を読み取ってみた
こちらのドンキーカーのイベントに参加した時に、AIラジコンカーなるものにガゼン興味が湧いてしまったので、1人の大学生がAIラジコンカーを完成させるまでの話をつらつらと書いていこうと思います。
今回は第一歩ということで、プロポの信号をpythonで読み取るのに挑戦してみました。
ということで、まずは環境の整理。
今回使ったもの
コンピュータ : ラズパイ モデル3 b+
ラジコンシャーシ: タミヤ TA-07 PRO
プロポ : サンワ MT-S
受信機 : サンワ RX-481
パルス入出力用マイコン: RPi-GP90
・・・全体的に大学生にとってはめちゃくちゃ高価でした汗
貯めてきたものが一瞬でサヨウナラしてしまいました。
ので、絶対に今回は納得のいくものを完成させる必要があります!
とはいえ、実はラズパイを使うのは今回で初めてなんです。
何とかpythonからLピカ・Lチカを成功させたのが2、3週間前のことです。
ということで、今後ソースコードや回路の画像を貼る時もあろうと思いますが、その時の拙さに関してはお手柔らかに・・・笑
さて、話を戻しますと今回はプロポのPWM入力信号読み取りに挑戦してみた回になります。
まずRPi-GP90についてですが、パルスコントローラのパルス幅測定機能を使ってPWMのパルス幅を計測できます。
使い方はRPi-GP90のGitのサンプルコードに粗方だけ載っていますが、レジスタがどうとか、中々難しい内容だったので備忘録というのも併せてまた改めてやり方を掲載することにします。
とりあえず今回の実験結果がコチラ。
一見すると上手く入力を取れているような感じがします。
でもよくみると、結果は10進数で左全開で22、右全開で38です。
つまり片側たった8段階の分解能です。
うーーーーーーん、これじゃ折角そこそこ良いプロポ買ったのに、精度よく入力を計測できてない・・・・。
ついでに、この入力の計測結果を使ってラジコンを動かしてみた結果がコチラになります。
なんか、めちゃくちゃガタガタ言ってて、ラジコンが可哀想な感じになってます泣
pythonコードで直接制御信号を送ってサーボを動かしたところ、問題なく滑らかに動作していたので、これも恐らく片側8段階の分解性能が原因なんだと思います。
それで原因を色々考えてみたんですが、このRPi-GP90、どうやら最小の分解能は50μsみたいなんですね。
ラジコンサーボのパルス幅ほとんどは1ms〜2msの範囲で制御されているみたいです。
僕が買ったRX-481の受信機ですが、このパルス幅を調整可能らしく、もっとクイックに動作させることもできるようですが、いったん普通の1ms〜2msでセッティングしています。
ということで、以下、ハイパー計算タイムです。
サーボの制御範囲が1ms〜2msということは、左右を調節する幅はその差の1ms。つまりニュートラルから左全開まででは0.5ms=500μs
そしてRPi-GP90の分解能が50μsということは500μs÷50μsで片側約10段階しか計測できないことになります!
(なんで買う前にちゃんと計算しなかったのか)
ということで、今回の検証は以上になります。
結果が残念すぎる泣
しかし、高価な高価なRPi-GP90です。まだ策はあります。
実は外部のクロック発信器をつかって、パルス幅を計測できます!笑
きっと30MHzくらいの圧倒的クロックの暴力でもって解決することができそうです。さすがお金の力。
次回はそれを検証してみようと思います。
この記事が気に入ったらサポートをしてみませんか?