ROS学習メモ
「ROS.org」
____________________________________________
「ROSの総合サイト」
———————————————————————————————
「ROS上でV-REP内のモデルを動かす」
ROSを使っていて、シミュレーションをするとなるとGazeboが主流
V-REPはロボットシミュレーショn
多言語で操作できる
————————————————————————————————
「Matlab Robot Simulation with V-REP」
「オンラインROS勉強会37」
「Really Useful AI Robot Build」
「Tensorflowを使ってROS上でMNISTをやるノードを立てる」
中村研究室github
「ロボットミドルウェア」
オブジェクト指向 = カプセル化と覚えておけばOK
ロボットミドルウェアはロボットシステム構築を効率化するための共通機能を提供する基盤ソフトウェア
産総研RTミドルウェア
OpenRTM-aist
分散オブジェクト指向システムのミドルウェアであるCORBAをベースとして
ROS
ROS2はこれまでとは大きくアーキテクチャの異なるミドルウェアである
ROS1の仕組み
ノード:ROSのモジュール化単位
マスター:ノードの参照やトピックを保持するネームサービス
パラメータサーバ:ノードのパラメータを保持するデータベース
rosout:ノードに対して、stdout, stderrのような役割
マスター関係の通信にはXMLRPC、トピックベースの通信は独自のROS msg形式
ROS messageは自前でIDLコンパイラ、シリアライザ・デシリアライザ、スタブなどを実装
結局のところCORBAと同じ
単一のロボット
ワークステーションクラスの計算機パワー
非リアルタイム
良こうな通信環境
学術研究向け
ROS1からROS2へ
複数のロボット
組み込みCPU
リアルタイム
Zeroconf, Protocol Buffers, ZeroMQ, Redis, WebSockets, DDSなど新技術
Player/Stage and Gazebo
Player
ロボット用ネットワークサーバ
移動ロボット制御のための一連の共通インターフェースを提供するプラットフォーム
Stage
二次元のビットマップベースの環境において移動ロボット、センサ、オブジェクト群をシミュレートする
マルチエージェント研究のために設計
Gazebo
屋外環境のマルチロボットシミュレーション環境を提供
3次元移動ロボットシミュレーション環境
OROCOS
OPRoS
YARP
Microsoft Robotics Studioなど
「ROS Development Studioを使ってみる」
ROS WORLD
プログラミングROS
ROSはロボットに様々な動作をさせるためのオープンソースフレームワークである
ビット操作やデバイスドライバーに時間を使うのではなく、より多くの時間をロボット工学のために費やせる
ROSは複数の構成要素からなる
1 抽象化され、わかりやすく定義されたドライバー群
2 様々な、そして、現在も増加しているアルゴリズム群
3 データを移動し、複雑なロボットシステムの様々な構成要素をつなげ、自作のアルゴリズムと連動させることを可能にする完全な計算処理基盤
4 様々なツール群
5 ROSの巨大なエコシステム
なぜROSを勉強しなければいけないかというと、時間短縮につながるからである
第一部 基礎
1章 イントロダクション
真にロバストで汎用的なロボットのソフトウェアを開発することは難しい
ペアツーピア:ROSは互いに接続された無数の小さなコンピュータプログラムで構成され、それらは常にメッセージを送り合っている
ツールベース:長く使われているUnixアーキテクチャが示しているように、複雑なソフトウェアシステムはたくさんの小さな汎用的なプログラムで構成することができる、ROSは独立したプログラムで構成されているので、新しく実装したり、実装を改善するのが楽
多言語対応:多くのソフトウェア開発はPythonやRubyといった生産性の高いスクリプト型の言語を使うことでより簡単になるがパフォーマンスが必要なときはC++などにする必要がある
薄く実装:ROSの慣習として、開発者はまずスタンドアローンのライブラリを作り、その後、他のROSモジュールにメッセージを送受信できるようにするためのラップレイヤーを設けることを勧めている
無償かつオープンソース:ROSのコアは寛容的なBSDライセンスのもとに公開されており、商用と非商用の利用が可能
2章 準備
ROSでコードを書き始める前に、このフレームワークを支えるキーとなる概念のいくつかを紹介する
ROSグラフ
3章 トピック
4章 サービス
5章 アクション
6章 ロボットとシミュレーター
7章 Wander-bot
第二部 ROSを使って動き回る
8章 Teleop-bot
9章 環境の地図を作る
10章 世界を動き回る
11章 Chess-bot
第三部 知覚と振る舞い
12章 Follow-bot
13章 巡回
14章 Stockroom-bot
第四部 ROSに組み込む
15章 新しいセンサーとアクチュエーター
16章 自作の移動ロボット
17章 移動ロボットパート2
18章 ロボットアーム
19章 ソフトウェアライブラリを利用する
第五部 ヒントとコツ
20章 ツール
21章 ロボットの振る舞いをデバッグする
22章 ROSコミュニティー:オンラインリソース
23章 ROSでC++を使う
ROS—ロボットプログラミングバイブル—
第1章 ロボットソフトウェアプラットフォーム
プログラムの再利用性
全体の処理を小さな単位に分割し、要求仕様によって必要な処理を組み替えて全体の処理が実現できれば柔軟性と再利用性の高いシステムが実現できる
個々の実行単位をノードという
ROSはノード間でデータを送受信する仕組みを提供している
豊富な開発ツールがある
第2章 Robot Operating System
ROSはOS上で動作するMeta-Operating Systemである
特徴
・分散プロセス
・パッケージ管理
・公開レポジトリ
・APIの整備
・多数のプログラミング言語をサポート
第3章 ROSの開発環境の構築
インストールと動作テスト
第4章 ROSの主要概念
メッセージ通信、メッセージファイル、ネーム、座標変換、クライアントライブラリ、異機種デバイス間の通信、ファイルシステム、ビルドシステムなどについて説明
マスタ
ノードとノードの間を接続し、メッセージ通信を行うためのネームサーバと同様の役割
roscoreによって起動できる
マスタには実行中の各ノードの名前が登録され、他のノードはその情報を問い合わせることができる
ノード
ROS内で実行させる最小のプロセス
実行可能な1つのプログラム
センサドライバ、センサデータの変換、障害物検出、モータの駆動、エンコーダの入力、ナビゲーションなど目的ごとにノードを分ける
パッケージ
プログラムの集合であり、ROSソフトウェアの基本単位
メタパッケージ
共通の目的を持つパッケージの集合
メッセージ
ノードは他のノードとメッセージをやり取りしデータを交換する
トピック
いわゆる話題
ノードのパブリッシャはトピック名をマスタに登録し、そのトピックの具体的な内容をメッセージで定めた形式で他ノードに送信する
パブリッシャ/パブリッシュ
パブリッシャはトピックを用いたメッセージでーたの送信のこと
サブスクライブ/サブスクライバ
トピックを通じたメッセージデータの受信のこと
サービス
サービス通信は同期通信方式でありサービス要請とサービス応答を用いた双方向通信を行う
サービスサーバ
サービスサーバはサービスクライアントからサービス要請を受け取ると、指定された処理を実行した後、その結果をサービスクライアントに送信する
サービスクライアント
サービスサーバにサービスを要請し、その結果を受け取る
アクション
サービスに似た双方向通信方式であるが、要請から応答まである程度時間が必要なときに使用される非同期通信方式である
アクションサーバ
アクションサーバはアクションクライアントから目標を取得し、フィードバックおよび結果を送信する
アクションクライアント
アクションサーバに目標を送信し、フィードバックおよび結果を送信する
パラメータ
パラメータはノードの処理に影響を与える変数
パラメータサーバ
パラメータを登録するサーバ
catkin
ROSのビルドシステム
CMakeを拡張したビルドシステム
roscore
マスタを実行するコマンド
rosrun
1つのノードを実行する時に使用されるコマンド
roslaunch
複数のノードを実行する時に使用されるコマンドである
ノードの実行に必要なパッケージのパラメータの変更、ノード名の変更、ノードネームスペースの設定、ROS_ROOTトROS_PACKAGE_PATHの設定、環境変数の変更などができる
bag
ROSではデータ通信で送受信されるメッセージをbagファイルとして記述することができる
グラフ
ノード、トピック、パブリッシャ、サブスクライバの関係はグラフ形式で確認できる
ネーム
ノード、パラメータ、トピック、サービスはそれぞれネームを持つ
ネームはマスタに登録され、ノードのパラメータ、トピック、サービスなどを利用する際に参照される
クライアントライブラリ
ROSでは言語依存性を抑えるため、クライアントライブラリを採用している
MD5
128ビット暗号化ハッシュ関数
RPC
離れた場所のコンピュータ上のプログラムから別のコンピュータ上の処理を呼び出すこと
XML
XMLは用途に合わせて拡張可能なマークアップ言語である
タグを用いてデータ構造を記述でき、様々な用途で使用される
XMLRPC
RPCプロトコルの一種である
CMakeLists.txt
ROSのビルドシステムであるcatkinはCMakeを利用している
package.xml
パッケージの名称、ライセンス、パッケージ依存性などパッケージ情報を記載したXMLファイルである
第5章 ROSコマンド
実際に頻繁に使用されるコマンドは30種類くらい
シェルコマンド、実行コマンド、情報コマンド、catkinコマンド、パッケージコマンドに分けられる
第6章 ROSツール
5章のコマンド以外にもユーザが開発し公開したものも含めて様々なツールがあり、ROSでのプログラミングを手助けしてくれる
本章では頻繁に利用される以下のツールについて
Rviz, rqt, rqt_image_view, rqt_graph, rqt_plot, rqt_bag
第7章 ROS基本プログラミング
メッセージ、トピック、サービス、アクション、パラメータはROSにおいて重要である
ここではトピック、サービス、アクション、パラメータについて実例を交えて説明する
第8章 ロボット、センサ、モータ
代表的なロボットパッケージ、センサパッケージ、モータパッケージについて説明した後、その他の公開パッケージの検索方法や使用方法について説明する
ロボットパッケージ
使用したいロボットが公式ROSパッケージに登録されていれば、ソースコードのダウンロードとインストールは簡単であり、すぐにロボットを利用できる
センサパッケージ
カメラ
深度カメラ
深度カメラは深度を測定できるカメラである
モータ駆動に関するパッケージ
第9章 組み込みシステム
ロボットを構成するハードウェアへのアクセスやリアルタイム制御を実現するためにロボットでは組み込みシステムが用いられる場合が多い
ROSでは組み込みシステムをサポートするためにROSのメッセージ、トピック、サービスなどをシリアル通信で利用できるrosserialなどを提供している
第10章 移動ロボット
TurtleBotでの移動について
第11章 SLAMとナビゲーション
環境地図を作成するためにSLAM技術と作成された地図を用いて特定の場所へロボットを誘導するナビゲーション技術はROSが提供するパッケージの中でも最も頻繁に使用されている
第12章 配達サービスロボットシステム
SLAMとナビゲーションに関するパッケージを用いて手軽に構築でき、実際に運用も可能な配達サービスロボットシステムの例を紹介する
第13章 マニピュレータ
マニピュレータの動作制御のための統合ライブラリはMoveItである
MoveItではモーションプランニングのための高速な順逆運動学計算、マニピュレーションのための高度なアルゴリズム、ロボットハンドの制御、動力学、コントローラと動作計画など様々な機能を提供している