ROSノードの作成(eSEAT)
Simple Wiki Based Contents Management System
ソフトウェア関連 >> RTコンポーネント関連 >> eSEAT_v2.5 >> SEATMLファイルの書き方 >> ROSノードの作成(eSEAT)

ROSノードの作成

このページでは、eSEATでROS(およびROS2)のノードの作成について解説してきます。まずは、ROSおよびROS2のオフィシャルサイト等を参照して、インストールを行ってください。
現在のROS,ROS2は、Windowsでも動作させることは可能になっていますが、私の方で動作確認をしていませんので、ここではUbuntu16.04またはUbuntu18.04 を対象にしています。

事前準備

eSEATでROS、ROS2ノードを使うには、ROS, ROS2をインストールする必要があります。Ubuntu16.04では、ROS(kinetic), ROS2(ardent)が、Ubuntu18.04では、ROS(melodic), ROS2(bouncy)をインストールします。詳細な説明は、別のサイトに譲りますが、独自にROS,ROS2のインストールスクリプトを作成して、このページに添付しています。このスクリプトを使う場合には、下記の通りすればよいと思います。
  • ROS1のインストール
 # sudo ./ros_install.sh
  • ROS2のインストール
 # sudo ./ros2_install.sh
なお、このスクリプトは、Ubuntu 16.04と18.04の場合には、ROSのバージョンを自動指定していますが、別のバージョンをインストールする場合には、コマンドの最後に明示的にROSのバージョンを指定すればよいと思います。
eSEATでのROSノード作成機能を使う前に、ROSおよびROS2のチュートリアルを実施しておくことを推奨いたします。(以下では、ROSのチュートリアルで紹介されているノードを例にしてSEATMLの書き方を説明します)

ROSノードの作成例

ここでは、ROSノードを作成していきますが、わかりやすいようにROS(またはROS2)のチュートリアルに従ってSEATMLを作成していきたいと思います。

eSEATにおけるROSノードの実行

eSEATでROSノードのみを使う場合には、 eSEATコマンドよりもeSEAT_Nodeコマンドを使うことを推奨します。eSEATコマンドは、基本的にOpenRTM-aistのRTC起動用として実装しており、eSEAT_Node +αになっています。
ただし、OpenRTM-aistをインストールしていなければ、eSEATとeSEAT_Nodeは全く同じです
eSEATでROSノードのadaptorを指定したSEATML(仮にsample.seatmlとします)の実行する場合には、ROSとROS2のどちらを使うかを決めておく必要があります。すなわち、ROS(kinitec)の場合には、
 # source /opt/ros/kinetic/setup.bash
 # eSEAT_Node sample.seatml
ROSノードを使用するときは、事前にroscoreを起動してください。(わかっているとは思いますが)
ROS2(ardent)の場合には、
 # source /opt/ros/ardent/setup.bash
 # eSEAT_Node sample.seatml
となります。ROSノードでもROS2ノードでもSEATMLファイル自体は、なるべく共通で動作するようには実装されていますが、メッセージ型のパッケージ名が異なる場合がありますので、それは修正してください。(eSEATの管理外ですので)
また、ROSノードのadaptorとROS2ノードのadaptorは同時に使うことができません。(eSEATの内部では、最初rospyのインポートを実施し、失敗すれば rclpyをインポートしようとしています。したがって、ROSの環境変数をロードしてしまうとROSノードとして動作してしまいます。)
技術的には可能だと思うのですが、ROSとROS2の基本メッセージが同じメッセージ名を使用しているために、Pythonではほぼ同時使用が不可能です。(バージン番号で名前空間を分けていれば可能だったのですが…)
ROS2場合には、本来は一つのプロセスで複数のノードを生成できるようになっていますが、ROSとの互換性を考えてeSEATでは、1プロセス1ノードのみをサポートします。

資料