ROSノードの作成
現在の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ノードのみをサポートします。
資料