ROS2を使ってみる その4(OpenManipulatorのシミュレーション、WSL2 Ubuntu 22.04)
はじめに
今回はROS2でOpenManipulatorのシミュレーションを実行してみました。
WSL2で新しくROS2の環境を構築しましたが、具体的なロボットのシミュレーションは行っていなかったので、改めて動作確認です。WSL2のネットワーク周りで少し引っかかるところがありました。
▼実行環境は前回構築したものを利用しています。
▼以前の記事はこちら
必要なパッケージのインストール
ROS1と同様に、OpenManipulatorのページに従ってパッケージをインストールします。
▼ROS2 Humble用のページを参考に進めます。
https://emanual.robotis.com/docs/en/platform/openmanipulator_x/quick_start_guide
ROS2の環境は構築したうえで、以下のコマンドを実行していきました。
sudo apt install \
ros-humble-ros2-control \
ros-humble-moveit* \
ros-humble-gazebo-ros2-control \
ros-humble-ros2-controllers \
ros-humble-controller-manager \
ros-humble-position-controllers \
ros-humble-joint-state-broadcaster \
ros-humble-joint-trajectory-controller \
ros-humble-gripper-controllers \
ros-humble-hardware-interface \
ros-humble-xacroワークスペースはcolcon_wsとして新しく作成されます。
mkdir -p colcon_ws/src
cd ~/colcon_ws/src/
git clone -b humble https://github.com/ROBOTIS-GIT/DynamixelSDK.git
git clone -b humble https://github.com/ROBOTIS-GIT/open_manipulator.git
git clone -b humble https://github.com/ROBOTIS-GIT/dynamixel_hardware_interface.git
git clone -b humble https://github.com/ROBOTIS-GIT/dynamixel_interfaces.git
cd ~/colcon_ws && colcon build --symlink-install.bashrcにセットアップ用のコマンドが追加されます。以前構築した環境とは異なることには注意してください。
echo 'source /usr/share/gazebo/setup.sh' >> ~/.bashrc
echo 'source ~/colcon_ws/install/local_setup.bash' >> ~/.bashrc
source ~/.bashrcシミュレーションを実行する
GazeboでOpenManipulatorのシミュレーションを起動します。
▼シミュレーションに関するページはこちら
https://emanual.robotis.com/docs/en/platform/openmanipulator_x/ros_simulation/#launch-gazebo
以下のコマンドを実行しました。
ros2 launch open_manipulator_x_bringup gazebo.launch.py▼起動はできたのですが、画面が真っ暗です。

モデルがちゃんと表示されるように、原因を探していきました。
▼ターミナルにはエラーが出ず、モデル自体は読み込めているようでした。

▼トピックも出ていました。

過去にWSL2の環境ではstlファイルが表示されず、以下のコマンドを実行すると表示されることがありました。しかし、今回はこのコマンドでは解決しませんでした。
export LIBGL_ALWAYS_SOFTWARE=true--verboseオプションをつけてgazeboとgzserverを実行したところ、アドレスが重複しているようでした。
▼Address already in useというエラーが出ていました。

▼他のアプリケーションなどを閉じたりしてもう一度実行したところ、別のエラーが起きていました。

[Err] [Scene.cc:227] Service call[/shadow_caster_material_name] timed out
[Err] [Scene.cc:249] Service call[/shadow_caster_render_back_faces] timed out今回の根本的な原因は、私がWSL2のネットワーク設定をミラーモードにしていたからだと思われます。Windows環境と、WSL2環境でIPアドレスを共通にするというものです。Windows側のアプリとアドレスが重複していたのかもしれません。
ネットワークモードをNatに変更して、WSL2を再起動してみました。
▼WSL Settingsというアプリで変更できます。

再度先程のコマンドを実行しました。
ros2 launch open_manipulator_x_bringup gazebo.launch.py▼GazeboにOpenManipulatorが表示されました。

この状態で別のターミナルを開き、操作用のGUIを起動するコマンドを実行してみたのですが、また別のエラーが起きていました。
ros2 launch open_manipulator_x_gui open_manipulator_x_gui.launch.py▼moveitやmove_group_interfaceの読み込みなどに失敗しているようでした。

そもそもMoveItが必要なのではないかと思い調べていると、Simulationのページには書いていなかったのですが、OperationのページにはMoveItの起動コマンドが書かれていました。
▼以下のページです。
https://emanual.robotis.com/docs/en/platform/openmanipulator_x/ros_operation/#gui-program
以下のコマンドでRVizとMoveItを起動しました。
ros2 launch open_manipulator_x_moveit_config moveit_core.launch.py▼問題なく起動しました。

RViz上に表示されている矢印でグリッパを移動し、MotionPlanningの欄でPlan &Executeを選択すると、動かすことができました。
この状態であれば、以下のコマンドで操作用のGUIを起動できました。
ros2 launch open_manipulator_x_gui open_manipulator_x_gui.launch.py▼操作用のGUIが起動しました。

これで操作用のGUIアプリでグリッパの開閉や角度の変更などを行うことができました。
なお、Gazeboを起動せずにRVizのシミュレーションだけ起動して動かそうとしたところ、エラーが起きていました。
▼Plan & Executeを選択すると、Failedと表示されて失敗していました。

RViz+MoveItとGazeboが必要なようです。
最後に
WSL2関連でネットワーク周りの問題はありましたが、シミュレーションを起動することができました。これでROS2の環境としてはある程度利用できるかと思います。
Node-REDのノードもROS2に対応しているのか気になるところです。
▼ROS1では以下の記事で試していました。


