robot integrationedu.isc.chubu.ac.jp/naga/mri.pdf · robot integration 2.1...

Post on 18-Aug-2020

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Robot Integration

Yasunori NAGASAKA

2020年 05月 18日

i

Contents:

第 1章 はじめに 1

第 2章 2020年度の講義の内容について 3

2.1 ハードウェアコースでは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.2 ソフトウェアコースでは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.3 Webインタフェースの付加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.4 ハードウェア・ソフトウェアのコース選択と使用機器について . . . . . . . . . . . . . . . . . . . 4

2.5 使えるパーツ、ソフトウェア . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

第 3章 日程 7

3.1 毎週の作業内容の記録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

第 4章 準備 9

4.1 ソフトウェア、ハードウェア . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

4.2 必要とされる知識 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

第 5章 文献検索について 11

第 6章 Flask 13

6.1 環境の準備 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

6.2 起動と動作確認 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

6.3 Flaskのプログラミング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

第 7章 参考資料 21

7.1 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

7.2 ROS, Gazebo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

7.3 Flask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

第 8章 Indices and tables 23

1

第 1章

はじめに

ロボットインテグレーションは、ロボットを構成する様々なハードウェア、ソフトウェアの技術を組み合わせて、

ロボットをシステムとして構成する方法を学びます。

個々の技術については機械、電気、情報、制御などの各分野における永年の研究、開発成果の蓄積で文献や書籍が

数多くありますが、それらを組み合わせて一まとまりのロボットシステムとしてどう構成するかという点について

は文献、書籍がまだありません。よって教科書はありません。

ROSが広く使われるようになったことで、システムとしてのロボットが注目されるようになり、共通の開発基盤

が整ってきました。ROSの使い方に関する書籍は増えてきましたが、その上のレベルの汎用的なシステムとして

のロボットの構成方法については、まだ発展途上で確立された理論がない先端の分野といえます。

よってこの科目ではキチンとまとめられた内容についての講義や輪講ではなく、代わりに複数の技術を組み合わせ

て実際に小さなロボットをシステムとして製作してみます。そこから、様々な技術のインテグレーションについて

経験を通して、知見や気付きを得ることを目指す実践的な内容、実習を中心にして進めます。

具体的な内容は、RasPi, Ubuntu, ROS,その他デバイスを組み合わせてロボットを製作します。例年は3または4

人でチームを組んで協力して 1台のロボットの製作に取り組んできました。

3

第 2章

2020年度の講義の内容について

2020年度は以下の制約があるので内容を変更します。

• 学生が大学に来られないので、複数人のメンバーで協力、分担して製作することができない。

• 講義や輪講のように集まって勉強することができない。

• 実習工場で部品の加工ができない。

• 3 Dプリンタで部品を製作することができない。その他、大学にある機器が使えない。

• 設計時に CADが使えない。

• 最後に集まっての発表会やデモの披露ができない。

2020年は各自、ハードウェア、ソフトウェアのどちらかのコースを選択して、自宅で一人 1台のロボットまたは

シミュレータ上のロボットモデルを製作/制作することにします。最後の成果物の提出では、ハードウェアまたは

ソフトウェアのロボットが動作する様子を撮影した動画と、開発過程と結果をまとめたレポートを提出してもらい

ます。

Robot Integration

2.1 ハードウェアコースでは

Raspberry Pi  といくつかのデバイスを配布しますので、それらを組み合わせて、何らかの動作をする小さなロ

ボットを製作します。センサ、アクチュエータ、ROS,インターネット経由の入出力が使えます。

2.2 ソフトウェアコースでは

ROS, Gazeboを連携させて、Gazebo上で動くロボットのモデルを制作します。学部 3年生の科目ロボットインテ

リジェンスでは、関節で動く脚を備えた歩行ロボットを制作しましたが、それにカメラや他のセンサを組み合わせ

て、センサで得た情報から必要な判断をして動くロボットを目指します。

2.3 Webインタフェースの付加

ハードウェアコース、ソフトウェアコースのそれぞれで作成するロボットはまちまちですが、Flask を利用した

ユーザインタフェースを付加することを必須とします。Flaskとは PythonをベースとしたWebアプリケーション

を作成するためのシンプルなフレームワーク、開発基盤です。これにより、Webブラウザからロボットの起動、停

止、ロボットの状態確認、機能やオプションの指定などが可能となります。

Flask以外の別の環境を使いたい場合は相談して下さい。

2.4 ハードウェア ・ ソフトウェアのコース選択と使用機器について

部品の準備で早めに確認したいことがあるので、以下のアンケートに回答してください。問い合わせのメールが届

いたら、それに返信して下さい。

アンケート

学籍番号:

氏名:

実習では、(ハードウェア ・ ソフトウェア)を希望します。(どちらかを選んで下さい)

ハードウェアを選んだ人は次の項目も回答してください。

USBカメラを希望(します ・ しません)。(どちらかを選んで下さい)

Leap Motion を希望(します ・ しません)。(どちらかを選んで下さい)

4 第 2 章 2020年度の講義の内容について

Robot Integration

2.4.1 自宅での開発環境

ハードウェアを選択する場合、自宅で開発ができる環境、機器が必要になる。次に示す、ローカル、有線 LAN、無

線 LANを利用するどれかが用意できないと、Raspberry Pi上での開発ができない。

ローカル HDMI入力ができるディスプレイ、USBキーボード、USBマウスがあればネットワークに接続しなく

てもローカルに作業が可能。

有線 LAN 前述の機器がない場合、PCからネットワーク経由で接続して作業する。有線接続が可能なら設定は難

しくない。

無線 LAN 無線でしか接続できない場合はルータ等の設定が自分でできる必要がある。

2.5 使えるパーツ、ソフトウェア

ハードウェアコースでは、Raspberry Pi、その他のデバイスは可能な範囲で用意、配布する。

ソフトウェアコースでは、各自所有する PC上で、Ubuntu, RSO, Gazebo,他のソフトウェアを使用する。

ハードウェアコースでは、次のパーツは希望者には標準的に配布できる見込みです。

• Raspberry Pi,電源

• サーボモータ

• デジタル入出力

• 音声出力、スピーカ

• 3軸加速度センサ

• AD変換

ハードウェアコース用の、次のパーツは個数が限られているので可能な範囲で希望者に配布します。

• USBカメラ (10台程度)

• Leap Motion (1台)

またハードウェアコース用の、次のソフトウェアはすぐ使える状態で配布します。

• Ubuntu 18.04 server (Raspberry Pi用)

• ROS

• 各種デバイスを使うためのサンプルプログラム

次のソフトウェアは必要に応じて自分でインストールして下さい。

• Flask, Webフレームワーク ( https://flask.palletsprojects.com/en/1.1.x/ )

2.5. 使えるパーツ、ソフトウェア 5

Robot Integration

• ROSのトピック、サービスを使った通信

• GAZEBOによるシミュレーション環境

• OpenCVによる画像処理

各デバイスの使い方、Gazebo上でのモデルの動かし方など、必要な情報は準備できたものから順次提供します。

6 第 2 章 2020年度の講義の内容について

7

第 3章

日程

1週 ロボットインテグレーションの現状の調査、関連する文献の調査とまとめ、製作するロボットの内容を決

め、企画書にまとめる、記録

2週 Flaskの調査、インストール、練習、記録

3週 製作、作業内容の記録

4週 製作、作業内容の記録

5週 製作、作業内容の記録

6週 製作、作業内容の記録

7週 製作、作業内容の記録

8週 製作、作業内容の記録、中間報告のレポート作成と提出

9週 製作、作業内容の記録

10週 製作、作業内容の記録

11週 製作、作業内容の記録

12週 製作、デモムービーの用意、レポート作成

13週 デモムービーの披露、レポート提出

Robot Integration

3.1 毎週の作業内容の記録

2020年度は、自宅での学習となるため、各週の学習内容の記録を残すように大学から指示がありました。よって、

各回に何に取り組んでどのような進展があったかを記録して、最後のレポートに含めることにします。「~~を

やった。」という記述だけではなく、作成したモノの写真、作業中の画面をキャプチャした画像、作成したプログ

ラムなどを一緒に記録しておいて下さい。週によって作業の進み具合がある程度異なるのはやむを得ないですが、

毎週少しずつでも進めるように取り組んで下さい。

8 第 3 章日程

9

第 4章

準備

4.1 ソフトウェア、ハードウェア

• Ubuntuが動くノート PCを用意する。

• 各自、製作するロボットの内容とそこで使用するソフトウェア、ハードウェアの要素技術を考える。必要な

パーツを考えておく。

• 自分が作ろうとするロボットで必要となる技術で、例えば次に示す必要とされる知識で不足する分野があれ

ば事前に勉強しておく。

• ソフトウェアを選択する場合、ROS, Gazeboが使えるようにしておく。

4.2 必要とされる知識

• Linux, Ubuntuの基本操作

• Pythonのプログラミング

• ROSの基本的な機能の理解とツールの使い方、簡単なプログラム作成

• ROSのトピック、サービスを使った簡単な通信プログラム作成

• RasPiの機能、デバイスを接続するための電子回路の基礎知識

• URDFで記述したロボットモデルを GAZEBO上で動かす方法

• Web上のインタフェースを作成するための HTMLの基礎知識

これらは、学部のいくつかの科目で学んだものが多いと思われるが、未知のもの、知識が不十分なものは自分で

補っておくこと

11

第 5章

文献検索について

初回は日程の 1回目にある、ロボットインテグレーションの現状の調査をしてみて下さい。インターネットやデー

タベースなどを使って、ロボットインテグレーション、すなわち、様々な技術を統合してロボットを構成するため

の元になる考え方や理論があるかどうか調べてみます。もし参考になる良い文献や資料が見つかったら PDFをダ

ウンロードしておいてください。また、それらを読んでまとめたものを報告書の最初の内容として下さい。

検索するときは、インターネットでの検索は通常の検索に加えて、学術用の Google Scholarなど、データベースの

検索は図書館のページから、

中部大学附属三浦記念図書館

外部データベース

CiNii Articles (日本の論文)

Web of Science(海外の論文)

日経 BP記事検索サービス -> 日経 Robotics(ロボット関連の最新の記事)

などを利用するのがよいと思います。他にも適切な調査手法があれば、それらも駆使してもらって構いません。

上記の 3個のデータベースは学外からの利用だと個人認証を求められるものがありますが、中部大学の IDが通る

はずです。

図書館の提供する外部データベースは、学内からなら様々なものが利用できますが、学外からの利用が可能で役に

立ちそうなものは意外と少なくそれ程ありませんでした。

データベースの検索ではキーワードの組み合わせを求められますが、その組み合わせによって結果が全く変わって

くるので、関係ありそうな様々なワードの組み合わせをなるべく多く試すと、望みの結果を得られる可能性が高く

なります。

13

第 6章

Flask

Flaskは Pythonで記述されている、Webアプリケーションを開発するためのフレームワークである。Flaskを利用

するとWebブラウザから所定の URLでアクセスされた時に、その時点でコンテンツが動的に生成される。すなわ

ち、静的なコンテンツを表示するだけでなく、ユーザからの入力により実行時に動的に表示内容や動作を変更でき

るコンテンツ (Webアプリケーション)を制作できる。また FlaskはWebサーバの機能も提供するので、プログラ

ムを作成すれば、すぐにWebブラウザから動作を確認できる。

上記の特性を活用して、ロボットの動作を指示したり、状態を確認したり、センサで得た情報をユーザに提示する

シンプルなWebアプリケーションを制作して、ロボットのインタフェースとして利用する。

制作するWebアプリケーションはWebブラウザさえあれば利用できるので、ロボットがインターネットに接続さ

れていれば、どこからでも動作を制御できる。例えば、自宅からロボットを動かしたり、停止させたり、ロボット

のカメラにより撮影された画像を見ることが可能になる。

Flaskを利用するには Python, HTMLの知識が必要となるので、それらについてわからない点があれば勉強、練習

しておこう。

6.1 環境の準備

Python3がインストールされているか確認する。インストールされていれば version番号が表示される。

$ python3 --version

Python 3.6.9

version番号が表示されない場合は次のコマンドでインストールする。

$ sudo apt update

$ sudo apt install python3

次に Flaskをインストールする時に使用する pip3がインストールされているか確認する。インストールされてい

れば version番号が表示される。

Robot Integration

$ pip3 --version

pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)

version番号が表示されない場合は次のコマンドでインストールする。

$ sudo apt install python3-pip

pip3を使用して Flaskをインストールする。

$ sudo pip3 install -U flask

6.2 起動と動作確認

配布されたサンプルプログラムを適当なディレクトリに展開する。ディレクトリは次のような構成になっている。

flask---------------

|

doc-------------

|

static----------

|

templates-------

それぞれのディレクトリは次のようなファイルを含んでいる。static, templatesの名前は固定なので変更できない。

doc 参考にしたドキュメントが置いてある。実行には関係ない。

static 静的なファイルが置いてある。画像など、実行時に変更されないファイルである。ここにあるファイルは

実行時にアクセスすることができる。他のディレクトリにあるファイルはアクセスできない。

templates htmlのテンプレートファイルが置いてある。

ディレクトリ flask直下にある、app?.pyが Flaskのプログラムである。プログラムの名前は abc.pyなど、何でも

よい。

次のコマンドで起動する。

$ python3 app1.py

正常に起動されると、次のようなメッセージが表示される。

* Serving Flask app "app1" (lazy loading)

* Environment: production

WARNING: This is a development server. Do not use it in a production deployment.

Use a production WSGI server instead.

(次のページに続く)

14 第 6 章 Flask

Robot Integration

(前のページからの続き)

* Debug mode: on

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

* Restarting with stat

* Debugger is active!

* Debugger PIN: 579-106-066

大事なのは http://127.0.0.1:5000/で、この URLで接続できることを示している。このプログラムは Flaskを実行

している PC内のアクセスのみ許可する設定になっているので、別の PCや端末からはまだアクセスできない。

Web ブラウザを起動して、URL として http://127.0.0.1:5000/ を指定すると Flask が生成する Web ページが表示

される。app1.py はメッセージを表示するだけのシンプルなものなので、メッセージが1行表示される。URL に

よって表示を変えるようにしてあるので、http://127.0.0.1:5000/page2 にアクセスすると異なるメッセージが表示

される。

Flaskの実行を停止するときは、CTRL+Cを入力する。

図 6.1 app1-top

6.2. 起動と動作確認 15

Robot Integration

図 6.2 app1-page2

6.3 Flask のプログラミング

では app1.pyの記述内容を見てみよう。Flaskの機能の詳細は参考資料に挙げてある様々な資料に記述されている

ので、それらを参照するとよい。ここでは最低限のプログラムで、Flaskのプログラミングの基本要素を確認する。

リスト 6.1 app1.py

1 from flask import Flask

2

3 app = Flask(__name__)

4

5 @app.route('/')

6 def hello():

7 message = "Hello World."

8 return message

9

10 @app.route('/page2')

11 def good():

12 message = "This is 2nd page."

13 return message

14

15 if __name__ == "__main__":

16 app.run(debug=True)

(次のページに続く)

16 第 6 章 Flask

Robot Integration

(前のページからの続き)

17

18 ## Usage:

19 ## http://127.0.0.1:5000/

20 ## http://127.0.0.1:5000/page2

• 1行目は、Flaskのモジュールを読み込む指定である。定型、変更不要。

• 3行目は、Flask型のオブジェクトのインスタンスを生成する。定型、変更不要。

• 5行目からは、指定されたURLに固有の処理を関数として定義している。route('/')は  http://127.0.0.1:5000/

に対応する。関数名は hello() で、処理ではメッセージを定義して return で返す。通常、Flasuk において

returnで返す値は html形式である。この例では簡単にするために単純な文字列にしている。

• 10行目からは、別の URL route('/page2')の処理を定義している。http://127.0.0.1:5000/page2に対応する。

• 15,16行目は、モジュールではなく単独のアプリケーションとして起動された時の動作を定義している。定

型、変更不要。

• 18行目以降は、コメントで実行には影響しない。

Flaskのプログラムの典型的な記述はこのようになる。一般的には、アクセスされた時の URLに応じて、固有の

表示内容や動作を、プログラムによりその場で生成していると言える。この例では一定の文字列を出力するだけで

あったが、実用的なアプリケーションでは、Pythonの機能により、計算をしたり、より複雑な処理により表示する

内容を生成することになる。

データの入力、画像の表示、テンプレート機能などを含む、より複雑なプログラムの例が app7.pyである。

$ python3 app7.py

このプログラムは別の PCや端末からのアクセスを許可しているので、Flaskを実行している PCの IPアドレスが

わかれば、同じネットワークに接続している他の端末からアクセスできる。IPアドレスは次のコマンドで確認でき

る。結果の表示は関係ない部分を一部省略している。結果に inetというエントリがあるので、その右が IPアドレ

スになる。無線 LANルータに接続している場合は、一般的に割り当てられるアドレスは 192.168.???.??? になる。

$ ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen

↪→1000

...

inet 127.0.0.1/8 scope host lo

...

2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group

↪→default qlen 1000

...

inet 192.168.10.11/24 brd 192.168.10.255 scope global dynamic noprefixroute enp2s0

...

(次のページに続く)

6.3. Flask のプログラミング 17

Robot Integration

(前のページからの続き)

3: wlp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group

↪→default qlen 1000

...

inet 192.168.10.12/24 brd 192.168.10.255 scope global dynamic noprefixroute wlp1s0

...

例として、Flaskを実行している PCの IPアドレスが 192.168.10.11だと仮定すると、同じネットワークに接続し

ているスマホなどのWebブラウザから、 http://192.168.10.11:5000/にアクセスすると Flaskが生成するコンテン

ツを見ることができる。以下は app7.pyにより生成されたページである。

図 6.3 app7-top

app7.pyが実現している機能は、参考資料などで調べて少しずつ理解、使えるようにしよう。

RasPiを使う場合には、同じことを RasPi上で実現すれば RasPiとスマホなどで直接データのやり取りが可能にな

る。ロボット上で RasPiをコントローラとして使用する場合、ディスプレイ、キーボード、マウスなどは使えない

18 第 6 章 Flask

Robot Integration

図 6.4 app7-page2

ので、FlaskによるWebインタフェースを用意しておくと操作が楽になる。

Flaskで得たデータを別のプログラムとやり取りする方法は後に取り上げる。

6.3. Flask のプログラミング 19

21

第 7章

参考資料

この講義で利用するハードウェア、ソフトウェアの各種の技術について、参考になる資料を公開しているサイトは

数多くあるが、例えば以下のサイトがある。

それぞれの技術について、複数の資料を読み比べると平均的な使い方や全体像が見えてくる。一つの資料だけを参

考にすると、偏った説明になっている場合があるので、なるべく多くの資料を比較、参照するのが望ましい。

7.1 Linux

• https://linuc.org/textbooks/linux/

• https://linuc.org/textbooks/admin/

7.2 ROS, Gazebo

本家

• http://gazebosim.org/tutorials

• http://wiki.ros.org/urdf

• http://wiki.ros.org/xacro

その他

• https://demura.net/education/lecture/15483.html

• https://qiita.com/RyodoTanaka/items/c3014fd6d0f06d12814f

• http://www.slideshare.net/akio19937/1rosrosgazebo

• http://cir-kit.github.io/blog/categories/gazebo/

Robot Integration

• http://qiita.com/MoriKen/items/613635b90f3a98042dc5

7.3 Flask

本家とその翻訳

• https://flask.palletsprojects.com/en/1.1.x/

• https://msiz07-flask-docs-ja.readthedocs.io/ja/latest/tutorial/index.html

• https://a2c.bitbucket.io/flask/

その他

• https://qiita.com/nagataaaas/items/3116352da186df102d96

• https://www.python.ambitious-engineer.com/archives/1630

• https://paiza.jp/works/flask/primer/beginner-flask1/6404

• https://blog.codecamp.jp/programming-python-flask

• https://qiita.com/ynakayama/items/2cc0b1d3cf1a2da612e4

• https://qiita.com/zaburo/items/5091041a5afb2a7dffc8

• https://answers.ros.org/question/234418/easiest-way-to-implement-http-server-that-can-send-ros-messages/

• https://rostful.readthedocs.io/en/latest/readme_link.html

• https://qiita.com/gsacademy_tokyo/items/16cba215a0cd921df87f

22 第 7 章参考資料

23

第 8章

Indices and tables

• genindex

• modindex

• search

top related