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)
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アドレス> 等の引数を指定してください。
Unity Editor で Play ボタンを押し、シミュレーションを開始します。
建設機械モデルに対応する 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)
ROS 側で通信エンドポイントを起動します。
$ source /opt/ros/noetic/setup.bash $ source ~/catkin_ws/devel/setup.bash $ roslaunch ros_tcp_endpoint endpoint.launch
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 側ノード群との間で トピック通信が行われ、コマンド送信・状態取得が可能になります。