ついに誰かがROSロボットオペレーティングシステムをわかりやすく説明しました

ついに誰かがROSロボットオペレーティングシステムをわかりやすく説明しました

01 ROS入門

多くの初心者は、ロボットのオペレーティングシステムと聞いて、「オペレーティングシステム」という言葉に怖気づくかもしれません。実際、簡単に言えば、ROS はプログラム プロセス間の通信をより便利にする分散通信フレームワークです。

ロボットは通常、複数の部分で構成されており、各部分にはロボットの動きや視聴覚機能などを実現するための対応する制御プログラムがあります。では、ロボット内、または複数のロボットで構成されるロボット群内でこれらのコンポーネントをどのように調整するのでしょうか?このとき、分散コンポーネントが相互に通信できるようにする必要があります。マルチロボット クラスターでは、これらの分散コンポーネントも異なるロボットに分散されます。この分散通信の問題を解決することこそが、ROS が設計された目的です。

ROS の開発とソースコードの貢献に参加する人が増えるにつれて、コミュニティには多数のサードパーティ ツールと実用的なオープン ソース ソフトウェア パッケージが登場し、ROS は今日の姿になりました。

初心者がよく混乱するのは、「ROS を学ぶことはロボット開発を学ぶことを意味するのか?」ということです。もちろん違います。厳密に言えば、ROS は単なる通信フレームワークです。ロボット内のさまざまなアルゴリズムやアプリケーションは、依然として C++ や Python などの一般的なプログラミング言語を使用して開発されています。

1. ROSのパフォーマンス特性

ROS を正式に学習する前に、まず ROS のいくつかの機能、つまりメタオペレーティングシステム、分散通信メカニズム、疎結合ソフトウェアフレームワーク、豊富なオープンソース関数ライブラリなどを紹介し、誰もが直感的に理解できるようにします。

ROS はロボット工学のためのメタオペレーティングシステムです。言い換えれば、これは真のオペレーティング システムではありません。基盤となるタスク スケジューリング、コンパイル、デバイス ドライバーなどは、ネイティブ オペレーティング システムである Ubuntu Linux によって実行されます。

ROS は実際には Ubuntu Linux 上で実行されるサブオペレーティングシステム、つまりソフトウェアフレームワークですが、ハードウェア抽象化、関数呼び出し、プロセス管理などのオペレーティングシステムのような機能を提供します。また、取得、コンパイル、クロスプラットフォームのための機能とツールも提供します。

ROSの核となる考え方は、ロボットのソフトウェア機能をノード化し、ノード同士がメッセージを送信して通信することです。これらのノードは、同じホスト、異なるホスト、さらにはインターネット上に展開できます。 ROS ネットワーク通信メカニズムのマスター ノードは、ネットワーク内の各ノード間の通信プロセスを管理およびスケジュールする役割を担い、ネットワーク内のグローバル パラメータを構成するためのサービスも提供します。

ROS は、分散通信メカニズムを使用してノード間のプロセス通信を実装する、疎結合のソフトウェア フレームワークです。 ROS のソフトウェア コードは疎結合方式で構成されており、柔軟な開発プロセスと簡単な管理および保守が可能です。

ROS には豊富なオープンソース関数ライブラリがあります。 ROS は BSD (Berkeley Software Distribution) プロトコルに基づくオープンソース ソフトウェアであり、誰でも変更、再利用、再配布し、商用製品やクローズド ソース製品で使用することができます。ROS を使用すると、独自のロボット プロトタイプをすばやく構築できます。

2. ROS リリース

Linux ディストリビューションと同様に、ROS ディストリビューションには、ROS システムをパッケージ化してネイティブ システムにインストールする、一般的に使用される一連の関数パッケージが組み込まれています。 ROS はもともと Ubuntu システムをベースに開発されました。ROS のリリース バージョンの名前も Ubuntu と同じ規則に従います。つまり、バージョン名は最初の文字が同じ 2 つの英語の単語で構成され、バージョンの最初の文字はアルファベットの昇順で選択されます。図 1-1 に、ROS のいくつかの主要なバージョンを示します。


▲図1-1 ROSの主なバージョン

3. ROSの学習方法

ROS を習得し、使いこなすためには、多くの実践的な操作が必要です。したがって、ROS のコアコンセプトとプログラミングパラダイムを素早く理解した後、多数の実践的なプロジェクトを組み合わせて ROS を深く理解する必要があります。問題を正しい方法で解決することを学ぶと、能力をより早く向上させることができます。 ROS の主な学習リソースは次のとおりです。

  • 公式サイト: www.ros.org
  • ソースコード: github.com
  • ウィキ: wiki.ros.org
  • Q&A: answers.ros.org

02 ROSシステムアーキテクチャ

ROS をインストールした後、多くの友人はすぐにプログラムを書き始めるのを待ちきれません。 ROS のアーキテクチャは比較的複雑なので、後で出てくるさまざまな概念を理解しやすくするために、まず ROS のシステム アーキテクチャについて説明し、誰もが ROS のさまざまな概念を包括的に把握できるようにします。公式声明によると、ROS アーキテクチャは、計算グラフ、ファイルシステム、オープンソースコミュニティの観点から理解できます。

1. 計算グラフの観点からROSアーキテクチャを理解する

ROS の実行可能プログラムの基本単位はノードと呼ばれます。ノードはメッセージ メカニズムを通じて相互に通信し、図 1-3 に示すように、計算グラフとも呼ばれるネットワーク グラフを形成します。


▲図1-3 ROS計算グラフ構造

ノードは実行可能プログラムであり、一般的にプロセスとも呼ばれます。 ROS 関数パッケージで作成された各実行可能プログラムは、起動されてシステム プロセスにロードされた後、図 1-3 のノード 1、ノード 2、ノード 3 などの ROS ノードになります。

ノードは、メッセージの送受信によって互いに通信します。メッセージの送受信メカニズムは、トピック、サービス、アクションの 3 種類に分かれています。たとえば、図 1-3 では、ノード 2 と 3、ノード 2 と 5 はトピック通信を使用し、ノード 2 と 4 はサービス通信を使用し、ノード 1 と 2 はアクション通信を使用します。計算グラフ内のノード、トピック、サービス、およびアクションには、識別子として一意の名前が必要です。

ROS はノードを使用してコードと機能を分離し、システムのフォールト トレランスと保守性を向上させます。したがって、すべてをカバーする単一の巨大なノードを作成するのではなく、各ノードに特定の単一の機能を持たせる方が適切です。 C++ でノードを作成する場合は、ROS が提供する roscpp ライブラリを使用する必要があります。Python でノードを作成する場合は、ROS が提供する rospy ライブラリを使用する必要があります。

メッセージは計算グラフを構築するための鍵であり、メッセージ メカニズムとメッセージ タイプという 2 つの部分で構成されます。メッセージメカニズムには、トピック、サービス、アクションの 3 種類があります。各メッセージメカニズムで送信されるデータには、特定のデータ タイプ (つまり、メッセージ タイプ) があります。メッセージ タイプは、トピック メッセージ タイプ、サービス メッセージ タイプ、アクション メッセージ タイプに分けられます。メッセージメカニズムとメッセージタイプについては、セクション 1.5 で詳しく説明します。

データ パケット (rosbag) は、トピック内のデータを保存および再生するために特別に使用される ROS のファイルです。収集が難しい一部のセンサー データは、データ パケットを使用して記録し、繰り返し再生してアルゴリズムのパフォーマンスをデバッグすることができます。

パラメータ サーバーは、ROS ネットワーク全体のノードに対して簡単に変更できるパラメータを提供できます。パラメータは、外部から変更できるノード内のグローバル変数と見なすことができます。静的パラメータと動的パラメータがあります。静的パラメータは通常、ノードの起動時にノードの動作モードを設定するために使用されます。動的パラメータは、モーター制御ノードの PID 制御パラメータなど、ノードの実行中にノードを動的に構成したり、ノードの動作状態を変更したりするために使用できます。

マスター ノードは、各ノード間の通信プロセスのスケジュールと管理を担当します。したがって、最初にマスター ノードを起動する必要があります。これは、roscore コマンドを使用して起動できます。

2. ファイルシステムの観点からROSアーキテクチャを理解する

ROS プログラムのさまざまなコンポーネントは、さまざまなフォルダに配置する必要があります。これらのフォルダは、さまざまな機能に応じてファイルを整理します。これが、図 1-4 に示す ROS のファイル システム構造です。


▲図1-4 ROSファイルシステム構造

ワークスペースは、関数パッケージ、コンパイル パッケージ、およびコンパイルされた実行可能ファイルを含むフォルダーです。ユーザーは、必要に応じて複数のワークスペースを作成し、各ワークスペースでさまざまな目的の関数パッケージを開発できます。図 1-4 では、src、build、devel の 3 つのフォルダーを含む catkin_ws という名前のワークスペースを作成しました。

  • src フォルダーには、さまざまな関数パッケージと、関数パッケージを構成する CMake 構成ファイル CMakeLists.txt が含まれています。ここで、ROS のソースコードは catkin ツールを使用してコンパイルされており、catkin ツールは CMake テクノロジに基づいているため、src ソースファイルスペースと各関数パッケージに CMake 構成ファイル CMakeLists.txt が表示されます。このファイルは構成コンパイルの役割を果たします。
  • ビルド フォルダーには、CMake および catkin 関数パッケージをコンパイルするときに生成されるキャッシュ、構成、中間ファイルなどが含まれます。
  • devel フォルダーにはコンパイルされた実行可能プログラムが含まれており、インストールせずに直接実行できます。機能パッケージのソース コードをコンパイルしてテストすると、コンパイルされた実行可能ファイルを直接エクスポートして他の開発者と共有できるようになります。

関数パッケージは、ROS におけるソフトウェア構成の基本的な形式です。ROS プログラムを作成するための最小限の構造とコンテンツを持ちます。ROS ノードのソース コード、スクリプト、構成ファイルなどが含まれます。

  1. CMakeLists.txt は機能パッケージ構成ファイルであり、Cmake 機能パッケージをコンパイルするときにコンパイル構成をコンパイルするために使用されます。
  2. package.xml は機能パッケージのマニフェスト ファイルであり、XML タグ形式を使用して、パッケージ名、開発者情報、依存関係など、機能パッケージのさまざまな関連情報をマークし、主に機能パッケージのインストールと配布を容易にします。
  3. include/<pkg_name> は関数パッケージ ヘッダー ファイル ディレクトリであり、関数パッケージ プログラムに含まれる *.h ヘッダー ファイルを配置できます。インクルード ディレクトリが第一レベルのパス <pkg_name> を追加する理由は、自己定義ヘッダー ファイルとシステム標準ヘッダー ファイルを区別しやすくするためです。<pkg_name> は、実際の関数パッケージの名前に置き換えられます。ただし、このフォルダーは必須ではありません。たとえば、一部のプログラムにはヘッダー ファイルがありません。
  4. 3 つのフォルダー msg、srv、action は、それぞれ非標準トピック メッセージ、サービス メッセージ、アクション メッセージの定義ファイルを保存するために使用されます。 ROS は、メッセージ通信で使用されるユーザー定義のメッセージ タイプをサポートします。プログラムが標準のメッセージ タイプのみを使用する場合、これらのカスタム メッセージは必要ありません。
  5. スクリプト ディレクトリには、Bash や Python などのスクリプト ファイルが格納されますが、必須ではありません。
  6. 起動ディレクトリには、ノードの起動ファイルが格納されます。 *.launch ファイルは、1 つ以上のノードを起動するために使用されます。これらのファイルは、複数のノードを持つ大規模なプロジェクトでは非常に便利ですが、必須ではありません。
  7. src ディレクトリには、関数パッケージ ノードに対応するソース コードが格納されます。関数パッケージには、さまざまな機能を実行するための複数のノード プログラムを含めることができ、各ノード プログラムは独立して実行できます。ここの src ディレクトリには、これらのノード プログラムのソース コードが格納されます。必要に応じてフォルダーとファイルを作成し、ソース コードを整理できます。ソース コードは、C++、Python などで記述できます。

3. オープンソースコミュニティの観点からROSアーキテクチャを理解する

ROS はオープンソース ソフトウェアです。独立したオンライン コミュニティがソフトウェアやチュートリアルを共有、提供し、図 1-5 に示すように強力な ROS オープンソース コミュニティを形成しています。


▲図1-5 ROSオープンソースコミュニティ構造

ROS の開発は、オープンソースと共有ソフトウェアに依存しています。これらのコードは、GitHub ソースコード共有、Ubuntu ソフトウェア リポジトリ リリース、サードパーティ ライブラリなど、さまざまな組織によって共有およびリリースされています。 ROS の公式 wiki は重要なドキュメント ディスカッション コミュニティであり、対応するドキュメント ページを簡単に公開および変更できます。 ROS 回答ホームページには、ROS 開発者からの質問と回答が多数掲載されており、ROS 開発で遭遇するさまざまな問題について活発な議論が行われています。

著者について: 深セン瑞思インテリジェントドライビングテクノロジー株式会社 CEO、張 胡彼はかつて深セン市知能ロボット研究所に勤務し、ロボットの自律航行に関する研究プロジェクトを率いていました。彼は仕事中、「小虎大好き学習兄さん」というオンライン名で、知乎、CSDN、bilibiliなどのプラットフォーム上でロボットSLAMナビゲーションに関する高品質のブログ記事やビデオチュートリアルを多数作成し、大多数のネットユーザーから深く愛されました。彼は強力な人工知能の研究に非常に興味を持っており、高度な知能を備えたロボットの産業化に尽力しています。

この記事は「ロボット SLAM ナビゲーション: コア技術と実践」から抜粋したもので、出版社の許可を得ています。 (ISBN: 9787111697428)

<<:  完全武装したこの「アイアンマン」は、走ったり、人命を救ったり、さらには飛行可能な初のヒューマノイドロボットになるかもしれません。

>>:  自動運転の3D視覚認識アルゴリズムを理解するための1万語

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

CNN 推論エンジンを使用して IoT デバイスにディープラーニングを実装するにはどうすればよいですか?

[[212457]]ディープラーニング技術により、モノのインターネット (IoT) デバイスは非構...

多くの国で人工知能産業が発展を加速している(国際的視点)

[[358162]]コアリーディング人工知能は、世界的な科学技術革命と産業変革の新たな流れを導く重...

研究者:AIモデルの「推論」はより多くの電力を消費し、業界の電力消費は2027年に「オランダに匹敵する」ようになる

今週10月13日、Cellの姉妹誌Jouleは「人工知能の増大するエネルギーフットプリント」と題する...

日常生活におけるAIの優れた活用例

人工知能は、テクノロジーやビジネスの世界で広く議論されている人気のテクノロジーの 1 つです。 さま...

2018 年のビッグデータ、機械学習、人工知能の予測!

AI へのビッグデータ投資は減速の兆しを見せていません。今後 1 年間の予測をいくつかご紹介します...

...

...

深さ優先探索 (DFS) と幅優先探索 (BFS) の 2 つのアルゴリズムの詳細な説明

序文深さ優先探索 (DFS) と幅優先探索は、グラフ理論における非常に重要な 2 つのアルゴリズムで...

...

スマートグリッドディスパッチ自動化の詳細な説明

インテリジェントディスパッチ自動化は、スマートグリッドの運用に不可欠なインテリジェントシステムです。...

人工知能開発の現状と将来動向の分析

人工知能、またはよく「AI」(英語の正式名称:Artificial Intelligence)と呼ば...

...

スマートビルディングにおけるエッジAIの役割を解明

仕事や住居のための物理的な空間として機能することから、入居者に活気ある建築体験を提供することまで、近...

写真を3Dに変換する品質が急上昇! GitHub がショートポジションをオープンしたところ、300 人以上がスターを付けました

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...