はじめに~動作のおさらい~
インフィニオン社車載チーム新人エンジニアのクロちゃんです!
さて、前回までは本体中心でハード設計を行ってきましたが今回はコントローラー中心でソフト設計を行っていきます。
が、まずはおさらいを兼ねてこちらどのように移動する仕様なのか、改めて説明したいと思います。
まず、本体の移動にはオムニホイールと呼ばれる垂直方向にも進むタイヤを3つ使い8方向の移動制御をおこなうことができます。
オムニホイール(左図) 三輪駆動(右図)
操作についてはインフィニオン社製の3D Magnetic Sensorを用いて、ゲーム機のコントローラーのようなジョイスティックを実装し本体の移動制御を行います。
また、今回新たな仕様として3つのボタンを実装することでそれぞれ、右回転、左回転、そして停止ボタンを追加することでコントローラーから計11個の移動制御をおこなうことにしました。そしてコントローラーの外観は以下のようになりました!
次からは実際に実装したコントローラーを使ってどのような制御を実装するのか説明していきます。
コントローラー外観
コントローラーの仕様~設計ってほんと大変~
コントローラーから本体への制御は11動作あるため、それぞれの条件について4つのI/Oピンを用いて信号を本体へ送るようにします。また、信号を送った際は実際の信号と動作が一致しているか判断するため、本体の4隅にウィンカーを取り付けウィンカーも各動作に対応して光るようにします。各入力Portに対するフィードバックについては下記の表に示した通りとなります。
コントローラー入力と各移動制御
具体的にどのようにコントローラー制御していたかを示す簡易的なフローチャートは以下の図のようになります。
コントローラー部のフローチャート
この3DセンサーとマイコンのインターフェースにはI2Cを使用し、マイコンがMaster, 3DセンサーがSlaveとして各種信号のやりとりをおこないます。
まずコントローラーの電源を入れるとマイコンから3Dセンサーへ初期設定を変更するWriteのI2Cを送信します。
I2C Master-Writeの波形
次にジョイスティックを動かすことでマイコンから3Dセンサーへジョイスティックの傾きによる3軸の磁束密度についてReadのI2Cを受信し、3軸の磁束密度情報からX軸、Y軸のデータを使用してジョイスティックの角度θを算出します。
ジョイスティックと角度検知
マイコンから3Dセンサーへreadする際にはデバック用としてUARTを使用して3軸の磁束密度と、磁束密度に対応したジョイスティックの角度θを見られるようにしました。
I2C Master-Writeの波形
そして算出された角度θによって定められた移動制御をの信号を無線通信にて筐体におくり本体の制御をおこないます。
ここまでが1セットとなっており、本体の移動制御を行います。停止、右回転、左回転については個別にメカスイッチを採用しており、今までのフローチャートのどの状態であっても優先されるようプログラミングをしております。
と、ここまでが一連の流れにはなりますが、プログラミング初心者のクロちゃんはソフトでも苦労の連続でした。。
ソフト設計~ストレスで過呼吸になりました~
プログラミングをする上で一番きつい瞬間はどこだと思いますか?と質問されれば私は即答で「デバックです!!」と答えるでしょう。
何も進展がないまま1日が終わるなんてこともありました。いくらデバックしても何も改善されないことがストレス過ぎて過呼吸で倒れかけたこともありました。間違いなく今回の製作実習で一番ストレスだったのはソフト設計でしたね。
その中でも特に大変だったのがI2Cのプログラミングとデバックで特に3DセンサのWrite信号が送れず、このデバックはとても苦労しました。
今回使用したMCUはインフィニオン社製のPSoC™と呼ばれるシリーズのマイコンでこの製品はアナログ/デジタル回路を自由に選択/構成してカスタムできます。
PSoC™のコンポーネント例
このI2Cのコンポーネントを使って3Dセンサとの通信をするのですが、ここでも問題が発生しました。
私の想定ではI2Cを使って3Dセンサの出力をマイコンに送るだけで良いと思っていたのですが、通信がうまくいきません。。
デバックのために改めてPSoC™のデータシートとユーザーマニュアルを見ていたのですが、、文章量多過ぎませんか?!
1日ドキュメントとにらめっこした結果、PSoC™はデフォルトで1byte分のデータを受け取る設定になっていたのに対して3Dセンサはデフォルトで2byte分のデータを送る設定になっていました。そのため、3Dセンサの設定を1byt分送る設定に変更したところ、ようやくI2Cのデータを受け取ることができるようになりました!!
他にも様々な事件を経て波乱万丈な製作実習でしたが、なんとかサッカーロボットを完成させることができました!(その辺もぜひおまけページのような形で出してみたいですね)
そんなこんなでドタバタなクロちゃんの新人ブログですが次話が最終話となります。
次回はついに私のロボットと市販のサッカーロボットで試合を行っていきますので最後までお付き合いください!
【新人エンジニアのサッカーロボット製作日記】
第二話 『これが最強のサッカーロボット?!君の名はマラドーナくんだ!!』
第四話 『目覚めの時は来た、発進!マラドーナくん!!』
第五話 『運命のKICK OFF!! その栄冠を掴むのは...』