Arduino向けスマート屋内ナビゲーションロボットキット
部品と材料
| 部品名 | 数量 | 備考 |
|---|---|---|
| スマートモーターロボットカー バッテリーボックス シャーシキット DIY スピードエンコーダー Arduino用 | 1 | |
| oblu - 屋内歩行者ナビゲーション用オープンソースIMU | 1 | |
| ハンダレスブレッドボード ハーフサイズ | 1 | |
| オス/メス ジャンパーワイヤー | 1 | |
| コンデンサ 1000 µF | 2 | |
| Texas Instruments デュアルHブリッジ モータードライバー L293D | 1 | |
| Arduino Mega 2560 | 1 | |
| 単3形 2800mAh Ni-MH 充電池 | 1 |
必要な工具と機器
- はんだごて(汎用)
アプリとオンラインサービス
- Arduino IDE
- Xoblu(Androidアプリ)
プロジェクト概要
このプロジェクトは、GPSやWi-Fi、Bluetooth、地図、建物のレイアウト図を一切使わずに、ロボットを所定の経路に沿って高精度で移動させ、その実際の軌跡をリアルタイムで描画するものです。Bluetoothは、リアルタイム位置情報の無線送信用としてワイヤーの代替として使用します。

背景
Arduinoベースのロボットで屋内ナビゲーションを実現する堅牢なソリューションを探していたところ、オープンソースIMUの「oblu」に注目しました。低コストでオープンソースであること、無料のAndroidアプリ「Xoblu」でリアルタイム位置追跡ができることが決め手となりました。ただし、obluの標準プログラムは「足取り型歩行者航法(PDR)」、つまり人間の歩行モデルに基づいています。人間が歩く際、足が地面に着いた瞬間は速度がゼロになるため、その「ステップ」を検出して誤差を補正し、高精度なトラッキングを実現しています。
そこで、「ロボットも同じように『移動→停止→移動→停止』を繰り返せば、obluのアルゴリズムがそのまま使えるのでは?」と考え、obluを採用してロボットとトラッキングシステムを組み立てました。
動作原理
ロボットはあらかじめプログラムされた経路に従って移動し、実際の移動情報をBluetooth経由でスマートフォンに送信してリアルタイム追跡を行います。
- Arduinoには経路データがプリロードされ、obluがロボットの動きを検知します。
- obluは一定間隔で変位量と方位変化をArduinoに送信。
- Arduinoはその情報をもとに車輪の動きを制御し、所定の直線経路からのズレを各ステップで補正します。
経路は「直線セグメントの集合」として定義され、各セグメントは「長さ」と「前セグメントからの相対方位」で指定します。ロボットは「ストライド(歩幅)」と呼ばれる小区間ごとに移動し、各ストライド終了時にobluから「ストライド長」と「直線からの方位ズレ」を受け取り、Arduinoが即座に姿勢を補正します。路面の凹凸、重量バランス、モーターのばらつき、キャスターの向きなどで生じるズレを、歩くたびに修正するイメージです。
次のストライド長は、その直線セグメントの残り距離に応じて可変します。遠いときは大きく、ゴール付近では小さくなります。また、プログラム距離を超えて進んでしまった場合は後退して戻ります。
obluはArduinoとスマートフォン(Xobluアプリ)の両方に同時にデータを送信。Xoblu側で受信データから軌跡を再構成し、スマホ画面上でリアルタイム表示します。ロボットの移動はスタート/ストップ命令以外、遠隔操作ではありません。
経路モデリング
ロボットを直線セグメントのみで歩かせるのが最も制御しやすいため、任意の経路を直線セグメントの組み合わせでモデル化します。下図は経路例と、その変位・方位での表現です。このデータをArduinoにプログラムします。


このように、直線セグメントの集合で表現できるあらゆる経路を定義・プログラム可能です。
回路組み立て
ハードウェアセクションを参照し、Arduino、oblu、モータードライバー、バッテリーパック間の電気接続を行ってください。
通信プロトコル
- ステップ1: XobluがobluにSTARTコマンドを送信
- ステップ2: obluがACKを返信
- ステップ3: obluが各ストライドごとに変位・方位データ(DATAパケット)をXobluへ送信(ゼロ速度=停止を検出するたび)
- ステップ4: XobluがDATAパケット受信ごとにACKを返信(ステップ3-4を繰り返し、STOPコマンド受信まで継続)
- ステップ5: STOP受信時 — (i) oblu内部処理停止 (ii) 全出力停止
詳細についてはobluのアプリケーションノートを参照してください。
oblu IMUの仕組み(参考)
obluの概要と、足取り型PDRセンサーの基本動作原理に関する参考資料です:
- obluの公開ソースコードは足取りナビゲーション向けに最適化されています。基本原理を解説した動画あり。
- 足取りPDRセンサーに関する簡易記事:「Track my steps」「Continue tracking my steps」
- 足センサーを用いた歩行者航法の詳細ドキュメント
- obluの概要動画
ご意見、ご提案、コメントをお待ちしています。どうぞよろしくお願いいたします!
コード
Arduinoベースのロボット制御コード
ロボットはプリプログラムされた経路に沿って移動し、現在座標をスマートフォンに送信してリアルタイム追跡を行います。
GitHubリポジトリ
回路図

製造プロセス
- Bluetooth 制御 Raspberry Pi ロボットに音声フィードバックを追加して構築
- シンプルPiロボット - Raspberry Piで2WD自律ローバーを構築
- ArduinoとHC-SR04で作るサーボ駆動障害物回避ロボット
- Joy Robot: ArduinoとESP8266で作るスマートロボット
- Arduino UNOで作る完全自律ライントラッカーロボット ─ 入門に最適な自作キット
- Arduino Nanoで音声制御ロボットを自作
- PiBot:Arduino駆動の精密ピアノ演奏ロボット
- Arduino Mega 2560搭載 総合トレーニングキット – センサー、モーター、カスタムPCB完備
- 自律型ホームアシスタントロボット「O'nine」の構築 – ROS、Alexa、ロボットアーム完全ガイド
- 学校向けスマート体温監視システム: 正確、リアルタイム、安全
- DIY ハンドジェスチャー制御 Arduino ロボットアーム - ステップバイステップ構築ガイド