ROS 側セットアップと起動方法 ============================ 対応 ROS バージョン ------------------ OperaSim-AGX は、Unity 側で ROS-TCP-Connector を利用して ROS と通信します。 ROS2 の利用を推奨し、**ROS Humble** をサポート対象とします。 ROS1 を利用する場合は、**ROS Noetic** をサポート対象とします。 ROS2 の場合 ------------ ROS2 Humble のインストール ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ROS2 Humble のインストール方法は公式ドキュメントに従ってください。 - https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html インストール後、シェル起動時に ROS 環境を読み込めるようにしておきます。 .. code-block:: console $ source /opt/ros/humble/setup.bash パッケージのコンパイルに必要なセットアップ(ROS2) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ROS2 パッケージをビルドするために、最低限以下を利用します。 - colcon - rosdep 未導入の場合はインストールします。 .. code-block:: console $ sudo apt update $ sudo apt install -y python3-colcon-common-extensions python3-rosdep 初回のみ rosdep を初期化します。 .. code-block:: console $ sudo rosdep init $ rosdep update ROS2 ワークスペースの作成(例) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: console $ mkdir -p ~/ros2_ws/src $ cd ~/ros2_ws 以降の作業では、必要に応じて以下を実行して環境を読み込みます。 .. code-block:: console $ source /opt/ros/humble/setup.bash ROS2 パッケージのセットアップ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ROS2 側では、Unity と通信するための `ROS-TCP-Endpoint `_ と各種パッケージをセットアップします。 初回のみ、以下の手順でパッケージをクローン・ビルドしてください。 .. code-block:: console $ 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 以下のコマンドでパッケージをビルドします。 .. code-block:: console $ cd ~/ros2_ws $ rosdep install -i --from-paths src --rosdistro humble -y $ colcon build $ source install/setup.bash .. note:: ``rosdep install`` は依存関係の解決に必要です。 失敗する場合は、OS / ROS のバージョン、ネットワーク設定、プロキシ設定等を確認してください。 ROS との連携の起動例(ROS2) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1. ROS 側で通信エンドポイントを起動します。 .. code-block:: console $ source /opt/ros/humble/setup.bash $ source ~/ros2_ws/install/setup.bash $ ros2 run ros_tcp_endpoint ros_tcp_endpoint .. note:: Wifiと有線LANなど、複数のネットワークインターフェースを有するPCの場合は、必要に応じて ``--ros-args -p ROS_IP:=<利用したいネットワークインターフェースのIPアドレス>`` 等の引数を指定してください。 2. Unity Editor で Play ボタンを押し、シミュレーションを開始します。 3. 建設機械モデルに対応する ROS2 パッケージ側の Unity 連携用 launch を起動します。 例: 油圧ショベル ZX120 (``zx120_ros2``) の場合 .. code-block:: console $ ros2 launch zx120_unity zx120_standby.launch.py 例: クローラダンプ IC120 (``ic120_ros2``) の場合 .. code-block:: console $ ros2 launch ic120_unity ic120_standby_ekf.launch.py コマンド送信例(ROS2: ros2 topic pub) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ シミュレータが購読しているトピックに対して、ROS 側からコマンドを直接 publish して動作確認できます。 ここでは例として車体名 ``zx120`` に対してコマンドを送信します。 .. note:: トピック名やメッセージ型の一覧は :doc:`03_ros-topics-and-messages` を参照してください。 車両中心の速度指令(``/zx120/cmd_vel``) .. code-block:: console $ 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``) .. code-block:: console $ 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``) .. code-block:: console $ ros2 topic pub -1 /zx120/emg_stop_cmd std_msgs/msg/Bool "{data: true}" ROS1 の場合 ------------ ROS1 Noetic のインストール ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ROS1 Noetic のインストール方法は公式ドキュメントに従ってください。 - https://wiki.ros.org/noetic/Installation/Ubuntu インストール後、シェル起動時に ROS 環境を読み込めるようにしておきます。 .. code-block:: console $ source /opt/ros/noetic/setup.bash パッケージのコンパイルに必要なセットアップ(ROS1) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ROS 1 のビルドには catkin_tools を利用します。 .. code-block:: console $ sudo apt update $ sudo apt install -y python3-catkin-tools python3-rosdep 初回のみ rosdep を初期化します。 .. code-block:: console $ sudo rosdep init $ rosdep update ROS1 ワークスペースの作成(例) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: console $ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws 以降の作業では、必要に応じて以下を実行して環境を読み込みます。 .. code-block:: console $ source /opt/ros/noetic/setup.bash ROS-TCP-Endpoint のセットアップ(ROS1) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ROS 側では、Unity と通信するための `ROS-TCP-Endpoint `_ と各種パッケージをセットアップします。 初回のみ、以下の手順でパッケージをクローン・ビルドしてください。 .. code-block:: console $ 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 側で通信エンドポイントを起動します。 .. code-block:: console $ 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`` に対してコマンドを送信します。 .. note:: トピック名やメッセージ型の一覧は :doc:`03_ros-topics-and-messages` を参照してください。 車両中心の速度指令(``/zx120/cmd_vel``) .. code-block:: console $ 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``) .. code-block:: console $ 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``) .. code-block:: console $ rostopic pub -1 /zx120/emg_stop_cmd std_msgs/Bool "{data: true}" 上記が正常に動作していれば、OperaSim-AGX 上の建設機械と ROS 側ノード群との間で トピック通信が行われ、コマンド送信・状態取得が可能になります。