7.1.3 ROS アーキテクチャ

ROS ファイルシステム

ハードディスク上の ROS ファイルシステムの構造は次のように整理されます。

J3010

Code
WorkSpace --- カスタムワークスペース

    |--- build: CMake と catkin のキャッシュ、設定、その他中間ファイルを格納するコンパイル用スペース。
    |--- devel: ヘッダ、動的・静的ライブラリ、実行ファイルなどコンパイル済みターゲットを格納する開発用スペース。
    |--- src: ソースコード

        |-- package: ROS パッケージ(ROS の基本単位)。複数のノード、ライブラリ、設定ファイルを含む。パッケージ名は小文字で、英数字とアンダースコアで構成する。
            |-- CMakeLists.txt: ソースファイル、依存関係、ターゲットファイルなどコンパイルルールの設定。
            |-- package.xml: 名前、バージョン、作者、依存関係などのパッケージ情報。
            |-- scripts: Python ファイル用ディレクトリ。
            |-- src: C++ ソースファイル用ディレクトリ。
            |-- include: ヘッダファイル。
            |-- msg: メッセージ通信フォーマットファイル。
            |-- srv: サービス通信フォーマットファイル。
            |-- action: アクションフォーマットファイル。
            |-- launch: 複数ノードを一括起動するための launch ファイル。
            |-- config: 設定ファイル。

        |-- CMakeLists.txt: コンパイルの基本設定。

これらのディレクトリやファイルの一部はすでに紹介済みです。例えば、パッケージの作成、srcscripts ディレクトリでの C++ や Python ファイルの記述、launch ディレクトリでの launch ファイルの作成などです。package.xmlCMakeLists.txt もすでに設定されています。他のディレクトリは後のチュートリアルで紹介します。

package.xml

package.xml ファイルは、名前、バージョン、作者、メンテナ、依存関係といったパッケージのプロパティを定義します。形式は次の通りです。

xml
<?xml version="1.0"?>
<package format="2">
  <name>hello_world</name>
  <version>0.0.0</version>
  <description>The hello_world package</description>
  <maintainer email="xuzuo@todo.todo">xuzuo</maintainer>
  <license>TODO</license>
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>rospy</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <exec_depend>roscpp</exec_depend>
  <exec_depend>rospy</exec_depend>
  <exec_depend>std_msgs</exec_depend>
  <export>
  </export>
</package>

CMakeLists.txt

CMakeLists.txt は CMake ビルドシステムへの入力で、パッケージのビルドに使用されます。C++ と Python ファイルのコンパイル設定や依存関係の定義を含みます。

cmake
cmake_minimum_required(VERSION 3.0.2)
project(demo01_hello_vscode)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
)

catkin_package(
)

include_directories(
  ${catkin_INCLUDE_DIRS}
)

add_executable(hellow src/hello.cpp)

add_dependencies(hellow ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(hellow
  ${catkin_LIBRARIES}
)

catkin_install_python(PROGRAMS
  scripts/hello.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

ROS ファイルシステムコマンド

ROS ファイルシステムを操作するためのよく使うコマンド:

  • パッケージの作成: catkin_create_pkg <package_name> <dependency_1> <dependency_2> ...
  • パッケージのインストール: sudo apt install <package_name>
  • パッケージの削除: sudo apt purge <package_name>
  • パッケージ一覧: rospack list
  • パッケージの検索: rospack find <package_name>
  • パッケージへ移動: roscd <package_name>
  • パッケージのファイル一覧: rosls <package_name>
  • パッケージ検索: apt search <package_name>
  • パッケージファイルの編集: rosed <package_name> <file_name>

ROS コマンドの実行

  • ROS Core 起動: roscore
  • ROS ノードの実行: rosrun <package_name> <executable_file_name>
  • ROS ファイルの起動: roslaunch <package_name> <launch_file_name>

ROS 計算グラフ

ROS の計算グラフは、ROS システムの実行時構造を表し、ノード間のデータフローを示します。rqt_graph で可視化できます。

bash
rosrun rqt_graph rqt_graph

未インストールの場合:

bash
sudo apt install ros-<distro>-rqt
sudo apt install ros-<distro>-rqt-common-plugins

<distro> をご自身の ROS バージョン(例: kinetic、melodic、noetic)に置き換えてください。

計算グラフのデモ

次に、ROS に組み込まれているカメシミュレーションを使って計算グラフをデモします。

  1. 例の実行: 前述の手順に従ってカメシミュレーションを実行します。

  2. 計算グラフの表示: 新しいターミナルを開いて入力します。

    bash
    rqt_graph

    または

    bash
    rosrun rqt_graph rqt_graph

下の画像のように、ノード間の関係を示すネットワークトポロジが表示されます。

![計算グラフの例](https://files.seeedstudio.com/wiki/reComputer-Jetson/beginner_images/7-Robotics/7.1-Introduction to ROS/7.1.3-ROS Architecture/images/computatioinal.png)