センサーデータとRaspberryPiマイクロプロセッサーの統合
要約
統合ロボットシステムにさまざまなセンサーを実装するには、デジタル化されたセンサーデータを入力し、それらのデータを制御ループで使用できるプログラミング環境と有効な通信方法が必要です。
キーワード:I2C通信、UART通信、Adafruit Ultimate GPブレイクアウト、Sparkfun MPU-9150ブレイクアウト、RaspberryPiセットアップ
はじめに
センサーデータの取得と関連付けは、デジタル制御システムにとって重要な部分です。すべてのセンサーデータ入力を処理するために組み込みデジタルコントローラーが採用されているため、これらのデータをマイクロプロセッサーで読み取りおよび使用可能にする通信インターフェースは、プログラミングレベルでの最優先事項です。チームプロジェクトの自律的な
ナビゲーションシステムでは、GPS位置を継続的に追跡し、コース角度を一貫して測定する必要があります。したがって、グループは、ロボットの現在の位置(緯度と経度)を検知するためにgpsモジュールを使用し、コースを測定するために磁力計を使用することにしました。両方のモジュールで取得されたデータは、リモートユーザーインターフェースで表示でき、制御ソフトウェアでも使用できます。
目的
これは、ユーザーがRaspbianオペレーティングシステムの基本的な操作を知っていることを前提とした高度なチュートリアルです。たとえば、ライブラリをインストールしたり、コマンドラインのbashコマンドでUnixターミナルを使用してスクリプトファイルを作成したりします。このアプリケーションノートの目的は、ユーザーが実際にRaspberryPiとのさまざまな通信インターフェイスから加速度計データとgpsデータを読み取ることができる方法をガイドすることです。このチュートリアルでは、コマンドラインの説明に加えて、センサーをPiに配線する方法の詳細と、センサーのハードウェア構成についても説明します。
情報
ハードウェア
○Sparkfun9自由度ブレイクアウトMPU9150
このプロジェクトで使用される慣性測定センサーは、sparkfunによって設計されたブレークアウトボードを備えたInvensenseMPU-9150です。 MPU-9150は、1つのパッケージに統合された2つのダイで構成されるマルチチップモジュールです。 1つのダイは、3軸ジャイロスコープと3軸加速度計を備えたMPU-6050です。もう1つのダイには、旭化成マイクロデバイス株式会社のAK89753軸デジタルコンパス/磁力計が収納されています。このチップは、低電力、低コスト、高性能向けに設計されており、現在、スマートフォンやタブレットを含む多くの場所で使用されています。
Adafruit UltimateGPSブレイクアウト
ブレイクアウトは、外部アンテナサポートとPulse-Per-Second出力を備えた第3世代のMTK3339ベースのモジュールを中心に構築されています。更新レートは10Hzで、66チャネルで最大22個の衛星を追跡できます。このgpsモジュールは、低電力入力(3.3 – 5V)を提供する組み込みシステム用に構築されており、ENABLEピンを使用して任意のマイクロコントローラーピンを使用してモジュールをオフにすることができます。信号の状態を示すことができる小さな赤いLEDもあります。 LEDは、衛星を検索している間は1 Hzで点滅し、修正が見つかると15秒ごとに
点滅します。このGPSは、周囲に建物がない場合にのみオープンフィールドで機能します。 FIX信号を取得するたびに、ユーザーが定義した頻度でコース、経度、緯度、高さのデータが更新されます。
通信規格
○I2C通信
I2CはInter-IntegratedCircuitBusの略です。 I2Cは、マイクロコントローラーをマスターとして使用し、シングルエンドのコンピューターバスを介して一意のアドレスを持つ複数のスレーブと接続します。シリアルデータライン(SDA)とシリアルクロック(SCL)の2つの双方向オープンドレインラインのみを使用します。 SDAは、SCLがローのときに転送ビットを設定し、SCLがハイのときにデータを受信します。
○UART通信
UARTはユニバーサル非同期受信機/送信機の略です。レジスタに書き込まれた/格納されたデータのバイト(5〜8ビット)からシリアルにデータを送受信します。すべてのデータは、プログラマーによって事前定義された特定のボーレートで読み取られます。 UART送信には、送信データ(TxD)、受信データ(RxD)、および信号グランド(SG)の3つの信号タイプが必要です。この種の送信は双方向ではないため、2つの別々の受信回線と送信回線が必要です。
パーツリスト
Raspberry Piでのハードウェアのセットアップとプログラミングには、次のパーツが必要です。
●RaspberryPi
●電源
●Wifiドングル
●SparkfunMPU9150ジャイロスコープと加速度計
●AdafruitUltimate GPSブレイクアウト
●USB-TTLアダプターケーブル(オプション)
●ブレッドボード
●MFジャンパー線
前提条件
このチュートリアルを開始する前に、いくつかの前提条件を設定する必要があります。このアプリケーションノートはプロジェクト全体の特定の側面にのみ焦点を当てているため、新しいRaspberryPiおよびワイヤレスネットワークのセットアップの基本的なセットアップ手順はここでは無視されます。以下は、このアプリケーションが基づいているいくつかの基本的な前提条件です。
●有効なインターネットアクセス
●インストールされているRaspianオペレーティングシステムとPiの起動動作がデスクトップモードに設定されている
●aマウスとキーボードがラズベリーパイのUSBポートに接続されており、グラフィック表示を確実にするためにモニターがHDMIアダプターを介して接続されています。
手順:
- シリアル通信用のRaspberryPiGPIO構成を知っている。このチュートリアルの後半で使用するシリアルピンは、UARTの場合はGPIO 14&15、I2Cの場合はGPIO 2&3です。
- AdafruitGPSをRaspberryPiに配線する
adafruitgpsモジュールのTx / Rx、Vin、およびgndピンを見つけます。 TxピンとRxピンをRaspberryPiのRxピンとTxピンに相互接続します。次に、PiからVinピンに5Vまたは3.3Vを供給し、GNDピンをPiのグランドに短絡します。
- MPU9150をRaspberryPiに配線する
MPU9150ブレークアウトの上部の4つのピンをRaspberryPiに接続します。 GPIO 2をSDA(データライン)に、GPIO 3をSCL(クロックライン)に配線します。 Piから加速度計のVccピンに3.3Vを供給し、GNDピンをアースに短絡します。
- I2C通信用のPiの準備
a。 Raspberry Piでターミナルを開き、次のbashコマンドを入力します。
sudo apt-get update
sudo apt-get install i2c-tools libi2c-dev
b。 WiringPiは、RasPi用に設計された非常に強力なC ++ライブラリであり、PI用のさまざまなGPIOツールが含まれています。 WiringPiをインストールするには、次のコマンドを入力します。
git clone git://git.drogon.net/wiringPi
cdwireingPi
sudo nano / etc / modules
c。次の3行がまだ存在しない場合は、ファイル(/ etc / modules)の最後に追加します
snd-bcm2835
i2c-bcm2708
i2c-dev
d 。次に、起動時にi2cをオンにするようにブートパラメータを変更します。 bashコマンドの入力:
sudo nano /boot/config.txt
e。このファイルの最後に次の行を追加します。
dtparam =i2c1 =on
dtparam =i2c_arm =on
f。 RaspberryPiを再起動します - MPU-6050-Pi-Demoソフトウェアのインストールと実行
a。ターミナルウィンドウで次のbashコマンドを入力します。
git clone git://github.com/richardghirst/
PiBits.git
cd PiBits / MPU6050-Pi-Demo
sudo apt-get install libgtkmm-3.0-dev
b。 Piを使用するには、一部のソースファイルを編集する必要があります。 I2Cdev.cppファイルとsetup-i2c.shファイルの両方を変更する必要があります。 bashコマンド「nano」を使用してファイルを編集します。
c。 「/ dev / i2c-0」へのすべての参照を変更して、このファイルの「/ dev / i2c-1」を読み取り、保存します。
d。次のbashコマンドを入力して、ソースをコンパイルします。
make
./setup-i2c.sh
e。ソースのコンパイルが完了するまで待ってから、次のbashコマンドを入力します。
sudo i2cdetect -y 1
f。次の出力が表示されます
g。次に、次のbashコマンドを入力して、このフォルダーでサンプルプログラム「demo_raw」を実行します。
./demo_raw
h。このデモでは、ターミナルに生のジャイロと加速度の値が表示されます
a / g:Ax Ay Az Gx Gy Gz
- Adafruit GPSモジュールからデータを取得するために、AdafruitにはGPS Daemon(gpsd)という名前の独自のソフトウェアがあります。チュートリアルは次のリンクから入手できます:https://learn.adafruit.com/adafruit-ultimate-gps-on-the-raspberry-pi
- gpsdはオープンソースソフトウェアではないため、ユーザーがgpsから読み取るために独自のファイルを変更および作成できるサードパーティソフトウェアを使用することをお勧めします。 「libgps」は、主にRaspberry ARMボードで使用するために作成されたオープンソースのgpsライブラリであり、Adafruit Ultimate GPSBreakoutでテストされています。このライブラリをプロジェクトで使用しています。
- libgpsパッケージのインストールとコンパイル。
a。 libgpsをインストールするには、次のコマンドを入力します。
git clone git://github.com/wdalmut/libgps.git
cd libgps
b。 libgpsフォルダーに移動した後、次のように入力してlibgps.aを取得するファイルを作成します。
make
sudo make install - 接続をテストするためのサンプルコードは「position_logger.c」というサンプルフォルダにあります
a。
gcc -o position_logger position_logger.c -lgps
-lm
bを使用してコンパイルします。
$ ./position_logger
cで実行します。有効なgps信号がある場合(修正LEDが1 Hzで点滅していない場合)、
次のように、
コンソールに緯度と経度の小数度が直接表示されます。
45.071060 7.646363
45.071082 7.646385
45.071078 7.646387
45.071060 7.646373
45.071048 7.646358
45.071052 7.646372
45.071057 7.646392
45.071062 7.646397
45.071062 7.646383
45.071073 7.646395
45.071082 7.646403
結論
このアプリケーションノートでは、例として2つのセンサーを取り上げ、最初のステップからセンサーとPi間のシリアル通信をセットアップする方法をユーザーに説明しました。また、ファイルを編集、コンパイル、および実行するためのコマンドラインメソッドについても簡単に説明しました。ただし、これらのセンサーデータをアルゴリズムに書き込むには、単に表示するよりもはるかに多くの労力が必要です。最終的な目標、つまり、このアプリケーションノートのより高度な派生は、単一の
スクリプトファイルからさまざまなセンサーライブラリに対処することです。これには、各センサーソフトウェアパッケージの背後にあるコーディングの原則をより深く理解する必要があります。
参照: - ケビンタウンゼント。 2014年7月15日、RaspberryPiでのAdafruitUltimateGPS。
Web。 https://learn.adafruit.com/downloads/pdf/adafruit-ultimate-gps-on-theraspberry-pi.pdf - Walter DalMut。 RaspberryPi用のUARTNMEAGPSライブラリ。 2014年9月8日。
ウェブ。 https://github.com/wdalmut/libgps - InvenSense。 MPU-9150データセット、2013年9月18日。Web。 http://
www.invensense.com/mems/gyro/documents/PS-MPU-9150A-00v4_3.pdf
出典:センサーデータとRaspberryPiマイクロプロセッサーの統合
製造プロセス