見出し画像

ROS入門 (56) - myCobotのURDFモデルの作成

「myCobot」のURDFモデルの作成方法をまとめました。

・Noetic

前回

1. URDFモデルの作成

URDFは公式の「mycobot_ros」にサンプルが含まれています。

(1) 「mycobot_ros」と「rosserial」のクローン。

$ cd ~/catkin_ws/src
$ git clone https://github.com/elephantrobotics/mycobot_ros.git -b noetic-old
$ git clone https://github.com/ros-drivers/rosserial.git

mycobot_ros/urdfフォルダにURDFファイル一式があります。

しかし、Unityで使うには、「world」や「衝突属性」や「物理属性」がないので、URDFに情報追記します。

(2) ワークスペースのビルドと実行。

$ cd ~/catkin_ws
$ catkin build

(3) 「mycobot.urdf」を作成し、以下のように編集。

・mycobot.urdf

<?xml version="1.0"?>
<robot name="mycobot">
  <!--world-->
  <link name="world" />

  <!--worldとbase_linkを繋ぐジョイント-->
  <joint name="body_joint" type="fixed">
    <parent link="world" />
    <child link="base_link" />
  </joint>

  <!--base_link-->
  <link name="base_link">
    <!--可視化情報-->
    <visual>
      <origin xyz="0 0 0 " rpy=" 0 0 0" />
      <geometry>
        <mesh filename="package://mycobot_ros/urdf/joint1.dae" />
      </geometry>
    </visual>

    <!--衝突属性-->
    <collision>
      <origin xyz="0 0 0.035" rpy="0 0 0" />
      <geometry>
        <cylinder length="0.07" radius="0.05" />
      </geometry>
    </collision>

    <!--物理属性-->
    <inertial>
      <origin rpy="0 0 0" xyz="0 0 0.075" />
      <mass value="5" />
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
    </inertial>
  </link>

  <!--base_linkとarm1_linkを繋ぐジョイント-->
  <joint name="arm1_joint" type="revolute">
    <parent link="base_link" />
    <child link="arm1_link" />
    <origin xyz="0 0 0.0706" rpy="0 0 0" />
    <axis xyz="0 0 1" />
    <limit effort="30" lower="-2.88" upper="2.88" velocity="1.5" />
  </joint>

  <!--arm1-->
  <link name="arm1_link">
    <!--可視化情報-->
    <visual>
      <origin xyz="0 0 0 " rpy=" 0 0 0" />
      <geometry>
        <mesh filename="package://mycobot_ros/urdf/joint2.dae" />
      </geometry>
    </visual>

    <!--衝突属性-->
    <collision>
      <origin xyz="0 0 0.04" rpy="0 0 0" />
      <geometry>
        <cylinder length="0.08" radius="0.024" />
      </geometry>
    </collision>

    <!--物理属性-->
    <inertial>
      <origin rpy="0 0 0" xyz="0 0 0.075" />
      <mass value="0.1" />
      <inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.01" />
    </inertial>
  </link>

  <!--arm1_linkとarm2_linkを繋ぐジョイント-->
  <joint name="arm2_joint" type="revolute">
    <parent link="arm1_link" />
    <child link="arm2_link" />
    <origin xyz="0.03256 0  0.05976" rpy="0 0 0" />
    <axis xyz="1 0 0" />
    <limit effort="30" lower="-2.88" upper="2.88" velocity="1.5" />
  </joint>

  <!--arm2_link-->
  <link name="arm2_link">
    <!--可視化情報-->
    <visual>
      <origin xyz="0 0 0 " rpy=" 0 0 0" />
      <geometry>
        <mesh filename="package://mycobot_ros/urdf/joint3.dae" />
      </geometry>
    </visual>

    <!--衝突属性-->
    <collision>
      <origin xyz="0.03 0 0.065" rpy="0 0 0" />
      <geometry>
        <cylinder length="0.13" radius="0.024" />
      </geometry>
    </collision>

    <!--物理属性-->
    <inertial>
      <origin rpy="0 0 0" xyz="0 0 0.06" />
      <mass value="0.1" />
      <inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.01" />
    </inertial>
  </link>

  <!--arm2_linkとarm3_linkを繋ぐジョイント-->
  <joint name="arm3_joint" type="revolute">
    <parent link="arm2_link" />
    <child link="arm3_link" />
    <origin xyz="0.00272 0 0.1104" rpy="0 0 0" />
    <axis xyz="1 0 0" />
    <limit effort="30" lower="-2.88" upper="2.88" velocity="1.5" />
  </joint>

  <!--arm3_link-->
  <link name="arm3_link">
    <!--可視化情報-->
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://mycobot_ros/urdf/joint4.dae" />
      </geometry>
    </visual>

    <!--衝突属性-->
    <collision>
      <origin xyz="-0.03 0 0.06" rpy="0 0 0" />
      <geometry>
        <cylinder length="0.12" radius="0.024" />
      </geometry>
    </collision>

    <!--物理属性-->
    <inertial>
      <origin rpy="0 0 0" xyz="0 0 0.06" />
      <mass value="0.1" />
      <inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.01" />
    </inertial>
  </link>

  <!--arm3_linkとarm4_linkを繋ぐジョイント-->
  <joint name="arm4_joint" type="revolute">
    <parent link="arm3_link" />
    <child link="arm4_link" />
    <origin xyz="-0.00164 0 0.096" rpy="0 0 0" />
    <axis xyz="1 0 0" />
    <limit effort="1000.0" lower="-2.88" upper="2.88" velocity="0" />
  </joint>

  <!--arm4_link-->
  <link name="arm4_link">
    <!--可視化情報-->
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://mycobot_ros/urdf/joint5.dae" />
      </geometry>
    </visual>

    <!--衝突属性-->
    <collision>
      <origin xyz="0.03 0 0.03" rpy="0 0 0" />
      <geometry>
        <cylinder length="0.06" radius="0.024" />
      </geometry>
    </collision>

    <!--物理属性-->
    <inertial>
      <origin rpy="0 0 0" xyz="0 0 0.06" />
      <mass value="0.1" />
      <inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.01" />
    </inertial>
  </link>

  <!--arm4_linkとarm5_linkを繋ぐジョイント-->
  <joint name="arm5_joint" type="revolute">
    <parent link="arm4_link" />
    <child link="arm5_link" />
    <origin xyz="0.0288 0 0.02976" rpy="0 0 0" />
    <axis xyz="0 0 1" />
    <limit effort="30" lower="-2.88" upper="2.88" velocity="1.5" />
  </joint>

  <!--arm5_link-->
  <link name="arm5_link">
    <!--可視化情報-->
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://mycobot_ros/urdf/joint6.dae" />
      </geometry>
    </visual>

    <!--衝突属性-->
    <collision>
      <origin xyz="0 0 0.035" rpy="1.57075 0 0" />
      <geometry>
        <cylinder length="0.06" radius="0.024" />
      </geometry>
    </collision>

    <!--物理属性-->
    <inertial>
      <origin rpy="0 0 0" xyz="0 0 0.06" />
      <mass value="0.1" />
      <inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.01" />
    </inertial>
  </link>

  <!--arm5_linkとarm6_linkを繋ぐジョイント-->
  <joint name="arm6_joint" type="revolute">
    <parent link="arm5_link" />
    <child link="arm6_link" />
    <origin xyz="0 0.0456 0.03792" rpy="0 0 0" />
    <axis xyz="0 1 0" />
    <limit effort="30" lower="-3.05" upper="3.05" velocity="1.5" />
  </joint>

  <!--arm6_link-->
  <link name="arm6_link">
    <!--可視化情報-->
    <visual>
      <origin xyz="0.0 0 0.0" rpy="1.57075 0 0" />
      <geometry>
        <cylinder length="0.005" radius="0.02" />
      </geometry>
      <material name="dark blue">
        <color rgba="0.1 0.1 0.9 1" />
      </material>
    </visual>

    <!--衝突属性-->
    <collision>
      <origin xyz="0.0 0 0.0" rpy="1.57075 0 0" />
      <geometry>
        <cylinder length="0.005" radius="0.02" />
      </geometry>
    </collision>

    <!--物理属性-->
    <inertial>
      <origin rpy="0 0 0" xyz="0 0 0.06" />
      <mass value="0.1" />
      <inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.01" />
    </inertial>
  </link>

</robot>

(4) rvizで表示を確認。

$ roslaunch urdf_tutorial display.launch model:=mycobot.urdf

2. Unityへのインポート

「URDF Importer」でインポートします。

(1) Unityプロジェクトの作成。
(2) Unityの「Package Manager」の「+ → Add package from git URL」で、以下のパッケージをインストール。

・URDF Importer

https://github.com/Unity-Technologies/URDF-Importer.git?path=/com.unity.robotics.urdf-importer

(3) UnityプロジェクトのAssetsフォルダにmycobotフォルダを作成し、作成した「mycobot.urdf」と、「mycobot_ros」の「dae」を配置。
(4) 「mycobot.urdf」を右クリックして、「Import Robot from Selected URDF file」を選択。

(5)  「Import URDF」ボタンを押す。

(6) daeファイルのパスを要求されるので、1から順番に指定。

(7) 見た目、衝突判定、関節角度の制限などを確認。

参考



この記事が気に入ったらサポートをしてみませんか?