自律型ホームアシスタントロボット「O'nine」の構築 – ROS、Alexa、ロボットアーム完全ガイド
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | ロボットアーム制御用 |
| Arduino Braccioロボットアーム | 1 | 5自由度+グリッパー |
| Odroid XU4(または同等SBC) | 1 | ROSナビゲーション・ビジョン処理用 |
| SparkFun EasyDriver | 1 | 垂直リフト用ステッピングモータードライバー |
| ステッピングモーター | 1 | アーム垂直移動用 |
| L298 モータードライバー | 1 | メカナムホイール駆動用 |
| DCモーター(エンコーダー付) | 4 | メカナム駆動用 |
| GY-85 IMU(9軸) | 1 | 姿勢推定用 |
| メカナムホイールセット | 1 | 全方向移動 |
| Microsoft Kinect v1 | 1 | 深度センサー(ROS対応) |
| V-Slotリニアレール、ガントリープレート、Vホイール等 | 1式 | 垂直リフト機構用(OpenBuilds互換) |
| 台形ネジ(0.8m)、カップラー、ベアリングブラケット | 各1 | リフト駆動用 |
| リミットスイッチ、スプリングワイヤー | 各1 | 原点復帰・ケーブルガイド |
| 5V BEC、DC-DCコンバーター、12V 5000mAhバッテリー | 1式 | 電源系 |
ソフトウェア・サービス
- ROS (Robot Operating System) – Kinetic/Melodic
- Amazon Alexa Skills Kit + AWS Lambda
- PubNub (MQTTブローカー)
- Pushover (通知・画像送信)
プロジェクト概要
「O'nine(オーナイン)」は、家の中を自律移動し、アームで物を掴み、Alexaの音声指令でタスクを実行するパーソナルホームロボットです。ROSベースのナビゲーション、MoveItによるアーム運動計画、Alexa-PubNub-ROSの連携で「魚に餌をやって」「赤ちゃんを見て」等の動的タスクを実行します。

システムアーキテクチャ
- Amazon Echo Dotが音声コマンドを受信
- カスタムAlexaスキルがIntentを検出
- AWS LambdaがPubNub MQTTブローカーにメッセージ送信
- O'nine(Odroid XU4)がMQTT購読し、ROSアクションを実行
- ナビゲーション→アーム制御→把持→戻る、を自律遂行

ハードウェア構成(3サブシステム)
1. ロボットベース(メカナム駆動)
- Teensy 3.2/3.5 + L298 + エンコーダー付DCモーター×4
- PID速度制御ファームウェア(linorobotベース)
- Kinectで点群取得 → pointcloud_to_laserscanで2Dレーザー変換 → AMCL/SLAM
2. 垂直リフト(アーム親システム)
- Teensy + EasyDriver + ステッピングモーター + 台形ネジ
- オープンループ位置制御(ステップ数→高さ変換)
- アーム子システムへシリアル中継+12V電源供給
3. ロボットアームコントローラー(アーム子システム)
- Arduino UNO + Braccioシールド
- 垂直リフトから受信した目標関節角でサーボ駆動
ソフトウェアセットアップ(Ubuntu 16.04/18.04 × 2台構成)
ROSインストール
git clone https://github.com/linorobot/rosme
cd rosme && ./install
必要パッケージ
# 開発機(MoveIt, RViz用)
cd ~/catkin_ws/src
git clone https://github.com/linorobot/lino_pid
git clone https://github.com/linorobot/lino_msgs
git clone https://github.com/linorobot/lino_visualize
cd .. && catkin_make
# ロボット機(ベース)
git clone https://github.com/linorobot/lino_install
cd lino_install && ./install mecanum kinect
# O'nine専用パッケージ(両機)
git clone https://github.com/grassjelly/onine_install
cd onine_install && ./install
# Alexa連携
cd ~/onine_ws/src
git clone https://github.com/grassjelly/onine_alexa
cd .. && catkin_make
Alexaスキル作成手順
- Alexa Developer Consoleでスキル作成(カスタム対話モデル)
- Intent Schema(
schema.json)とSample Utterances(utterances.txt)をGitHubからコピー - AWS Lambda関数作成(Node.js 4.3+)、PubNubキーを環境変数に設定
- Lambda ARNをAlexaスキルのエンドポイントに登録
PubNub・Pushover設定
- PubNubアプリ作成 → Publish/Subscribeキー取得 → Lambdaとonine_alexaに設定
- Pushoverアカウント作成 → User KeyとAPI Token取得 → スナップショット送信用に設定
uDevルール(シリアルポート固定)
rosrun lino_udev lino_udev.py
# Teensy(ベース) → linobase
# Teensy(リフト) → oninearm
sudo cp 58-lino.rules /etc/udev/rules.d/
sudo service udev reload && sudo service udev restart
ファームウェア書き込み
# ベース
roscd linorobot/firmware/teensy && platformio run --target upload
# リフト
cd onine_firmware/lift && platformio run --target upload
# アーム
cd onine_firmware/arm && platformio run --target upload
デモ実行手順
1. マップ作成
# ロボット機
roslaunch linorobot bringup.launch
roslaunch linorobot slam.launch
# 開発機
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
roscd lino_visualize/rviz && rviz -d slam.rviz
# 手動走行でマッピング後
rosrun map_server map_saver -f ~/linorobot_ws/src/linorobot/maps/map
2. 目標座標取得
roslaunch linorobot navigate.launch
# RVizで "2D Nav Goal" をクリック→ドラッグ
rostopic echo move_base_simple/goal
# 座標を fishtask.py の目標ポーズに反映
3. 通常運用
# 開発機
roscore
roslaunch onine_moveit_config demo.launch
rosrun onine_alexa alexa_tasker.py
# ロボット機(SSH×3端末)
roslaunch linorobot bringup.launch
roslaunch linorobot navigate.launch
roslaunch onine_apps ar_tracker.launch
# RVizで "2D Pose Estimate" で自己位置合わせ後、Alexaに話しかけ
今後の展望
- Gazeboシミュレーションモデル提供(ハードウェア不要で開発可能に)
- より高性能SBC(Rock64 4GB RAM等)への移行で処理オフロード解消
- 物体検出のARタグ依存から、汎用検出(find_object_2d等)への移行
関連リポジトリ
製造プロセス
- Bluetooth 制御 Raspberry Pi ロボットに音声フィードバックを追加して構築
- JQR四足歩行自律ロボット:自律ナビゲーションと救助向けDIY脚式ロボット
- シンプルPiロボット - Raspberry Piで2WD自律ローバーを構築
- 自宅で作るDIY宿題自動筆記マシン:AxiDraw風ペンプロッターの自作ガイド
- ArduinoとHC-SR04で作るサーボ駆動障害物回避ロボット
- Arduino UNOで作る完全自律ライントラッカーロボット ─ 入門に最適な自作キット
- Arduino Nanoで音声制御ロボットを自作
- Arduino Mega 2560搭載 総合トレーニングキット – センサー、モーター、カスタムPCB完備
- DIY ハンドジェスチャー制御 Arduino ロボットアーム - ステップバイステップ構築ガイド
- 4輪ArduinoロボットをDabbleアプリでBluetooth制御しよう
- Arduino向けスマート屋内ナビゲーションロボットキット