はじめに
今までは、ROS2 で AGV シミュレーションをする方法について説明してきました。
今回からは、4軸ロボットの Dobot MG400 を ROS2 でシミュレーションする方法について説明します。
商品ページはこちらにあります。
詳細スペックは下にまとめておきます。
前提条件
前提条件は以下の通りです。
- こちらのページでセットアップが完了してる
- Windows11 – WSL2 で実行しています
MG400 について
MG400 について、主要な性能は以下の通りです。
- 可搬重量 500g (max 750g)
- 動作範囲 400mm
- 軸数:4 (ハンドに 1軸 あれば 5軸)
- 繰り返し精度 ±0.05mm
- 衝突検出機能
- 電源OFF時サーボロック
- 最大速度 300°/s
ワークスペースの準備
ワークスペースの準備をしていきます。
cd ~/
mkdir -p ~/mg400_workspace/src
cd ~/mg400_workspace/src
ros2 pkg create --build-type ament_python mg400_training
git clone https://github.com/HarvestX/MG400_ROS2.git
cd mg400_training
mkdir launch urdf meshes
cd ~/mg400_workspace
colcon build --packages-select mg400_training
次に、mg400_training フォルダ内の package.xml を編集します。
7 行目
<maintainer email="Kame@example">wsl-ubuntu</maintainer>
↓
<maintainer email="wsl-ubuntu@todo.todo">wsl-ubuntu</maintainer>
setup.py は、以下のように変更してください。
from setuptools import setup
import os
from glob import glob
package_name = 'mg400_training'
setup(
name=package_name,
version='0.0.0',
packages=[package_name],
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
('share/' + package_name, ['package.xml']),
(os.path.join("share", package_name, "launch"), glob("launch/*")),
(os.path.join("share", package_name, "config"), glob("config/*")),
(os.path.join("share", package_name, "urdf"), glob("urdf/mg400*")),
(os.path.join("share", package_name, "urdf/common"), glob("urdf/common/*")),
(os.path.join("share", package_name, "meshes"), glob("meshes/*")),
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='wsl-ubuntu',
maintainer_email='wsl-ubuntu@todo.todo',
description='TODO: Package description',
license='TODO: License declaration',
tests_require=['pytest'],
entry_points={
'console_scripts': [
],
},
)
.bashrc の編集
次に、.bashrc の最下行に以下の一文を追記してください。(パスは自身の環境に合わせてください)
source /home/wsl-ubuntu/mg400_workspace/install/setup.bash
これで、ワークスペースの準備は完了です。
URDF の準備
URDF の準備をしていきます。
まずは git clone してある MG400_ROS2 フォルダの URDF ファイルを mg400_training へコピーします。
cd ~/mg400_workspace/src
cp -r MG400_ROS2/mg400_description/urdf mg400_training/
現在の mg400_training のフォルダ構造はこのようになっています。
![](https://nutritionfoodtech.com/wp-content/uploads/2023/01/mg400-1-1.png)
xacro ファイルについて
xacro は URDF を作成するための便利なマクロ機能です。
公式の説明はこちらにあります。
数値や名称を使いまわす際に、非常に便利です。
個人で簡単なシミュレーションをする際には必要ありませんが、大規模になると必要です。
xacro ファイルの修正
xacro ファイルの合成方法について説明します。
cd ~/mg400_workspace/src/mg400_training/urdf
mg400.urdf.xacro を修正していきます。
5 行目
<xacro:include filename="$(find mg400_description)/urdf/mg400.xacro" />
↓
<xacro:include filename="/home/wsl-ubuntu/mg400_workspace/src/mg400_training/urdf/mg400.xacro" />
参照するパッケージを変更しました。
mg400.xacro も同様に修正します。
5 行目
filename="$(find mg400_description)/urdf/common/constants.xacro"
↓
filename="/home/wsl-ubuntu/mg400_workspace/src/mg400_training/urdf/common/constants.xacro"
11 行目
value="mg400_description/meshes" />
↓
value="/home/wsl-ubuntu/mg400_workspace/src/mg400_training/meshes" />
変更後のファイルパスは、自身の環境に合わせてください。
xacro ファイルの合成
ターミナルに戻って、xacro の合成を実行します。
cd ~/mg400_workspace
colcon build --packages-select mg400_training
cd ~/mg400_workspace/src/mg400_training/urdf
ros2 run xacro xacro mg400.urdf.xacro > mg400_training.urdf
urdf フォルダ内に mg400_training.urdf が作成されていれば完了です。
Rviz2 で MG400 を表示
次に、launch ファイルを作成して Rviz2 上で MG400 を表示します。
cd ~/mg400_workspace/src/mg400_training/launch
touch rviz.launch.py
rviz.launch.py の中身は以下のようにしてください。
from launch import LaunchDescription
from launch_ros.actions import Node
from ament_index_python.packages import get_package_share_directory
import os
def generate_launch_description():
pkg_box_car_description = get_package_share_directory("mg400_training")
urdf_file = os.path.join(pkg_box_car_description, "urdf", "mg400_training.urdf")
print(urdf_file)
joint_state_publisher_node = Node(
package="joint_state_publisher_gui",
executable="joint_state_publisher_gui",
)
robot_state_publisher_gui = Node(
package="robot_state_publisher",
executable="robot_state_publisher",
output="both",
arguments=[urdf_file],
)
rviz_node = Node(
package="rviz2",
executable="rviz2",
name="rviz2",
output="log",
)
nodes_to_run = [
robot_state_publisher_gui,
joint_state_publisher_node,
rviz_node
]
return LaunchDescription(nodes_to_run)
これで launch ファイルの準備は完了です。
cd ~/mg400_workspace
colcon build --packages-select mg400_training
source ~/.bashrc
ros2 launch mg400_training rviz.launch.py
ros2 launch を実行すると、Rviz2 が起動します。
最初はエラーが出ていますが、下記画像の赤枠の部分を mg400_base_link に変更してください。
![](https://nutritionfoodtech.com/wp-content/uploads/2023/01/mg400-1-3-e1673155854404.png)
すると、Rviz2 のエラーがなくなります。
![](https://nutritionfoodtech.com/wp-content/uploads/2023/01/mg400-1-2-1024x473.png)
Rviz2 上では外観まで表示されていませんが、のちに Gazebo では表示されるようにします。
Joint State Publisher GUI で MG400 を動かす
せっかくなので、JointStatePublisherGUI で動かしてみてください。
![](https://nutritionfoodtech.com/wp-content/uploads/2023/01/mg400-1-4-e1673156655675.png)
ありえない動きもできますが、今後、URDF で制限をかけていきます。
おわりに
今回は MG400 の xacro から URDF を作成して、Rviz2 で表示する方法について説明しました。
xacro から 自身のシミュレーションへ落とし込む方法が分かっていただけたかと思います。
現状では、joint の表記がなく、現実ではありえない動きもしてしまいます。
次回は、Gazebo で MG400 を表示する方法について説明します。
コメント