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

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

この記事はWeChatの公開アカウント「Big Data DT」から転載したもので、著者はZhang Huです。この記事を転載する場合は、Big Data DT パブリックアカウントにご連絡ください。

1. 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

2. 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 ノードのソース コード、スクリプト、構成ファイルなどが含まれます。

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

<<:  改良された ResNet が Transformer を上回り、アーキテクチャの戦いが再燃します。著者は「革新はない」と述べた

>>:  3億7500万人の労働者が転職する?人工知能が代替できない分野はどれですか?

ブログ    
ブログ    

推薦する

今後3年間で、人工知能は全国の小売業界に影響を与える大きな嵐となるでしょう。排除されてしまうのでしょうか?

10 年前、ほとんどの人は、今日では現金やカードを持ち歩かずに携帯電話だけを持って街を歩き回り、買...

Python でよく使われるアルゴリズム - 貪欲アルゴリズム (別名 greedy algorithm) をご存知ですか?

貪欲アルゴリズム (または貪欲アルゴリズム) とは、問題を解決するときに、その時点で適切と思われる選...

科学技術の時代におけるあらゆる産業の発展を可能にするAIIA2020人工知能開発者会議が開幕

人工知能は科学技術革命を牽引する重要な原動力として、国家戦略計画や産業界の注目の的となり、オープンソ...

今日のアルゴリズム: 文字列内の単語を反転する

[[423004]]文字列が与えられたら、文字列内の各単語を 1 つずつ逆にします。例1:入力: 「...

最も人気のある 5 つの人工知能プログラミング言語の比較。1 つだけでも学ぶ価値があります。

ほとんどのソフトウェア アプリケーション開発と同様に、開発者は複数の言語を使用して AI プロジェク...

中国科学院の張雲泉氏:コンピューティング能力は定量化可能であり、インテリジェントコンピューティングは公共サービスになる

[[410843]] 7月9日、2021年世界人工知能大会の期間中に開催された「新世代人工知能コンピ...

人工知能を活用してビジネスを成長させ、企業価値を創造する方法

組織は、全員を関与させれば、AI を活用してビジネスを成長させることができます。人工知能への投資は、...

機械学習のテストセットをスケールアップする方法

[[387235]]テスト セットのヒル クライミングは、トレーニング セットに影響を与えたり、予測...

...

Baidu PaddlePaddle EasyDL リテール版シェルフステッチングサービスのアーキテクチャとアルゴリズムの詳細な説明

日用消費財業界の商品識別需要シナリオでは、日用消費財ブランドの営業担当者は、販売のために端末店舗を訪...

AI 対応スマート ビルディングの利点は何ですか?

世界が人工知能(AI)を採用し続けるにつれて、AIを使用したスマートビルディングの人気が高まっていま...

調査によると、AIはデータ文化に大きな影響を与えている

2023年はGenAIの年ですが、GenAI(生成型人工知能)の採用率は期待に応えていません。ほとん...

人工知能は良いものだが、企業はAIの適用時に4つの大きな間違いを犯している。

問題は正確には何ですか? これらのエラーを回避する方法はありますか?今日、人工知能 (AI)、機械学...

...

機密コンピューティングが生成型AIの導入を確実にする方法

生成 AI は、新しい製品、ビジネス、業界、さらには新しい経済に情報を提供することができます。しかし...