自律型ホームアシスタントロボット
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 |
アプリとオンラインサービス
> |
| |||
| ||||
| ||||
|
このプロジェクトについて
1.はじめに <図>
<図>
オナインに会いましょう!動き回ったり、物を拾ったり、家の世話をしたりできる、個人の家のロボットコンパニオン。 Alexaのおかげで、O'nineはあなたの声を聞き、魚に餌をやるなどのプログラム可能なタスクを実行できます。
このプロジェクトは、スマートホーム環境で動的なタスクを実行できるスケーラブルでオープンなロボットプラットフォームを提供することで、Alexaの機能を拡張したいと考えています。現在のスマートホームソリューションには、特定の機能のためだけに考案されたカスタムリグが必要です。 O'nineは、これらのハードウェア要件を最小限に抑え、代替手段としてロボット工学を使用することで、このギャップを埋めることを目指しています。アイデアは、ホームオートメーションシステムの別のコンポーネントとしてロボットを使用することの実現可能性と実行可能性をテストするための技術を証明するプラットフォームを作成することです。うまくいけば、「すべてのACユニットを制御するためだけにすべての部屋にマイクロコントローラーを取り付けるのではなく、ロボットを使用してACユニットをシャットオフするのは理にかなっていますか?」などの質問に答えることができます。 「以前は静的なソリューションでしたが、ロボットの助けを借りてモバイルにできるようになりました。
これが私の魚に餌をやるオナインのビデオです。
TL; DW(タイムラプスビデオ)
フルレングスのビデオ。
あなたはあなたの赤ちゃんをチェックしたいですか、それとも誰がドアにいますか?オナインにはカメラが内蔵されているので、写真を撮ってもらうこともできます。
このチュートリアルでは、ロボットを構築する方法と、ロボットに自律タスクを実行するように命令できるAlexaスキルを作成する方法について説明します。
2.高レベルのアーキテクチャ <図>
要約すると、O'nineとAlexaの統合の仕組みは次のとおりです。
1. Amazon EchoDotは音声コマンドをリッスンします。
2.カスタムAlexaスキルがインテントを検出します。
3. AWSLambda関数はAmazonAlexa Skillからリクエストを受け取り、PubNubMQTTブローカーに公開します。
4. O'nineは、MQTTブローカーにサブスクライブすることでデータを受信します。
5.O'nineは必要なタスクを自律的に実行します。
3.ハードウェア
3.1ロボットベース
以下に示すようにコンポーネントを配線します。この回路は、ROSナビゲーションスタックから送信されたすべての速度コマンドをモーターの動きに変換します。ファームウェアには、モーターエンコーダーからのフィードバックを使用して必要な速度を維持するためのPIDコントローラーが含まれています。
<図>組み立てられたロボットベースの写真。
<図> <図> <図> <図>ロボットのシャーシは、アップサイクルされたA4紙缶です。古いプラスチック製のコンテナボックスを使用してコンポーネントを収納することもできます。
私のLinorobotプロジェクトをチェックして、DIYROS互換ロボットの構築方法に関する包括的なチュートリアルを確認できます。
3.2垂直 リフト 回路 (腕 親)
以下に示すようにコンポーネントを配線します。この回路は、アームの垂直リフトを制御し、http://moveit.ros.org/によって送信された必要な高さをステッパーの動きに変換します。これは、歩数をミリメートル単位の距離に相関させることにより、腕の現在の高さを計算する開ループシステムです。マイクロコントローラーはまた、MoveItから送信されたデータを、移動する垂直プラットフォームに取り付けられたロボットアームに中継します。
<図>これが垂直リフト用に組み立てられた回路の写真です。
<図> <図>スパイラルケーブルには、垂直リフト回路とロボットアームコントローラー間のシリアル通信用のTx / Rxワイヤーと、ロボットアームを強化するための+ 12VDC電源が収納されています。
3.3 ロボット 腕 コントローラー ( 腕 子供 )
ロボットアームを組み立て、シールドをArduino Unoに積み重ねた後、以下に示すようにコンポーネントを配線します。この回路は、シリアル通信を介して親アームと通信します。受信したデータは、サーボモーターを作動させるために使用される各関節に必要な角度の配列です。
<図>これは、ArduinoUnoに積み重ねられた組み立て済みのロボットアームコントローラーの写真です。
<図> <図> <図>そして、オナインの残りの機械部品を示すためにさらにいくつか。
<図> <図> <図> <図>3.4すべての回路を統合する
最後に、以下に示すように、以前に配線したすべての回路を接続します。この図は、各回路に電力を供給する方法も示しています。
<図>
4.ソフトウェア
このプロジェクトは2台のLinuxマシン(Ubuntu 14.04または16.04)で実行する必要があることに注意してください。 MoveItとデータ視覚化(Rviz)を実行する1台の開発マシンと、ロボットのナビゲーションパッケージとハードウェア/センサードライバーを実行する別のマシン(ARM開発ボード)。
ロボットに使用できるROS対応の開発ボード(できれば2GBのRAM)については、ここをクリックしてください。
4.1ROSのインストール
両方のマシンにROSをインストールします:
git clone https://github.com/linorobot/rosmecd rosme./install
インストーラーはマシンのオペレーティングシステムとアーキテクチャを自動的に検出するため、インストールするROSのバージョンを心配する必要はありません。
4.2 ROS パッケージ インストール
4.2.1開発マシンに以下をインストールします。
cd〜 / catkin_ws / srcgit clone https://github.com/linorobot/lino_pidgit clone https://github.com/linorobot/lino_msgsgit clone https://github.com/linorobot/lino_visualizecd .. &&catkin_make
4.2.2ロボットのコンピューター(ロボットベース)にLinorobotをインストールします:
git clone https://github.com/linorobot/lino_installcd lino_install./install mecanum kinect
これにより、ロボットベースのファームウェア、ナビゲーションソフトウェア、およびハードウェア/センサードライバーがインストールされます。
4.2.3両方のマシンにO’nineのパッケージをインストールします:
cdgit clone https://github.com/grassjelly/onine_installcd onine_install./install
これにより、ロボットアームのファームウェア、キネマティクスソルバー、およびOnineの自律タスクがインストールされます。
4.2.4 alexa_taskerをインストールします:
cd〜 / onine_ws / srcgit clone https://github.com/grassjelly/onine_alexacdcatkin_make
これにより、O'nineとalexaをリンクするMQTTクライアントがダウンロードされます。パッケージには、zipファイルとして圧縮されてAWSLambdaにアップロードされるNodeJSアプリも含まれています。
5.ソフトウェアのセットアップ
5.1設定 上 アレクサスキル
5.1.1サインアップしてログイン
ここでAlexa開発者アカウントを作成し、 '開始をクリックします a スキル ' :
<図>メールアドレスとパスワードを入力します:
<図>5.1.2Alexaスキルを開始する
'Get をクリックします 開始 ' Alexaスキルキットの下。
<図>'追加をクリックします a 新規 スキル ' at トップ 正しい of ウィンドウ:
<図>5.1.3スキル情報
'カスタムにチェックマークを付けます インタラクション モデル ' スキルタイプの下。
「名前」の下にスキルの名前(オプションでロボット名)を入力します。
'Invocation の下に、スキルの呼び出し名(スキルをアクティブ化するための名前)を入力します 名前 '。
[次へ]をクリックします。
<図>5.1.4相互作用モデル
コードをhttps://github.com/grassjelly/onine_alexa/blob/master/lamda/assets/schema.jsonから「インテントスキーマ」にコピーして貼り付けます 。
<図>コードをhttps://github.com/grassjelly/onine_alexa/blob/master/lamda/assets/utterances.txtから 'サンプルにコピーして貼り付けます 発話 '。
<図>[次へ]をクリックします。
5.1.5スキル構成
App Skill IDを左上隅からコピーし、ステップ5.2にスキップしてLambda関数を作成します。関数の作成が完了したら、Amazonリソース名をメモします。
'AWS にチェックマークを付けます ラムダ ARN ' デフォルトのタブでARNを入力します。
<図>[次へ]をクリックします。
5.1.6スキルのテスト
'Enter の下に音声コマンドを入力します 発話 ' 'をクリックします 質問 <スキル名> '
<図>'サービスの下に返信がある場合は、スキルが機能するかどうかを確認できます 応答 '。
5.2設定 アップラムダ関数
5.2.1サインアップしてログイン
ここでAWSLamdaアカウントを作成し、 '署名をクリックします で から コンソール ' at トップ 正しい of ウィンドウ :
<図>メールアドレスとパスワードを入力してください。
<図>5.2.2ラムダ関数の作成
[作成]をクリックします 関数 ' ウィンドウの右上にあるLambda関数の作成を開始します。
<図>'NodeJS 4.3' を選択します ランタイム*の下。
'Choose を選択します 既存 役割 ' 役割*の下。
'lambda_basic_execution' を選択します 既存の役割*の下。
[関数の作成] をクリックします 。
<図>5.2.3Alexaをリンクする
トリガーを追加して、 'Alexa を選択します スキル キット '
<図>Alexaスキルを入力します 'スキルID' スキルIDの下。
<図>次に、 [追加]をクリックします。
5.2.4アプリをアップロードする
関数を作成する前に、PubNubのPub-Subキーをコピーして関数コードに貼り付けます。
cd〜 / onine_ws / src / onine_alexa / lambda / appnano
次に、AWSLambdaにアップロードされるzipファイルを生成します。
cd〜 / onine_ws / src / onine_alexa / lambda / appnpm install./zipme
これにより、必要なラムダ関数とnode_modulesが.zipに圧縮されます
機能コードで、 'アップロードを選択します a .ZIP ファイル ' コード入力タイプの下。
<図>[アップロード]をクリックします 以前に作成したOnine.zipを選択してアップロードします。
<図>[保存] をクリックします at トップ 正しい of ウィンドウ。
<図><図>
これでLambda関数が完了しました。
5.3PubNubアカウントの作成
5.3.1サインアップしてログイン
ここでPubNubアカウントを作成します。
メールアドレスとパスワードを入力します:
<図>5.3.2新しいPubNubアプリを作成する
'作成をクリックします 新規 APP ' at トップ 正しい of ウィンドウ :
<図>' App の下にアプリの名前を入力します 名前 ' :
<図>5.3.3公開キーとサブスクライブキーを記録します。
5.3.4これらの行にパブリッシュキーとサブスクライブキーを入力します。
5.4作成 Pusover 通知
O'nineは、プッシュオーバーを使用して写真をユーザーの電話に送信します。ここでアカウントにサインアップしてアプリをダウンロードすると、家の中の何かをチェックするように依頼したときにO'nineから写真を受け取ることができます。
5.4.1プッシュオーバーにログイン
<図>メールアドレスとパスワードを入力します:
<図>ログインに成功したら、ユーザーキーを記録します。
<図>5.4.2アプリケーションを作成する
[アプリとプラグイン] をクリックします ウィンドウの上部にあります。 '作成をクリックします a 新規 アプリケーション / APIトークン ' 。
<図>「名前」の下にアプリケーションの名前を入力します 。
「アプリケーション」を選択します 「タイプ」の下。
アプリケーションの説明を入力します。
'作成をクリックします アプリケーション '。
<図>完了したら、APIトークンを記録します。
5.4.3アプリトークンとユーザーキーをコピーしてO'nineの「snaptask」に貼り付けます。
5.5 インストール ファームウェア
5.5.1uDevルール
マイクロコントローラのシリアルポートは、roslaunchファイルの静的な名前を使用して定義されます。シリアルポートを記憶して静的な名前にリンクするには、uDevルールを作成する必要があります。ロボットのコンピューターでuDevツールを実行します。
rosrun lino_udev lino_udev.py
<図> ロボットベースのTeensyボードを接続し、「linobase」を入力します。垂直リフト回路についても同じことを行い、「oninearm」という名前を付けます。 Ctrl + Cを押してuDevルールを保存します。
保存したudevルールを/etc/udev/rules.dにコピーします:
sudo cp 58-lino.rules /etc/udev/rules.d/58-lino.rules
udevを再起動します:
sudo service udev reloadsudo service udev restart
uDevルールが機能したかどうかを確認します:
ls / dev / linobasels / dev / oninearm
ポートが検出されなかった場合は、ロボットのコンピューターを再起動して、もう一度確認してください。
5.5.2ロボットベースのファームウェアをアップロードする
ロボットベースのファームウェアをアップロードする前に、ホイールダイアマター、エンコーダーのPPRなどのコンポーネントの仕様を定義する必要があります。ロボットを構成するには、ここをクリックしてください。
ロボットベースのTeensyボードをロボットのコンピューターに接続し、実行します。
roscd linorobot / Firmware / teensyplatformio run --target upload
5.5.3垂直リフトのファームウェアをアップロードする
垂直リフトのTeensyボードをロボットのコンピューターに接続し、実行します。
cdplatformio run --target upload
5.5.4ロボットコントローラーのファームウェアをアップロードする
Arduino Unoをロボットのコンピューターに接続して、実行します:
cdplatformio run --target upload
受信したデータはシリアル通信を使用してVerticalLiftのTeensyボードを介して中継されるため、コードをアップロードした後は、ArduinoUnoのプラグを抜くことを忘れないでください。
5.6 編集 リノロボット コード
Onineの実行に必要なドライバーを追加するには、Linorobot(ロボットベース)の起動ファイルの数行を編集する必要があります。
5.6.1bringup.launchのこの行の後に以下を追加します。
これにより、垂直リフトのマイクロコントローラーと通信するために必要なソフトウェアパッケージが追加され、OnineはOnineの変換(3D空間でのOnineの機械部品の位置)を定義します。
5.6.2この行を次のように変更します:
これは、Kinectから読み取った点群データを2Dレーザースキャンデータに変換するために使用される仮想フレームを作成するためのものです。
5.6.3このリンクの変換は、OnineのURDFファイルですでに定義されているため、この行をコメントアウトします。
5.6.4次の行を次のように置き換えます。
これにより、ソフトウェアパッケージが実行され、Kinectから読み取られた点群データが2Dレーザースキャンデータに変換されます。
5.6.5 Linorobotのベース参照フレームをbase_linkからbase_footprintに置き換えます:
' base_link から変更 'から' base_footprint '次の場合:
linorobot / launch / amcl.launch
linorobot / launch / slam.launch
linorobot / param / Navigation / global_costmap_params.yaml
linorobot / param / Navigation / local_costmap_params.yaml
linorobot / src /lino_base_node.cpp-行90
linorobot / src / lino_base_node.cpp --lino 111
5.6.6オドメトリノードを再コンパイルします:
cd〜 / linorobot_wscatkin_make
5.7設定 上 オナイン オブジェクト 検出器
O'nineがオブジェクトを簡単に検出できるようにするために、ARタグを使用して、ピックアンドプレースタスクを実行するときに対象のオブジェクトを区別します。これらのロボットと同様の概念:
<図><図>
<図>
<図>
下の画像を印刷して、O'nineにピックアップさせたいオブジェクトに貼り付けます。画像のサイズは2cmx2cmである必要があります。これらの数値は任意です。Onineのトラッカー起動ファイルのディメンションを変更することを忘れないでください。
<図>使用される認識ソフトウェアはhttp://wiki.ros.org/ar_track_alvarです。独自のオブジェクト検出ソフトウェアを使用したい場合、または次のような他のROS互換パッケージを使用したい場合は、これを簡単に置き換えることができます。
http://wiki.ros.org/find_object_2d
http://wiki.ros.org/tabletop_object_detector
6.デモの実行
デモを開始する前に、必ずネットワークを構成してください。より包括的なチュートリアルについては、このROSネットワークを確認してください。
6.1作成 地図
O'nineは、事前に作成されたマップを使用して、自分自身をローカライズし、家の中を移動するときにそのパスを計画します。次のコマンドを実行してマップを作成します。
ロボットのコンピュータで、2つの新しいターミナルウィンドウを開きます。 bringup.launchを実行します:
roslaunch linorobot bringup.launch
slam.launchを実行します:
roslaunch linorobot slam.launch
開発用コンピューターで、2つの新しいターミナルウィンドウを開きます。teleop_twist_keyboardを実行します:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
rvizを実行します:
roscd lino_visualize / rvizrviz -d slam.rviz
teleop_twist_keyboardを使用して、マップする領域の周りでロボットを運転します。
<図>マッピングが完了したら、ロボットのコンピューターでmap_serverを実行して、マップを保存します。
rosrun map_server map_saver -f〜 / linorobot_ws / src / linorobot / maps / map
map.pgmとmap.yamlが保存されているかどうかを確認します:
roscd linorobot / mapsls -a map.pgm map.yaml
独自のマップをロードするには、navigate.launchで呼び出されたマップを変更します。 'house.yaml' を変更します 'map.yaml' 。
6.2目標目標座標の取得
O'nineに家の中で自律的なナビゲーションを必要とするタスクを実行するように依頼するとき、O'nineはその仕事をしなければならないポイントの座標を知らなければなりません。
move_base_simple / goalにサブスクライブし、Rvizでターゲットの場所を指定することで、これらの座標をエコーできます。
ロボットコンピュータにSSHで接続し、以下を実行します:
bringup.launchを実行します:
roslaunch linorobot bringup.launch
別の端末でナビゲーションスタックを実行します:
roslaunchlinorobotnavigate.launch
開発用コンピューターでRvizを実行します:
roscd lino_visualize / rvizrviz-dnavigate.rviz
開発用コンピューターで別のターミナルを開き、次のコマンドを実行します。
rostopic echo move_base_simple / goal
これにより、Rvizをクリックするターゲットポーズの座標と方位がエコーされます。
Rvizで、ロボットにタスクを実行させたい場所から約1メートル離れたポイントをクリックし、ロボットが目標に到達したときにロボットが直面するはずの場所に向かってドラッグします。 (Rvizの1ボックスは1平方メートルに相当します。)
<図>エコーするウィンドウの座標をコピーします ' move_base_simple / goal '
<図>onine / onine_apps / scripts / fishtask.pyを編集し、Point(x、y、z)を位置/ x位置/ y、およびエコーされた値の位置/ zに置き換えます。 Quaternion(x、y、z、w)を、エコーされた値のorientation / x、orientation / y、orientation / z、orientation / wに置き換えます。
6.3 実行中 オナイン
6.3.1開発用コンピューターで新しいターミナルを開き、ROSCOREを実行します。
roscore
開発用コンピューターで3つの新しい端末を開き、ロボットコンピューターにSSHで接続します。
6.3.2ロボットベースとロボットアームのドライバーを実行します:
roslaunch linorobot bringup.launch
6.3.3 2番目の端末でナビゲーションソフトウェアを実行します:
roslaunchlinorobotnavigate.launch
6.3.4 3番目の端末でオブジェクト検出ソフトウェアを実行します:
roslaunch onine_apps ar_tracker.launch
開発用コンピュータで、2つの新しい端末を開きます。
6.3.5 MoveItソフトウェアの実行:
roslaunch onine_moveit_config demo.launch
これにより、ロボットアームを動かし、データを視覚化するためにRvizを開くために必要なすべてのソフトウェアが実行されます。
6.3.6 Amazon Echo Dotを介した音声コマンドで自律タスクを起動するPubNubクライアントを実行します:
rosrun onine_alexa alexa_tasker.py
6.3.7音声コマンドの実行について話す前に、O'nineが地図に対してローカライズするのを手伝う必要があります。
Rvizで、[ 2D PostEstimate]をクリックします ロボットのおおよその位置を地図をクリックして、オナインの現在の機首方位に向かってドラッグします。
<図>O'nineがローカライズされると、AlexaにOnineにタスクの実行を依頼するように指示する準備が整います。
新しいパーソナルホームアシスタントロボットを楽しんでください!
7.今後の取り組み
7.1O'nineシミュレーションモデル
ハードウェアの構築には、時間と手間がかかる場合があります。ユーザーがハードウェアを必要とせずにO'nineで遊ぶことができるように、Gazeboシミュレーションモデルを作成することを計画しています。このように、O'nineのAlexaカスタムスキルは純粋にソフトウェアで試すことができます。
7.2より優れた計算能力
私がO'nineを実行するために使用した最初のARMボードは、コンピュータービジョンアプリケーションに適したNvidia JetsonTK1でした。電源上の理由から、必要なのは5Vのみで、フォームファクタが小さいため、OdroidXU4に交換しました。私は現在、4GBのRAMを搭載したRock64ボードに注目しており、より多くのアプリケーションを同時に実行するためにより多くのジュースを手に入れたいと思っています。現在のセットアップでは、一部のアプリケーションをラップトップにオフロードする必要があり、両方のマシンで大量のデータストリームが実行されているため、開発ボード(イーサネットケーブル)に配線する必要があります。
コード
O'nineソフトウェア
ロボット工学に関連するすべてのコード(自律ナビゲーション、キネマティクスソルバー、およびピックアンドプレースタスクを実行するための高レベルのスクリプト)が含まれています。https://github.com/grassjelly/onineAlexa-ロボットの統合
Alexa Skillをロボットシステムと統合するすべてのコードが含まれています-LambdaApp(NodeJS)、Robot Tasker(Alexaコマンドを待機し、高レベルのスクリプトを実行してロボットタスクを実行するPubNubクライアント)https://github.com/grassjelly / onine_alexaロボットベース
これは私の別のプロジェクトです-Linorobot。これは、学生、開発者、研究者にROS上に新しいエキサイティングなアプリケーションを作成するための低コストのプラットフォームを提供することを目的としたオープンソースのROS互換ロボットのスイートです。https://github.com/linorobot/linorobot 回路図
製造プロセス