VIVITABLOG

VIVITAで活躍するメンバーの情報発信サイト

Land Yachtによる自動運転への道

VIVITAの新居です。

今回もちょっとだけ自動運転してみようと挑戦した結果を紹介します。 今度はLand Yachtです。Land Yachtとはその名の通り、地上を走るヨットです。モーターなしで風の力だけで走ることができます。

f:id:hnii1970:20210310164833j:plain

改造した点が安全かどうか検証したわけではありません。実際に試す場合には各自でよく考えてすすめてください。

はじめに

去年のことですが、RCカーを自動運転しようと実験して以下のようにまとめたことがありました。

ArduPilotを使って(ちょっとだけ)自動運転ラジコンカーを作ってみた - VIVITABLOG

今回は別の種類のラジコンを使って、自動運転を試みましたので紹介します。

最初は地上を走るヨットのラジコン映像をyoutubeで見つけたことに始まります。 その説明ではhobbykingという有名サイトで販売されていて、今は販売中止になっているようでした。

しかし、調べてみると発案者が今でも自分のサイトで販売していました。

www.modellandyachts.com

値段もPNP(Plug and Playと呼ばれ、プロポ、受信機を準備するだけで動く半完成品) kitで125USDでした。 何度もみているうちに欲しくなり、購入したのが2020年の春先でした。

USPSの郵便だったため届くまでに1ヶ月以上かかりましたが、ともかく塗装済みで、1日で組み立て完了する 簡単kitでした。普通にラジコンで操縦するにはなんの問題もありません。

さて、ここからが本題です。今回もコードを書かずにどこまで自動運転を進められるか、試してみます。

利用するソフトウェア、ハードウェア

ソフトについて

ソフトについては前回同様、Ardupilotを利用します。このコントローラにはドローンや自動車以外にヨットのサポートがあります。 風向風速計をつなぐと、風の吹いてくる方向に対してセールをどのようにコントロールするか決めてくれます。

ハードについて

  • ラジコンの送受信機

送信機はJUMPER社のT8SGを利用しました。安価で日本で利用できるタイプです。

www.amazon.co.jp

受信機はSBUS出力を持つ受信機を使いました。そのため、前回使ったPPMエンコーダという部品は必要ありませんでした。

  • Ardupilot動作用ボード

Ardupilotは前回同様FC-10というボードで動作させました。

  • GPS

今回は安価な千円台のセンサを利用しています。

f:id:hnii1970:20210316165344j:plain
1200円のGPSモジュール

  • 風向計

ヨットを制御するには最低限風向計が必要です。 風向計は磁気式を自作しました。磁気センサとしては以下のチップを使っています。 12bit (4096P/R) 磁気式エンコーダAS5600 Breakout Board - スイッチサイエンスこのセンサは3.3Vを加えると、アナログ出力で磁石の角度を出力します。 この基板を以下の写真のような風見に取り付けて風の方向を取得してます。

f:id:hnii1970:20210310223513j:plain
風向計概略

この写真の風向計は試作機です。実機にはより小さくしたバージョンを搭載しています。

他にはRaspberry-pi zeroを搭載して、テレメトリー通信を行います。

必要なコンポーネントをまとめると以下の通りです。

f:id:hnii1970:20210310173258p:plain
ブロック図

これを繋いで、配線します。

組み立て

これを全部胴体の中に押し込めます。

f:id:hnii1970:20210316165411j:plain
内部の様子

次に前回と同様、USBを使ってMission Planner(以後MPと省略)に接続します。 ここでは大まかな設定を行います。

まず、CONFIGの画面の中のフルパラメータリストを開き、以下の値を変更します。

FRAME_CLASS = 2   // 船型のラジコンを指定
SAIL_ENABLE = 1  // 帆をサポート
SERVO1_FUNCTION=0  // ここは不使用
SERVO2_FUNCTION=0  // ここは不使用
SERVO3_FUNCTION=26  // ラダーの割り当て
SERVO4_FUNCTION=89 // メインセールの割り当て
WNDVN_TYPE = 3  // 風向センサを「アナログ電圧型」と指定

ここで、USBケーブルを一度抜いて、フライトコントローラにリセットをかけて、再度MPに接続。 すると以下の項目が出てくるので、再度指定します。

WNDVN_DIR_PIN = 13  // エアスピード用Analog端子を指定

ここで、再度ケーブルを抜き差しして、MPに接続し、次の値を変更します。

WNDVN_CAL = 1

この設定の直後Message windowにキャリブレーション開始のメッセージが出現します。 その文字列を確認後、30秒間の間に数回転ゆっくり風向センサを回転させると、Analog端子の最大電圧、最小電圧のキャリブレーションがおこなわれます。

WNDVN_DIR_V_MAX
WNDVN_DIR_V_MIN

その結果、この2つのパラメータが補正されます。キャリブレーション前と後で値が変わったことを確認しましょう。 現在の私の設定では以下のような値になりました。これが共に0Vであれば配線が繋がっていません、確認しましょう。

WNDVN_DIR_V_MAX = 3.21 V
WNDVN_DIR_V_MIN = 0.03 V

これで、基本的な設定は終了です。あとは外で設定することになります。

修正するべきパラメータは以下の通りです。この値は走らせながら変更する必要があります。

SAIL_ANGLE_MAX = 60 //一番緩めた時の帆の角度
SAIL_HEEL_MAX = 30  // 横風で倒れそうな時の最大角度
SAIL_NO_GO_ANGLE = 50 // 風上に進めない範囲

あとは風向計の向きの補正を行います。Land Yachtを真北に向け(MP内DATA画面で方位がNになるようにする)、風向計を真北に向けた状態で、Wind_dirというパラメータが0になると正解です。このWind_dirはどこで見るかというと、MPのDATA画面の中で以下のようにQuickのタブの中の数字をクリックすると選択できます。

f:id:hnii1970:20210422161230j:plain
Mission PlannerのQuickパラメータ変更方法
このWind_dirが0になるようにフルパラメータリストの以下の変数を変更してください。

WNDVN_DIR_OFS = ???

幾つになるかは、磁気エンコーダの取り付け角によって異なり、0から359のどれかの値になります。

ここまでできれば、すぐに走れるようになるはずです。あとは前回のブログを参照して、ジャイロ、コンパスのキャリブレーションなどを行います。 ここまで完成したのは昨年(2020年)の夏の終わりのことでした。

f:id:hnii1970:20210421230731j:plain
Land YachtとMission Planner

この時まではMission PlannerでLand Yachtの制御は簡単だと思っていたのです。

実験

だがしかし、外に出た時に、安定した風が吹いていて、撮影迄おこなう、というのがとても難しいことに気が付きました。 例えばこの日は海沿いの公園まで行ってみたのですが、風が安定せず、自動運転での実験はうまくいきませんでした。

www.youtube.com ラジコンとしては楽しかったですが、、、。

今回blogにするにあたり、風が強いかな、と思った時に何度も近所の公園に出てみたのですが、長く風を捕まえることはできませんでした。 ちょっと取れた映像はこんな感じでした。

youtu.be

WP1(Way Point 1)とWP2という場所を指定して、そこに到着したような気がします。 ただ、現在利用している安価なGPSでは5m程度座標がずれることもあり、一応動いたという感じです。

まとめ

Land Yachtを組み立て、Ardupilotを組み込みました。当初の予定通り、自分でプログラミングをすることなく、自動運転の準備まではできました。ただ自然の風の中で自動運転で走らせられたのはほんの少しでした。風をあてにしないモーターのありがたさが身に染みました。

では、今回はこの辺りでおしまいです。また機会を見つけて自然の風で走らせてみようと思います。