ROS 側セットアップと起動方法

対応 ROS バージョン

OperaSim-AGX は、Unity 側で ROS-TCP-Connector を利用して ROS と通信します。 ROS2 の利用を推奨し、ROS Humble をサポート対象とします。 ROS1 を利用する場合は、ROS Noetic をサポート対象とします。

ROS2 の場合

ROS2 Humble のインストール

ROS2 Humble のインストール方法は公式ドキュメントに従ってください。

インストール後、シェル起動時に ROS 環境を読み込めるようにしておきます。

$ source /opt/ros/humble/setup.bash

パッケージのコンパイルに必要なセットアップ(ROS2)

ROS2 パッケージをビルドするために、最低限以下を利用します。

  • colcon

  • rosdep

未導入の場合はインストールします。

$ sudo apt update
$ sudo apt install -y python3-colcon-common-extensions python3-rosdep

初回のみ rosdep を初期化します。

$ sudo rosdep init
$ rosdep update

ROS2 ワークスペースの作成(例)

$ mkdir -p ~/ros2_ws/src
$ cd ~/ros2_ws

以降の作業では、必要に応じて以下を実行して環境を読み込みます。

$ source /opt/ros/humble/setup.bash

ROS2 パッケージのセットアップ

ROS2 側では、Unity と通信するための ROS-TCP-Endpoint と各種パッケージをセットアップします。 初回のみ、以下の手順でパッケージをクローン・ビルドしてください。

$ cd ~/ros2_ws/src
$ git clone -b main-ros2 https://github.com/Unity-Technologies/ROS-TCP-Endpoint.git
$ git clone --depth=1 https://github.com/pwri-opera/com3_ros.git
$ git clone --depth=1 https://github.com/pwri-opera/zx120_ros2.git
$ git clone --depth=1 https://github.com/pwri-opera/zx200_ros2.git
$ git clone --depth=1 https://github.com/pwri-opera/ic120_ros2.git

以下のコマンドでパッケージをビルドします。

$ cd ~/ros2_ws
$ rosdep install -i --from-paths src --rosdistro humble -y
$ colcon build
$ source install/setup.bash

注釈

rosdep install は依存関係の解決に必要です。 失敗する場合は、OS / ROS のバージョン、ネットワーク設定、プロキシ設定等を確認してください。

ROS との連携の起動例(ROS2)

  1. ROS 側で通信エンドポイントを起動します。

    $ source /opt/ros/humble/setup.bash
    $ source ~/ros2_ws/install/setup.bash
    $ ros2 run ros_tcp_endpoint ros_tcp_endpoint
    

注釈

Wifiと有線LANなど、複数のネットワークインターフェースを有するPCの場合は、必要に応じて --ros-args -p ROS_IP:=<利用したいネットワークインターフェースのIPアドレス> 等の引数を指定してください。

  1. Unity Editor で Play ボタンを押し、シミュレーションを開始します。

  2. 建設機械モデルに対応する ROS2 パッケージ側の Unity 連携用 launch を起動します。

    例: 油圧ショベル ZX120 (zx120_ros2) の場合

    $ ros2 launch zx120_unity zx120_standby.launch.py
    

    例: クローラダンプ IC120 (ic120_ros2) の場合

    $ ros2 launch ic120_unity ic120_standby_ekf.launch.py
    

コマンド送信例(ROS2: ros2 topic pub)

シミュレータが購読しているトピックに対して、ROS 側からコマンドを直接 publish して動作確認できます。 ここでは例として車体名 zx120 に対してコマンドを送信します。

注釈

トピック名やメッセージ型の一覧は ROSと連携時の送受信データ を参照してください。

車両中心の速度指令(/zx120/cmd_vel

$ ros2 topic pub -r 10 /zx120/cmd_vel geometry_msgs/msg/Twist \
  "{linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

左右クローラへの動作指令(/zx120/track_cmd

$ ros2 topic pub -r 10 /zx120/track_cmd com3_msgs/msg/JointCmd \
  "{joint_name: [left_track, right_track], position: [0.0, 0.0], velocity: [0.0, 0.0], effort: [0.5, 0.5], control_type: 0}"

非常停止(/zx120/emg_stop_cmd

$ ros2 topic pub -1 /zx120/emg_stop_cmd std_msgs/msg/Bool "{data: true}"

ROS1 の場合

ROS1 Noetic のインストール

ROS1 Noetic のインストール方法は公式ドキュメントに従ってください。

インストール後、シェル起動時に ROS 環境を読み込めるようにしておきます。

$ source /opt/ros/noetic/setup.bash

パッケージのコンパイルに必要なセットアップ(ROS1)

ROS 1 のビルドには catkin_tools を利用します。

$ sudo apt update
$ sudo apt install -y python3-catkin-tools python3-rosdep

初回のみ rosdep を初期化します。

$ sudo rosdep init
$ rosdep update

ROS1 ワークスペースの作成(例)

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws

以降の作業では、必要に応じて以下を実行して環境を読み込みます。

$ source /opt/ros/noetic/setup.bash

ROS-TCP-Endpoint のセットアップ(ROS1)

ROS 側では、Unity と通信するための ROS-TCP-Endpoint と各種パッケージをセットアップします。 初回のみ、以下の手順でパッケージをクローン・ビルドしてください。

$ cd ~/catkin_ws/src
$ git clone https://github.com/Unity-Technologies/ROS-TCP-Endpoint.git
$ git clone --depth=1 https://github.com/pwri-opera/com3_ros.git
$ git clone --depth=1 https://github.com/pwri-opera/zx120_ros.git
$ git clone --depth=1 https://github.com/pwri-opera/zx200_ros.git
$ git clone --depth=1 https://github.com/pwri-opera/ic120_ros.git
$ cd ..
$ rosdep install -i --from-paths src --rosdistro noetic -y
$ catkin build
$ source devel/setup.bash

ROS との連携の起動例(ROS1)

  1. ROS 側で通信エンドポイントを起動します。

    $ source /opt/ros/noetic/setup.bash
    $ source ~/catkin_ws/devel/setup.bash
    $ roslaunch ros_tcp_endpoint endpoint.launch
    
  2. Unity Editor で Play ボタンを押し、シミュレーションを開始します。

コマンド送信例(ROS1: rostopic pub)

シミュレータが購読しているトピックに対して、ROS 側からコマンドを直接 publish して動作確認できます。 ここでは例として車体名 zx120 に対してコマンドを送信します。

注釈

トピック名やメッセージ型の一覧は ROSと連携時の送受信データ を参照してください。

車両中心の速度指令(/zx120/cmd_vel

$ rostopic pub -r 10 /zx120/cmd_vel geometry_msgs/Twist \
  "{linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

左右クローラへの動作指令(/zx120/track_cmd

$ rostopic pub -r 10 /zx120/track_cmd com3_msgs/JointCmd \
  "{joint_name: [left_track, right_track], position: [0.0, 0.0], velocity: [0.0, 0.0], effort: [0.5, 0.5], control_type: 0}"

非常停止(/zx120/emg_stop_cmd

$ rostopic pub -1 /zx120/emg_stop_cmd std_msgs/Bool "{data: true}"

上記が正常に動作していれば、OperaSim-AGX 上の建設機械と ROS 側ノード群との間で トピック通信が行われ、コマンド送信・状態取得が可能になります。