Bグループ プログラム系
プログラムのダウンロードはこちら
ローバーがどのような動きをするのかを図としてまとめたものを示したいと思います。
詳細なプログラムの説明
構造体及び各関数の説明をしたいと思います。その時に使用したライブラリの説明もしたいと思います。
主要構造体の仕様(役割、変数、構造体名)
GPSData{double lat; double long; double alt;}
GPSの緯度経度高度を表す構造体です。
latは緯度, longは経度, altは高度を示すもの
WayInfo{double distance; double direct;}
目的地への情報を表す構造体となっています。
distanceは目的地までの距離の値、directは目的地の方角
次に各関数についての説明をしたいと思います。
現在のGPS情報を取得するための関数
GPSData GetGPS()
現在の機体の方角を取得するための関数
double GetDirection()
EEPROMにdataの文字列を書き込むための関数
void SetEEPROM(char[] data)
XBeeにArduinoから取得したデータを書き込むための関数
void SetXBee()
LRのモーターの速度を設定する(l,rそれぞれ、-255~255の値を取る。関数内では、正回転・逆回転・停止を判断し、制御する)ための関数
void SetMotor(double l, double r)
条件を満たした時コンテナから脱出し、脱出が完了すればtrueを返す関数
bool EscapeContainer(GPSData nowData)
道のりの情報と機体の向きの情報を用いて、目的地へ接近するような関数
GoToTarget(WayInfo way, double direction)
現在地と目的地の情報から、目的地への方角と距離を計算する関数
WayInfo CalcWayInfo(GPSData nowData, GPSData targetData)
次にプログラムを作成する際に使用したライブラリを紹介したいと思います。
・TinyGPS++
GPSの情報を受け取るためのライブラリ
このライブラリではシリアル通信で受信したデータをエンコード関数で使いやすい形に変換することができます。
詳細は下記のURLを参照してください。
GPSの配線やプログラムを参照したのは下のリンクです。
math.h
数学で用いられる関数や定数を使用して計算することができるライブラリです。
SoftwareSerial.h
ソフトウェアシリアル通信を行うためのライブラリです。
EEPROM.h
EEPROMのアドレスに書き込む際に使用するライブラリです。
stdlib.h
基本的なプログラムで使用する関数を使うためのライブラリです。
string.h
文字列操作に関する関数が定義されているライブラリです。
Servo.h
サーボモーターを動かす際に使用するライブラリです。
Wire.h
2線による通信を行うためのI2C通信ライブラリです。
詳細は下のリンクから
実験を通して変更した点
まず、はじめに磁気センサーを用いた方角センサーが正常に動作していなかったため、プログラムを修正しました。具体的には、使用したセンサーのサンプルプログラム(秋月_BMX055使用9軸センサーモジュールに掲載)を最初は用いていましたが、出力結果を解析したところ、その中に含まれる値の修正が誤作動の原因だと判明したので、該当するプログラムを削除しました。またそれと同時に磁気センサーにはキャリブレートが必要だと判明しました。そのため、コンテナから脱出した後しばらくその場で旋回して、磁気センサーのキャリブレートを行う動作を追加しました。
つぎに、サーボモーターが正常に動作していなかったため、動作するように修正しました。
原因は、今回GPSに用いたライブラリである「SoftwareSerial.h」と、サーボに用いたライブラリである「Servo.h」が競合している事でした。そのため、GPSのシリアル通信には、「NeoSWSerial.h」というライブラリを用いる事で、どちらも動作可能にすることができました。
最後に、GPSの高さ情報が非常に誤差が大きい事が判明したので、直近100回の値の平均を用いる事にしました。
解決できなかった問題
解決できなかった問題は大きく4つあります。
1つ目の問題は、ローバーがコンテナから脱出できなかった事です。ログを確認したところ、脱出のモードへ移行していなかったため、ソフトウェアに問題があります。これは、技術的検証が不十分なまま終了しました。
2つ目の問題は、EEPROMを用いたデータ記録が出来なかった事です。これは、技術的検証が不十分なまま終了しました。
3つ目の問題は、位置推定の誤差です。今回位置推定にはGPSのみを用いましたが誤差が非常に大きく、特に高度については全く利用できないレベルでした。よって、加速度センサや気圧センサを用いるなどして、位置推定のアルゴリズムを改善する必要があります。
4つ目の問題は、障害物に引っかかって目的地へたどり着かないという問題です。これは、今回は意図的に移動アルゴリズムを単純にしたため予想の範囲ではあります。しかし、今後より良いシステムにするためには移動アルゴリズムの改善が必要です。
0コメント