From 893633af8afe50f3a362b0cbf36dcd89d208eba3 Mon Sep 17 00:00:00 2001 From: Masaaki Hijikata Date: Fri, 7 Jun 2024 03:40:47 +0900 Subject: [PATCH] add friction description --- 404.html | 4 +- Demos/demo_for_arm_robot/index.html | 4 +- Demos/demo_for_mobile_robot/index.html | 4 +- LICENSE/index.html | 4 +- Tutorials/how_to_spawn_robot/index.html | 4 +- .../how_to_use_simulator_launcher/index.html | 4 +- .../setup_urdf_for_ros2_control/index.html | 73 +++++++++++++++--- Tutorials/setup_urdf_for_sensors/index.html | 4 +- Tutorials/tutorial/index.html | 4 +- docs/Tutorials/setup_urdf_for_ros2_control.md | 50 +++++++++++- docs/index.md | 3 +- .../setup_urdf_for_ros2_control.md" | 51 +++++++++++- index.html | 7 +- ja/LICENSE/index.html | 4 +- ja/index.html | 4 +- .../how_to_spawn_robot/index.html" | 4 +- .../how_to_use_simulator_launcher/index.html" | 4 +- .../setup_urdf_for_ros2_control/index.html" | 69 +++++++++++++++-- .../setup_urdf_for_sensors/index.html" | 4 +- .../tutorial/index.html" | 4 +- .../demo_for_arm_robot/index.html" | 4 +- .../demo_for_mobile_robot/index.html" | 4 +- search/search_index.json | 2 +- sitemap.xml.gz | Bin 127 -> 127 bytes 24 files changed, 260 insertions(+), 59 deletions(-) diff --git a/404.html b/404.html index 5fa5f6b..1d4e73d 100644 --- a/404.html +++ b/404.html @@ -12,7 +12,7 @@ - + @@ -901,7 +901,7 @@

404 - Not found

- + diff --git a/Demos/demo_for_arm_robot/index.html b/Demos/demo_for_arm_robot/index.html index 820a77b..7a4d188 100644 --- a/Demos/demo_for_arm_robot/index.html +++ b/Demos/demo_for_arm_robot/index.html @@ -16,7 +16,7 @@ - + @@ -989,7 +989,7 @@

Demo For Arm Robot

- + diff --git a/Demos/demo_for_mobile_robot/index.html b/Demos/demo_for_mobile_robot/index.html index d8986d1..adb55eb 100644 --- a/Demos/demo_for_mobile_robot/index.html +++ b/Demos/demo_for_mobile_robot/index.html @@ -16,7 +16,7 @@ - + @@ -994,7 +994,7 @@

Demo For Mobile Robot

- + diff --git a/LICENSE/index.html b/LICENSE/index.html index f673db8..844834d 100644 --- a/LICENSE/index.html +++ b/LICENSE/index.html @@ -16,7 +16,7 @@ - + @@ -959,7 +959,7 @@

LICENSE

- + diff --git a/Tutorials/how_to_spawn_robot/index.html b/Tutorials/how_to_spawn_robot/index.html index d44d441..f85ce31 100644 --- a/Tutorials/how_to_spawn_robot/index.html +++ b/Tutorials/how_to_spawn_robot/index.html @@ -16,7 +16,7 @@ - + @@ -1129,7 +1129,7 @@

How to start up a node

- + diff --git a/Tutorials/how_to_use_simulator_launcher/index.html b/Tutorials/how_to_use_simulator_launcher/index.html index e1acf7f..a3febc8 100644 --- a/Tutorials/how_to_use_simulator_launcher/index.html +++ b/Tutorials/how_to_use_simulator_launcher/index.html @@ -16,7 +16,7 @@ - + @@ -1048,7 +1048,7 @@

Use from Launch File

- + diff --git a/Tutorials/setup_urdf_for_ros2_control/index.html b/Tutorials/setup_urdf_for_ros2_control/index.html index eec4121..bcd2d75 100644 --- a/Tutorials/setup_urdf_for_ros2_control/index.html +++ b/Tutorials/setup_urdf_for_ros2_control/index.html @@ -16,7 +16,7 @@ - + @@ -530,9 +530,18 @@
  • - + - Set up Joint Stiffness and Damping + Set up Joint Stiffness, Damping and Joint Friction + + + +
  • + +
  • + + + Set up Friction of Link @@ -958,9 +967,18 @@
  • - + + + Set up Joint Stiffness, Damping and Joint Friction + + + +
  • + +
  • + - Set up Joint Stiffness and Damping + Set up Friction of Link @@ -1029,20 +1047,57 @@

    Set up Joint Information

    </ros2_control>

    Note that the joint information used in isaac_ros2_control must contain one command_interface (position or velocity) and three state_interface (position and velocity and effort).

    -

    Set up Joint Stiffness and Damping

    +

    Set up Joint Stiffness, Damping and Joint Friction

    In Isaac Sim, the force output by the joint is given by

    force=stiffness*(position-targetposition)+damping*(velocity-targetvelocity)
     
    -

    The stiffness and damping are not defined in default URDF. +

    The stiffness, damping and joint friction are not defined in default URDF. In this package, they are defined in isaac_drive_api tag in joint tag like below.

    <robot>
       <joint>
    -    <isaac_drive_api stiffness="0" damping="150000"/>
    +    <isaac_drive_api stiffness="0" damping="150000" joint_friction="1000"/>
       </joint>
     </robot>
     

    Note that the joint tag that include the isaac_drive_api tag is not exist in ros2_control tag.

    In default behaviour, the stiffness and damping are set zero.

    + +

    Unlike Gazebo, Isaac Sim allows the user to set the static and dynamic friction coefficients. +Since these parameters are tied to the material, URDF adds friction information to the material tag, which is normally used to set the color. +The following is an example of a description of a material with friction set:

    +
    <robot>
    +  <material name="white">
    +    <color rgba="1.0 1.0 1.0 1.0"/>
    +    <isaac_rigid_body static_friction="1.0" dynamic_friction="1.0"/>
    +  </material>
    +</robot>
    +
    +

    As with regular URDF, you can set friction on the link by setting the material in the visual tag. +Example:

    +
    <robot>
    +  <link name="body_link">
    +    <inertial>
    +      <origin xyz="0 0 0" rpy="0 0 0"/>
    +      <mass value="1.0"/>
    +      <inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001"/>
    +    </inertial>
    +    <visual>
    +      <origin xyz="0 0 0" rpy="0 0 0" />
    +      <geometry>
    +        <box size="0.24 0.18 0.06" />
    +      </geometry>
    +      <material name="white" />
    +    </visual>
    +    <collision>
    +      <origin xyz="0 0 0" rpy="0 0 0" />
    +      <geometry>
    +        <box size="0.24 0.178 0.06" />
    +      </geometry>
    +    </collision>
    +  </link>
    +</robot>
    +
    +

    Note that there is no need to duplicate the material in the collision tag.

    @@ -1092,7 +1147,7 @@

    Set up Joint Stiffness and Damping{"base": "../..", "features": [], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}} - + diff --git a/Tutorials/setup_urdf_for_sensors/index.html b/Tutorials/setup_urdf_for_sensors/index.html index b9e4c5c..43e9f2c 100644 --- a/Tutorials/setup_urdf_for_sensors/index.html +++ b/Tutorials/setup_urdf_for_sensors/index.html @@ -16,7 +16,7 @@ - + @@ -1093,7 +1093,7 @@

    Description of Depth Camera inf - + diff --git a/Tutorials/tutorial/index.html b/Tutorials/tutorial/index.html index d30df95..bb1a7f1 100644 --- a/Tutorials/tutorial/index.html +++ b/Tutorials/tutorial/index.html @@ -16,7 +16,7 @@ - + @@ -953,7 +953,7 @@

    Tutorials

    - + diff --git a/docs/Tutorials/setup_urdf_for_ros2_control.md b/docs/Tutorials/setup_urdf_for_ros2_control.md index 77d542b..448cb8b 100644 --- a/docs/Tutorials/setup_urdf_for_ros2_control.md +++ b/docs/Tutorials/setup_urdf_for_ros2_control.md @@ -60,20 +60,20 @@ The following is an example of description of joint information. Note that the joint information used in isaac_ros2_control must contain one command_interface (position or velocity) and three state_interface (position and velocity and effort). -## Set up Joint Stiffness and Damping +## Set up Joint Stiffness, Damping and Joint Friction In Isaac Sim, the force output by the joint is given by ``` force=stiffness*(position-targetposition)+damping*(velocity-targetvelocity) ``` -The stiffness and damping are not defined in default URDF. +The stiffness, damping and joint friction are not defined in default URDF. In this package, they are defined in isaac_drive_api tag in joint tag like below. ``` - + ``` @@ -82,3 +82,47 @@ Note that the joint tag that include the isaac_drive_api tag is not exist in ros In default behaviour, the stiffness and damping are set zero. +## Set up Friction of Link + +Unlike Gazebo, Isaac Sim allows the user to set the static and dynamic friction coefficients. +Since these parameters are tied to the material, URDF adds friction information to the material tag, which is normally used to set the color. +The following is an example of a description of a material with friction set: + +``` + + + + + + +``` + +As with regular URDF, you can set friction on the link by setting the material in the visual tag. +Example: + +``` + + + + + + + + + + + + + + + + + + + + + + +``` + +Note that there is no need to duplicate the material in the collision tag. diff --git a/docs/index.md b/docs/index.md index c722d6b..b0c1801 100644 --- a/docs/index.md +++ b/docs/index.md @@ -12,6 +12,7 @@ - This sends joint status (position, velocity and effort) to ros2_control from Isaac Sim. - This launches sensors from URDF description. - This launchs sensors and controller at the desired timing. +- This sets stiffness, damping and friction from URDF description. ## System Requirements @@ -22,7 +23,7 @@ | Cores | 4 | | RAM | 32GB | | Storage | 50GB SSD | -| GPU | GeForce RTX 2070 | +| GPU | GeForce RTX 3070 | | VRAM | 8GB | | ROS 2 | Humble | diff --git "a/docs/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/setup_urdf_for_ros2_control.md" "b/docs/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/setup_urdf_for_ros2_control.md" index 23fd747..80060b0 100644 --- "a/docs/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/setup_urdf_for_ros2_control.md" +++ "b/docs/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/setup_urdf_for_ros2_control.md" @@ -62,20 +62,20 @@ URDFのros2_controlタグ内には、使用するros2_controlプラグインの ここで、isaac_ros2_controlで使用するジョイント情報は、command_interfaceを一つ(位置か速度)とstate_interfaceを3つ(位置、速度、力)含んでいる必要があることに注意してください。 -## ジョイントの剛性、ダンパ係数の設定 +## ジョイントの剛性、ダンパ係数、関節摩擦の設定 Isaac Simでは、ジョイントが発生させる力は以下の式で与えられる。 ``` force=stiffness*(position-targetposition)+damping*(velocity-targetvelocity) ``` -剛性(stiffness)とダンパ係数(damping)は通常のURDFでは記述できない。 +剛性(stiffness)とダンパ係数(damping)、関節摩擦(joint friction)は通常のURDFでは記述できない。 本パッケージでは、以下の記述のようにjointタグ内にisaac_drive_apiというタグを用意し、その中に記述するようにしている。 ``` - + ``` @@ -84,3 +84,48 @@ isaac_drive_apiタグが含まれるjointタグは、ros2_controlタグ内では isaac_drive_apiを含まないジョイントでは、剛性とダンパ係数は0に設定されます。 +## リンクの摩擦の設定 + +Isaac SimではGazeboと異なり、静止摩擦係数と動摩擦係数を設定することができます。 +これらのパラメータはマテリアルに紐付けられるため、URDFでは通常色を設定するために利用されていたmaterialタグに摩擦の情報を付与するようにしました。 +以下が摩擦を設定したマテリアルの記述の例です。 + +``` + + + + + + +``` + +通常のURDFと同様に、visualタグにマテリアルを設定することで、リンクに摩擦を設定することができます。 +例: + +``` + + + + + + + + + + + + + + + + + + + + + + +``` + +collisionタグに重複してマテリアルを記述しなくて良いことに気をつけてください。 + diff --git a/index.html b/index.html index f23c533..de9b259 100644 --- a/index.html +++ b/index.html @@ -14,7 +14,7 @@ - + @@ -1024,6 +1024,7 @@

    Features

  • This sends joint status (position, velocity and effort) to ros2_control from Isaac Sim.
  • This launches sensors from URDF description.
  • This launchs sensors and controller at the desired timing.
  • +
  • This sets stiffness, damping and friction from URDF description.
  • System Requirements

    @@ -1056,7 +1057,7 @@

    System Requirements

    - + @@ -1128,7 +1129,7 @@

    LICENSE

    - + diff --git a/ja/LICENSE/index.html b/ja/LICENSE/index.html index b339f58..c4f1546 100644 --- a/ja/LICENSE/index.html +++ b/ja/LICENSE/index.html @@ -16,7 +16,7 @@ - + @@ -961,7 +961,7 @@

    ライセンス

    - + diff --git a/ja/index.html b/ja/index.html index e35420b..54b5c6a 100644 --- a/ja/index.html +++ b/ja/index.html @@ -16,7 +16,7 @@ - + @@ -1138,7 +1138,7 @@

    ライセンス

    - + diff --git "a/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/how_to_spawn_robot/index.html" "b/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/how_to_spawn_robot/index.html" index 2c1c42c..54cccfc 100644 --- "a/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/how_to_spawn_robot/index.html" +++ "b/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/how_to_spawn_robot/index.html" @@ -16,7 +16,7 @@ - + @@ -1131,7 +1131,7 @@

    ノードの立ち上げ方について

    - + diff --git "a/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/how_to_use_simulator_launcher/index.html" "b/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/how_to_use_simulator_launcher/index.html" index fa1ebb8..ea81331 100644 --- "a/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/how_to_use_simulator_launcher/index.html" +++ "b/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/how_to_use_simulator_launcher/index.html" @@ -16,7 +16,7 @@ - + @@ -1050,7 +1050,7 @@

    launchファイルからの実行

    - + diff --git "a/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/setup_urdf_for_ros2_control/index.html" "b/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/setup_urdf_for_ros2_control/index.html" index 4519933..1f5948d 100644 --- "a/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/setup_urdf_for_ros2_control/index.html" +++ "b/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/setup_urdf_for_ros2_control/index.html" @@ -16,7 +16,7 @@ - + @@ -758,7 +758,16 @@
  • - ジョイントの剛性、ダンパ係数の設定 + ジョイントの剛性、ダンパ係数、関節摩擦の設定 + + + +
  • + +
  • + + + リンクの摩擦の設定 @@ -962,7 +971,16 @@
  • - ジョイントの剛性、ダンパ係数の設定 + ジョイントの剛性、ダンパ係数、関節摩擦の設定 + + + +
  • + +
  • + + + リンクの摩擦の設定 @@ -1032,20 +1050,57 @@

    ジョイント情報の設定

    </ros2_control>

    ここで、isaac_ros2_controlで使用するジョイント情報は、command_interfaceを一つ(位置か速度)とstate_interfaceを3つ(位置、速度、力)含んでいる必要があることに注意してください。

    -

    ジョイントの剛性、ダンパ係数の設定

    +

    ジョイントの剛性、ダンパ係数、関節摩擦の設定

    Isaac Simでは、ジョイントが発生させる力は以下の式で与えられる。

    force=stiffness*(position-targetposition)+damping*(velocity-targetvelocity)
     
    -

    剛性(stiffness)とダンパ係数(damping)は通常のURDFでは記述できない。 +

    剛性(stiffness)とダンパ係数(damping)、関節摩擦(joint friction)は通常のURDFでは記述できない。 本パッケージでは、以下の記述のようにjointタグ内にisaac_drive_apiというタグを用意し、その中に記述するようにしている。

    <robot>
       <joint>
    -    <isaac_drive_api stiffness="0" damping="150000"/>
    +    <isaac_drive_api stiffness="0" damping="150000" joint_friction="1000"/>
       </joint>
     </robot>
     

    isaac_drive_apiタグが含まれるjointタグは、ros2_controlタグ内ではないことに気をつけてください。

    isaac_drive_apiを含まないジョイントでは、剛性とダンパ係数は0に設定されます。

    +

    リンクの摩擦の設定

    +

    Isaac SimではGazeboと異なり、静止摩擦係数と動摩擦係数を設定することができます。 +これらのパラメータはマテリアルに紐付けられるため、URDFでは通常色を設定するために利用されていたmaterialタグに摩擦の情報を付与するようにしました。 +以下が摩擦を設定したマテリアルの記述の例です。

    +
    <robot>
    +  <material name="white">
    +    <color rgba="1.0 1.0 1.0 1.0"/>
    +    <isaac_rigid_body static_friction="1.0" dynamic_friction="1.0"/>
    +  </material>
    +</robot>
    +
    +

    通常のURDFと同様に、visualタグにマテリアルを設定することで、リンクに摩擦を設定することができます。 +例:

    +
    <robot>
    +  <link name="body_link">
    +    <inertial>
    +      <origin xyz="0 0 0" rpy="0 0 0"/>
    +      <mass value="1.0"/>
    +      <inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001"/>
    +    </inertial>
    +    <visual>
    +      <origin xyz="0 0 0" rpy="0 0 0" />
    +      <geometry>
    +        <box size="0.24 0.18 0.06" />
    +      </geometry>
    +      <material name="white" />
    +    </visual>
    +    <collision>
    +      <origin xyz="0 0 0" rpy="0 0 0" />
    +      <geometry>
    +        <box size="0.24 0.178 0.06" />
    +      </geometry>
    +    </collision>
    +  </link>
    +</robot>
    +
    +

    collisionタグに重複してマテリアルを記述しなくて良いことに気をつけてください。

    @@ -1095,7 +1150,7 @@

    ジョイントの剛性、ダンパ係数の設定

    - + diff --git "a/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/setup_urdf_for_sensors/index.html" "b/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/setup_urdf_for_sensors/index.html" index e04e155..1645ce9 100644 --- "a/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/setup_urdf_for_sensors/index.html" +++ "b/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/setup_urdf_for_sensors/index.html" @@ -16,7 +16,7 @@ - + @@ -1094,7 +1094,7 @@

    デプスカメラ情報の記述

    - + diff --git "a/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/tutorial/index.html" "b/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/tutorial/index.html" index f007832..e4384fa 100644 --- "a/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/tutorial/index.html" +++ "b/ja/\343\203\201\343\203\245\343\203\274\343\203\210\343\203\252\343\202\242\343\203\253/tutorial/index.html" @@ -16,7 +16,7 @@ - + @@ -955,7 +955,7 @@

    チュートリアル

    - + diff --git "a/ja/\343\203\207\343\203\242/demo_for_arm_robot/index.html" "b/ja/\343\203\207\343\203\242/demo_for_arm_robot/index.html" index 0d30b4a..5116710 100644 --- "a/ja/\343\203\207\343\203\242/demo_for_arm_robot/index.html" +++ "b/ja/\343\203\207\343\203\242/demo_for_arm_robot/index.html" @@ -16,7 +16,7 @@ - + @@ -990,7 +990,7 @@

    アームロボット向けデモ

    - + diff --git "a/ja/\343\203\207\343\203\242/demo_for_mobile_robot/index.html" "b/ja/\343\203\207\343\203\242/demo_for_mobile_robot/index.html" index 1ade410..91c3720 100644 --- "a/ja/\343\203\207\343\203\242/demo_for_mobile_robot/index.html" +++ "b/ja/\343\203\207\343\203\242/demo_for_mobile_robot/index.html" @@ -14,7 +14,7 @@ - + @@ -993,7 +993,7 @@

    移動ロボット向けデモ

    - + diff --git a/search/search_index.json b/search/search_index.json index eb75b60..1d39aa7 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Introduction","text":"

    This repository provides utilities to use Isaac Sim like Gazebo classic.

    "},{"location":"#features","title":"Features","text":""},{"location":"#system-requirements","title":"System Requirements","text":"Element Minimum Spec OS Ubuntu 22.04 CPU Intel Core i7 (7th Generation) AMD Ryzen 5 Cores 4 RAM 32GB Storage 50GB SSD GPU GeForce RTX 2070 VRAM 8GB ROS 2 Humble

    Please refer to Isaac Sim System Requirements.

    "},{"location":"#demo","title":"Demo","text":"

    This sample repository provides demonstlations for mobile robot and arm robot.

    Please check following documents.

    For Mobile Robot

    For Arm Robot

    "},{"location":"#how-to-use","title":"How to Use","text":"

    Check this tutorial.

    "},{"location":"#license","title":"LICENSE","text":"

    This repository is provided with MIT license. Please refer to this.

    "},{"location":"LICENSE/","title":"LICENSE","text":"
    MIT License\n\nCopyright (c) 2024 Masaaki Hijikata\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n
    "},{"location":"Demos/demo_for_arm_robot/","title":"Demo For Arm Robot","text":"
    1. Install Docker and pull Isaac Sim Docker Image.

    2. Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git

    3. Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive

    4. Build a docker image with shell script. bash cd docker ./build_docker_image.sh

    5. Launch a docker container bash ./launch_docker.sh

    6. Build ros2 source codes bash colcon build && source install/setup.bash

    7. Launch simulator bash ros2 run isaac_ros2_scripts launcher

    8. To spawn robot (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 launch franka_moveit_config demo.launch.py You can control the robot from RViz.

    [!NOTE] For the first time, launching Isaac Sim takes a very long time. Isaac Sim must be fully launched to spawn the robot.

    "},{"location":"Demos/demo_for_mobile_robot/","title":"Demo For Mobile Robot","text":"
    1. Install Docker and pull Isaac Sim Docker Image.

    2. Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git

    3. Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive

    4. Build a docker image with shell script. bash cd docker ./build_docker_image.sh

    5. Launch a docker container bash ./launch_docker.sh

    6. Build ros2 source codes bash colcon build && source install/setup.bash

    7. Launch simulator bash ros2 run isaac_ros2_scripts launcher

    8. Spawn robot (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 launch isaac_diffbot_sim diffbot_spawn.launch.py

    9. Launch teleop_twist_keyboard (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 run teleop_twist_keyboard teleop_twist_keyboard

    [!NOTE] For the first time, launching Isaac Sim takes a very long time. Isaac Sim must be fully launched to spawn the robot.

    "},{"location":"Tutorials/how_to_spawn_robot/","title":"How to Spawn Robot","text":"

    This document describes the procedure for generating a robot on the simulator. The generation of a robot model can be divided into the following three major steps: 1.

    1. generation of the physical model of the robot
    2. generation of the robot's sensor model
    3. generation of the robot controller

    The three steps are described in detail below.

    "},{"location":"Tutorials/how_to_spawn_robot/#generate-the-physical-model-of-the-robot","title":"Generate the physical model of the robot","text":"

    The following is an example of creating a node to generate a physical model of a robot.

        isaac_diffbot_description_path = os.path.join(\n        get_package_share_directory('diffbot_description'))\n\n    xacro_file = os.path.join(isaac_diffbot_description_path,\n                              'robots',\n                              'diffbot.urdf.xacro')\n    urdf_path = os.path.join(isaac_diffbot_description_path, 'robots', 'diffbot.urdf')\n\n    doc = xacro.process_file(xacro_file, mappings={'use_sim' : 'true'})\n\n    robot_desc = doc.toprettyxml(indent='  ')\n    f = open(urdf_path, 'w')\n    f.write(robot_desc)\n    f.close()\n\n    isaac_spawn_robot = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"spawn_robot\",\n        parameters=[{'urdf_path': str(urdf_path),\n                    'x' : 0.0,\n                    'y' : 0.0,\n                    'z' : 0.0,\n                    'R' : 0.0,\n                    'P' : 0.0,\n                    'Y' : 1.57,\n                    'fixed' : False,\n                    }],\n    )\n

    As shown in the example above, spawn_robot from the isaac_ros2_scripts package is used to generate the physical model. spawn_robot requires as arguments the URDF file of the robot to be generated, its position (X,Y,Z) and orientation (Roll,Pitch,Yaw), and whether the robot is fixed or not. The argument if the robot is fixed or not is used if the arm robot is fixed to the environment.

    "},{"location":"Tutorials/how_to_spawn_robot/#generate-sensor-model-of-the-robot","title":"Generate sensor model of the robot","text":"

    The following is an example of creating a node to generate a sensor model of a robot.

        isaac_prepare_sensors = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"prepare_sensors\",\n        parameters=[{'urdf_path': str(urdf_path)}],\n    )\n

    Since the generation of the robot's sensor model requires the information in the isaac tag in the URDF file, prepare_sensors requires the URDF file of the robot to be generated as an argument.

    "},{"location":"Tutorials/how_to_spawn_robot/#generate-robot-controllers","title":"Generate robot controllers","text":"

    The following is an example of creating a node to generate a controller for a robot. The controller here refers to the internal controller that drives the robot on the simulator based on shared memory values, not ros2_controller.

        isaac_prepare_robot_controller = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"prepare_robot_controller\",\n        parameters=[{'urdf_path': str(urdf_path)}],\n    )\n

    The information in the ros2_control tag in the URDF file is needed to generate the robot's controller, so prepare_robot_controller requires the URDF file of the robot to be generated as an argument.

    "},{"location":"Tutorials/how_to_spawn_robot/#how-to-start-up-a-node","title":"How to start up a node","text":"

    To generate additional robot models for Isaac Sim once it is up and running, this repository uses the Python REPL extension for Isaac Sim. This extension cannot be given multiple processes at the same time, so when launching a node, use RegisterEventHandler to process the nodes in order.

        return LaunchDescription([\n        RegisterEventHandler(\n            event_handler=OnProcessExit(\n                target_action=isaac_spawn_robot,\n                on_exit=[isaac_prepare_sensors],\n            )\n        ),\n        RegisterEventHandler(\n            event_handler=OnProcessExit(\n                target_action=isaac_prepare_sensors,\n                on_exit=[isaac_prepare_robot_controller],\n            )\n        ),\n        isaac_spawn_robot,\n    ])\n
    "},{"location":"Tutorials/how_to_use_simulator_launcher/","title":"How to Use Simulation Launcher","text":"

    Just as Gazebo Classic was able to launch the simulator from the ROS 2 launch file, this repository allows you to launch Isaac Sim using the simulation launcher.

    "},{"location":"Tutorials/how_to_use_simulator_launcher/#use-from-command-line","title":"Use from Command Line","text":"

    The simulation launcher can be run with the following command.

    ros2 run isaac_ros2_scripts launcher\n

    This command loads the default environment with the ground plane.

    "},{"location":"Tutorials/how_to_use_simulator_launcher/#use-from-launch-file","title":"Use from Launch File","text":"

    The ROS 2 launch file can be used to load and launch any USD file. An example of a launch file is shown below.

    import os\n\nfrom launch_ros.actions import Node\nfrom ament_index_python.packages import get_package_share_directory\nfrom launch import LaunchDescription\nfrom launch.substitutions import LaunchConfiguration\n\ndef generate_launch_description():\n    core_stage_description_path = os.path.join(\n        get_package_share_directory('stage_description'))\n\n    core_stage_usd_path = os.path.join(stage_description_path,\n                              'meshes', 'USD',\n                              'stage.usd')\n\n    isaac_launcher = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"launcher\",\n        parameters=[{'usd_path': str(core_stage_usd_path)}],\n    )\n\n    return LaunchDescription([\n        isaac_launcher,\n    ])\n

    In the above example, the simulation launcher is launched by reading the file \"stage_description/meshes/USD/stage.usd\".

    "},{"location":"Tutorials/setup_urdf_for_ros2_control/","title":"Set up URDF for ros2_control","text":""},{"location":"Tutorials/setup_urdf_for_ros2_control/#introduction-to-ros2_control","title":"Introduction to ros2_control","text":"

    The ros2_control offers a developers a common API that allows your software to switch between many different robot types, and the sensors they have built in, by simply changing some launch arguments. For example if we inspect the Panda Robot\u2019s ros2_control.xacro we can see it uses a flag use_fake_hardware to switch between being simulated or connecting to a physical robot.

    <ros2_control>\n  <hardware>\n    <xacro:if value=\"${use_fake_hardware}\">\n      <plugin>mock_components/GenericSystem</plugin>\n    </xacro:if>\n    <xacro:unless value=\"${use_fake_hardware}\">\n      <plugin>franka_hardware/FrankaHardwareInterface</plugin>\n      <param name=\"robot_ip\">${robot_ip}</param>\n    </xacro:unless>\n  </hardware>\n</ros2_control>\n

    Hardware Components can be of different types, but the plugin \"mock_components/GenericSystem\" is very a simple System that forwards the incoming command_interface values to the tracked state_interface of the joints (i.e., perfect control of the simulated joints).

    To use ros2_control with Isaac Sim, we have to introduce isaac_ros2_control. This Hardware Interface is a System that read / write joint state / command from shared memory. There is another method using topic_based_ros2_control, but this one did not work well with mobile robots due to problems with positional commands. isaac_ros2_control retrieves the shared memory associated with the name attribute of the robot tag and reads and writes information about the joint. Therefore, when operating multiple robots, it is necessary to change the name attribute value of the robot tag of the URDF to be read. The following is an example of introducing isaac_ros2_control.

    <ros2_control>\n  <hardware>\n    <xacro:if value=\"${use_fake_hardware}\">\n      <plugin>fake_components/GenericSystem</plugin>\n    </xacro:if>\n    <xacro:if value=\"${use_sim}\">\n      <plugin>isaac_ros2_control/IsaacSystem</plugin>\n    </xacro:if>\n  </hardware>\n</ros2_control>\n
    "},{"location":"Tutorials/setup_urdf_for_ros2_control/#set-up-joint-information","title":"Set up Joint Information","text":"

    Within the ros2_control tag in the URDF, joint information must be included in addition to the ros2_control plugin information. The following is an example of description of joint information.

    <ros2_control>\n  <joint>\n    <command_interface name=\"velocity\">\n      <param name=\"min\">-1</param>\n      <param name=\"max\"> 1</param>\n    </command_interface>\n    <state_interface name=\"position\"/>\n    <state_interface name=\"velocity\"/>\n    <state_interface name=\"effort\"/>\n  </joint>\n</ros2_control>\n

    Note that the joint information used in isaac_ros2_control must contain one command_interface (position or velocity) and three state_interface (position and velocity and effort).

    "},{"location":"Tutorials/setup_urdf_for_ros2_control/#set-up-joint-stiffness-and-damping","title":"Set up Joint Stiffness and Damping","text":"

    In Isaac Sim, the force output by the joint is given by

    force=stiffness*(position\uff0dtargetposition)+damping*(velocity\uff0dtargetvelocity)\n

    The stiffness and damping are not defined in default URDF. In this package, they are defined in isaac_drive_api tag in joint tag like below.

    <robot>\n  <joint>\n    <isaac_drive_api stiffness=\"0\" damping=\"150000\"/>\n  </joint>\n</robot>\n

    Note that the joint tag that include the isaac_drive_api tag is not exist in ros2_control tag.

    In default behaviour, the stiffness and damping are set zero.

    "},{"location":"Tutorials/setup_urdf_for_sensors/","title":"Set up URDF for Sensors","text":"

    This document shows how to describe the information of a sensor running on Isaac Sim in the robot's URDF.

    In Gazebo Classic, it was possible to generate sensors in the simulation by writing sensor information in the gazebo tag of the URDF. In this repository, the same functionality is achieved by describing sensor information in isaac tags. Below we show how to describe sensor information for LiDAR, cameras and depth cameras.

    "},{"location":"Tutorials/setup_urdf_for_sensors/#description-of-lidar-information","title":"Description of LiDAR information","text":"

    The following is an example of LiDAR information.

    <sensor name=\"lidar_link\" type=\"lidar\">\n  <topic>scan</topic>\n  <sensor_dimension_num>3</sensor_dimension_num> <!-- 2 or 3 -->\n  <config>Example_Rotary</config>\n  <!-- Config Example\n  <config>Example_Rotary</config>\n  <config>slamtec/RPLIDAR_S2E</config>\n  <config>hokuyo/UST-30LX</config>\n  -->\n</sensor>\n

    As shown in the example above, the basic description is the same as for the gazebo tag, but you can see that the setting values have changed. sensor_dimension_num is the dimension of the point cloud to be acquired, and can be set to 2D or 3D. config can be a LiDAR configuration file. The LiDAR configuration file is located in \"exts/omni.isaac.sensor/data/lidar_configs\" in \"exts/omni.isaac.sensor/data/lidar_configs\" in the Isaac Sim reference directory (\"~/.local/share/ov/pkg/isaac_sim-2023.1.1/\" for native or \"/isaac-sim\" for Docker). Please add configuration files as needed.

    "},{"location":"Tutorials/setup_urdf_for_sensors/#description-of-camera-information","title":"Description of Camera information","text":"

    The following is an example of camera information.

    <sensor name=\"camera_link\" type=\"camera\">\n  <topic>image_raw</topic>\n  <horizontal_fov_rad>1.3962634</horizontal_fov_rad>\n  <horizontal_focal_length>30</horizontal_focal_length> <!-- optical parameter -->\n  <vertical_focal_length>30</vertical_focal_length> <!-- optical parameter -->\n  <focus_distance>400</focus_distance> <!-- distance for clear image -->\n  <projection>perspective</projection> <!-- perspective or orthgonal -->\n  <image>\n     <width>600</width>\n     <height>600</height>\n  </image>\n  <clip>\n    <near>0.02</near>\n    <far>300</far>\n  </clip>\n  <update_rate>10.0</update_rate>\n</sensor>\n
    "},{"location":"Tutorials/setup_urdf_for_sensors/#description-of-depth-camera-information","title":"Description of Depth Camera information","text":"

    The following is an example of depth camera information.

    <sensor name=\"depth_camera_link\" type=\"depth_camera\">\n  <topic>image_raw</topic>\n  <horizontal_fov_rad>1.3962634</horizontal_fov_rad>\n  <horizontal_focal_length>30</horizontal_focal_length> <!-- optical parameter -->\n  <vertical_focal_length>30</vertical_focal_length> <!-- optical parameter -->\n  <focus_distance>400</focus_distance> <!-- distance for clear image -->\n  <projection>perspective</projection> <!-- perspective or orthgonal -->\n  <image>\n    <width>320</width>\n    <height>240</height>\n  </image>\n  <clip>\n    <near>0.1</near>\n    <far>100</far>\n  </clip>\n  <update_rate>10</update_rate>\n</sensor>\n
    "},{"location":"Tutorials/tutorial/","title":"Tutorials","text":""},{"location":"ja/","title":"\u306f\u3058\u3081\u306b","text":"

    \u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306f\u3001Gazebo Classic\u306e\u3088\u3046\u306a\u4f7f\u3044\u3084\u3059\u3044\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30c4\u30fc\u30eb\u3092Isaac Sim\u3067\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3059\u3002

    "},{"location":"ja/#_2","title":"\u7279\u5fb4","text":""},{"location":"ja/#_3","title":"\u30b7\u30b9\u30c6\u30e0\u8981\u4ef6","text":"\u8981\u7d20 \u6700\u5c0f\u30b9\u30da\u30c3\u30af OS Ubuntu 22.04 CPU Intel Core i7 (7th Generation) AMD Ryzen 5 Cores 4 RAM 32GB Storage 50GB SSD GPU GeForce RTX 2070 VRAM 8GB ROS 2 Humble

    \u3053\u3061\u3089\u306eIsaac Sim\u306e\u30b7\u30b9\u30c6\u30e0\u8981\u4ef6\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

    "},{"location":"ja/#_4","title":"\u30c7\u30e2","text":"

    \u30b5\u30f3\u30d7\u30eb\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u79fb\u52d5\u30ed\u30dc\u30c3\u30c8\u3068\u30a2\u30fc\u30e0\u30ed\u30dc\u30c3\u30c8\u306e\u30c7\u30e2\u30f3\u30b9\u30c8\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002

    \u4f7f\u3044\u65b9\u306f\u4e0b\u8a18\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002

    "},{"location":"ja/#_5","title":"\u4f7f\u3044\u65b9","text":"

    \u3053\u3061\u3089\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002

    "},{"location":"ja/#_6","title":"\u30e9\u30a4\u30bb\u30f3\u30b9","text":"

    \u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306fMIT\u30e9\u30a4\u30bb\u30f3\u30b9\u3067\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002 \u8a73\u7d30\u306f\u3053\u3061\u3089\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002

    "},{"location":"ja/LICENSE/","title":"\u30e9\u30a4\u30bb\u30f3\u30b9","text":"
    MIT License\n\nCopyright (c) 2024 Masaaki Hijikata\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n
    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_spawn_robot/","title":"\u30ed\u30dc\u30c3\u30c8\u306e\u751f\u6210\u65b9\u6cd5","text":"

    \u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u306f\u3001\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u4e0a\u306b\u30ed\u30dc\u30c3\u30c8\u3092\u751f\u6210\u3059\u308b\u624b\u9806\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002 \u30ed\u30dc\u30c3\u30c8\u30e2\u30c7\u30eb\u306e\u751f\u6210\u306f\u3001\u5927\u304d\u304f\u5206\u3051\u3066\u4ee5\u4e0b\u306e\uff13\u3064\u306e\u624b\u9806\u306b\u5206\u3051\u3089\u308c\u307e\u3059\u3002

    1. \u30ed\u30dc\u30c3\u30c8\u306e\u7269\u7406\u30e2\u30c7\u30eb\u306e\u751f\u6210
    2. \u30ed\u30dc\u30c3\u30c8\u306e\u30bb\u30f3\u30b5\u30e2\u30c7\u30eb\u306e\u751f\u6210
    3. \u30ed\u30dc\u30c3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u751f\u6210

    \u4ee5\u4e0b\u3067\u306f\uff13\u3064\u306e\u624b\u9806\u306e\u8a73\u7d30\u3092\u8aac\u660e\u3057\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_spawn_robot/#_2","title":"\u30ed\u30dc\u30c3\u30c8\u306e\u7269\u7406\u30e2\u30c7\u30eb\u306e\u751f\u6210","text":"

    \u30ed\u30dc\u30c3\u30c8\u306e\u7269\u7406\u30e2\u30c7\u30eb\u3092\u751f\u6210\u3059\u308b\u30ce\u30fc\u30c9\u3092\u4f5c\u6210\u3059\u308b\u4f8b\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\u3002

        isaac_diffbot_description_path = os.path.join(\n        get_package_share_directory('diffbot_description'))\n\n    xacro_file = os.path.join(isaac_diffbot_description_path,\n                              'robots',\n                              'diffbot.urdf.xacro')\n    urdf_path = os.path.join(isaac_diffbot_description_path, 'robots', 'diffbot.urdf')\n    # xacro\u3092\u30ed\u30fc\u30c9\n    doc = xacro.process_file(xacro_file, mappings={'use_sim' : 'true'})\n    # xacro\u3092\u5c55\u958b\u3057\u3066URDF\u3092\u751f\u6210\n    robot_desc = doc.toprettyxml(indent='  ')\n    f = open(urdf_path, 'w')\n    f.write(robot_desc)\n    f.close()\n\n    isaac_spawn_robot = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"spawn_robot\",\n        parameters=[{'urdf_path': str(urdf_path),\n                    'x' : 0.0,\n                    'y' : 0.0,\n                    'z' : 0.0,\n                    'R' : 0.0,\n                    'P' : 0.0,\n                    'Y' : 1.57,\n                    'fixed' : False,\n                    }],\n    )\n

    \u4e0a\u8a18\u306e\u4f8b\u306b\u3042\u308b\u3088\u3046\u306b\u3001\u7269\u7406\u30e2\u30c7\u30eb\u306e\u751f\u6210\u306b\u306f\u3001isaac_ros2_scripts\u30d1\u30c3\u30b1\u30fc\u30b8\u306espawn_robot\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002 spawn_robot\u306f\u5f15\u6570\u3068\u3057\u3066\u3001\u751f\u6210\u3059\u308b\u30ed\u30dc\u30c3\u30c8\u306eURDF\u30d5\u30a1\u30a4\u30eb\u3001\u4f4d\u7f6e\uff08X,Y,Z\uff09\u3068\u59ff\u52e2(Roll,Pitch,Yaw)\u3068\u30ed\u30dc\u30c3\u30c8\u304c\u56fa\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u4e0e\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 \u30ed\u30dc\u30c3\u30c8\u304c\u56fa\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u306e\u5f15\u6570\u306f\u3001\u30a2\u30fc\u30e0\u30ed\u30dc\u30c3\u30c8\u304c\u74b0\u5883\u306b\u56fa\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_spawn_robot/#_3","title":"\u30ed\u30dc\u30c3\u30c8\u306e\u30bb\u30f3\u30b5\u30e2\u30c7\u30eb\u306e\u751f\u6210","text":"

    \u30ed\u30dc\u30c3\u30c8\u306e\u30bb\u30f3\u30b5\u30e2\u30c7\u30eb\u3092\u751f\u6210\u3059\u308b\u30ce\u30fc\u30c9\u3092\u4f5c\u6210\u3059\u308b\u4f8b\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\u3002

        isaac_prepare_sensors = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"prepare_sensors\",\n        parameters=[{'urdf_path': str(urdf_path)}],\n    )\n

    \u30ed\u30dc\u30c3\u30c8\u306e\u30bb\u30f3\u30b5\u30e2\u30c7\u30eb\u306e\u751f\u6210\u306b\u306f\u3001URDF\u30d5\u30a1\u30a4\u30eb\u5185\u306eisaac\u30bf\u30b0\u5185\u306e\u60c5\u5831\u304c\u5fc5\u8981\u306a\u306e\u3067\u3001prepare_sensors\u306f\u5f15\u6570\u3068\u3057\u3066\u751f\u6210\u3059\u308b\u30ed\u30dc\u30c3\u30c8\u306eURDF\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u3067\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_spawn_robot/#_4","title":"\u30ed\u30dc\u30c3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u751f\u6210","text":"

    \u30ed\u30dc\u30c3\u30c8\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3092\u751f\u6210\u3059\u308b\u30ce\u30fc\u30c9\u3092\u4f5c\u6210\u3059\u308b\u4f8b\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\u3002 \u3053\u3053\u3067\u3044\u3046\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306f\u3001ros2_controller\u3067\u306f\u306a\u304f\u5171\u6709\u30e1\u30e2\u30ea\u306e\u5024\u3092\u3082\u3068\u306b\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u4e0a\u306e\u30ed\u30dc\u30c3\u30c8\u3092\u99c6\u52d5\u3055\u305b\u308b\u5185\u90e8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3092\u6307\u3057\u307e\u3059\u3002

        isaac_prepare_robot_controller = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"prepare_robot_controller\",\n        parameters=[{'urdf_path': str(urdf_path)}],\n    )\n

    \u30ed\u30dc\u30c3\u30c8\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u751f\u6210\u306b\u306f\u3001URDF\u30d5\u30a1\u30a4\u30eb\u5185\u306eros2_control\u30bf\u30b0\u5185\u306e\u60c5\u5831\u304c\u5fc5\u8981\u306a\u306e\u3067\u3001prepare_robot_controller\u306b\u306f\u5f15\u6570\u3068\u3057\u3066\u751f\u6210\u3059\u308b\u30ed\u30dc\u30c3\u30c8\u306eURDF\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u3067\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_spawn_robot/#_5","title":"\u30ce\u30fc\u30c9\u306e\u7acb\u3061\u4e0a\u3052\u65b9\u306b\u3064\u3044\u3066","text":"

    \u4e00\u5ea6\u8d77\u52d5\u3057\u3066\u3044\u308bIsaac Sim\u306b\u8ffd\u52a0\u3067\u30ed\u30dc\u30c3\u30c8\u30e2\u30c7\u30eb\u3092\u751f\u6210\u3059\u308b\u65b9\u6cd5\u3068\u3057\u3066\u3001\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u306fIsaac Sim\u306ePython REPL\u30a8\u30af\u30b9\u30c6\u30f3\u30b7\u30e7\u30f3\u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\u3002 \u3053\u306e\u30a8\u30af\u30b9\u30c6\u30f3\u30b7\u30e7\u30f3\u306f\u540c\u6642\u306b\u8907\u6570\u306e\u51e6\u7406\u3092\u4e0e\u3048\u308b\u3053\u3068\u304c\u51fa\u6765\u306a\u3044\u306e\u3067\u3001\u30ce\u30fc\u30c9\u3092\u8d77\u52d5\u3059\u308b\u969b\u306b\u306fRegisterEventHandler\u3092\u4f7f\u7528\u3057\u3066\u9806\u756a\u306b\u30ce\u30fc\u30c9\u3092\u51e6\u7406\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        return LaunchDescription([\n        RegisterEventHandler(\n            event_handler=OnProcessExit(\n                target_action=isaac_spawn_robot,\n                on_exit=[isaac_prepare_sensors],\n            )\n        ),\n        RegisterEventHandler(\n            event_handler=OnProcessExit(\n                target_action=isaac_prepare_sensors,\n                on_exit=[isaac_prepare_robot_controller],\n            )\n        ),\n        isaac_spawn_robot,\n    ])\n
    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_use_simulator_launcher/","title":"\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u30e9\u30f3\u30c1\u30e3\u30fc\u306e\u4f7f\u3044\u65b9","text":"

    Gazebo Classic\u3067\u3082\u3001ROS 2\u306elaunch\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u3092\u8d77\u52d5\u3067\u304d\u305f\u3088\u3046\u306b\u3001\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u306f\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u30e9\u30f3\u30c1\u30e3\u30fc\u3092\u4f7f\u7528\u3057\u3066Isaac Sim\u3092\u8d77\u52d5\u3067\u304d\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_use_simulator_launcher/#_2","title":"\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u306e\u5b9f\u884c","text":"

    \u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u30e9\u30f3\u30c1\u30e3\u30fc\u306f\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002

    ros2 run isaac_ros2_scripts launcher\n

    \u3053\u306e\u30b3\u30de\u30f3\u30c9\u3067\u306f\u3001\u5730\u9762\u306e\u3042\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u74b0\u5883\u304c\u8aad\u307f\u8fbc\u307e\u308c\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_use_simulator_launcher/#launch","title":"launch\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u306e\u5b9f\u884c","text":"

    ROS 2\u306elaunch\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4efb\u610f\u306eUSD\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u8d77\u52d5\u3055\u305b\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\u3002 launch\u30d5\u30a1\u30a4\u30eb\u306e\u4f8b\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\u3002

    import os\n\nfrom launch_ros.actions import Node\nfrom ament_index_python.packages import get_package_share_directory\nfrom launch import LaunchDescription\nfrom launch.substitutions import LaunchConfiguration\n\ndef generate_launch_description():\n    core_stage_description_path = os.path.join(\n        get_package_share_directory('stage_description'))\n\n    core_stage_usd_path = os.path.join(stage_description_path,\n                              'meshes', 'USD',\n                              'stage.usd')\n\n    isaac_launcher = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"launcher\",\n        parameters=[{'usd_path': str(core_stage_usd_path)}],\n    )\n\n    return LaunchDescription([\n        isaac_launcher,\n    ])\n

    \u4e0a\u8a18\u306e\u4f8b\u3067\u306f\u3001stage_description/meshes/USD/stage.usd\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3001\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u30e9\u30f3\u30c1\u30e3\u30fc\u3092\u8d77\u52d5\u3057\u3066\u3044\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_ros2_control/","title":"URDF\u3078\u306eros2_cotnrol\u30bf\u30b0\u306e\u8a18\u8ff0\u65b9\u6cd5","text":"

    \u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u306fIsaac Sim\u4e0a\u3067ros2_control\u3067\u5236\u5fa1\u3067\u304d\u308b\u30ed\u30dc\u30c3\u30c8\u306eURDF\u3092\u8a18\u8ff0\u3059\u308b\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_ros2_control/#ros2_control","title":"ros2_control\u306e\u5c0e\u5165","text":"

    ros2_control\u306f\u958b\u767a\u8005\u306b\u5171\u901a\u306eAPI\u3092\u63d0\u4f9b\u3057\u3001\u8d77\u52d5\u6642\u306e\u5f15\u6570\u3092\u5909\u66f4\u3059\u308b\u3060\u3051\u3067\u3001\u69d8\u3005\u306a\u30bf\u30a4\u30d7\u306e\u30ed\u30dc\u30c3\u30c8\u3084\u5185\u8535\u30bb\u30f3\u30b5\u3092\u5207\u308a\u66ff\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001panda\u306eros2_control.xacro\u3092\u898b\u3066\u307f\u308b\u3068\u3001use_fake_hardware\u3068\u3044\u3046\u30d5\u30e9\u30b0\u3092\u4f7f\u3063\u3066\u3001\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u304b\u7269\u7406\u30ed\u30dc\u30c3\u30c8\u3078\u306e\u63a5\u7d9a\u304b\u3092\u5207\u308a\u66ff\u3048\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002

    <ros2_control>\n  <hardware>\n    <xacro:if value=\"${use_fake_hardware}\">\n      <plugin>mock_components/GenericSystem</plugin>\n    </xacro:if>\n    <xacro:unless value=\"${use_fake_hardware}\">\n      <plugin>franka_hardware/FrankaHardwareInterface</plugin>\n      <param name=\"robot_ip\">${robot_ip}</param>\n    </xacro:unless>\n  </hardware>\n</ros2_control>\n

    \u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u30fb\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u306f\u69d8\u3005\u306a\u30bf\u30a4\u30d7\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u30d7\u30e9\u30b0\u30a4\u30f3 \"mock_components/GenericSystem \"\u306f\u3001\u5165\u529b\u3055\u308c\u305fcommand_interface\u306e\u5024\u3092\u3001\u95a2\u7bc0\u306e\u8ffd\u8de1\u3055\u308c\u305fstate_interface\u306b\u8ee2\u9001\u3059\u308b\uff08\u3064\u307e\u308a\u3001\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3055\u308c\u305f\u95a2\u7bc0\u3092\u5b8c\u74a7\u306b\u5236\u5fa1\u3059\u308b\uff09\u975e\u5e38\u306b\u30b7\u30f3\u30d7\u30eb\u306a\u30b7\u30b9\u30c6\u30e0\u3067\u3059\u3002

    Isaac Sim\u3067ros2_control\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001isaac_ros2_control\u3092\u5c0e\u5165\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306f\u3001\u5171\u6709\u30e1\u30e2\u30ea\u304b\u3089\u95a2\u7bc0\u306e\u72b6\u614b\u3084\u30b3\u30de\u30f3\u30c9\u3092\u8aad\u307f\u66f8\u304d\u3059\u308b\u30b7\u30b9\u30c6\u30e0\u3067\u3059\u3002 \u4ed6\u306b\u3082topic_based_ros2_control\u3092\u4f7f\u3046\u65b9\u6cd5\u3082\u3042\u308a\u307e\u3059\u304c\u3001\u3053\u3061\u3089\u306f\u4f4d\u7f6e\u6307\u4ee4\u306b\u3088\u3063\u3066\u95a2\u7bc0\u89d2\u5ea6\u304c\u56fa\u5b9a\u3055\u308c\u308b\u554f\u984c\u304c\u3042\u308a\u3001\u79fb\u52d5\u30ed\u30dc\u30c3\u30c8\u3067\u306f\u3046\u307e\u304f\u52d5\u4f5c\u3057\u307e\u305b\u3093\u3067\u3057\u305f\u3002 isaac_ros2_control\u306f\u3001\u30ed\u30dc\u30c3\u30c8\u30bf\u30b0\u306ename\u5c5e\u6027\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u5171\u6709\u30e1\u30e2\u30ea\u3092\u53d6\u5f97\u3057\u3001\u95a2\u7bc0\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u8aad\u307f\u66f8\u304d\u3057\u307e\u3059\u3002 \u305d\u306e\u305f\u3081\u3001\u8907\u6570\u306e\u30ed\u30dc\u30c3\u30c8\u3092\u64cd\u4f5c\u3059\u308b\u5834\u5408\u306f\u3001\u8aad\u307f\u8fbc\u3080URDF\u306e\u30ed\u30dc\u30c3\u30c8\u30bf\u30b0\u306ename\u5c5e\u6027\u5024\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 \u4ee5\u4e0b\u306bisaac_ros2_control\u306e\u5c0e\u5165\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002

    <ros2_control>\n  <hardware>\n    <xacro:if value=\"${use_fake_hardware}\">\n      <plugin>fake_components/GenericSystem</plugin>\n    </xacro:if>\n    <xacro:if value=\"${use_sim}\">\n      <plugin>isaac_ros2_control/IsaacSystem</plugin>\n    </xacro:if>\n  </hardware>\n</ros2_control>\n
    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_ros2_control/#_1","title":"\u30b8\u30e7\u30a4\u30f3\u30c8\u60c5\u5831\u306e\u8a2d\u5b9a","text":"

    URDF\u306eros2_control\u30bf\u30b0\u5185\u306b\u306f\u3001\u4f7f\u7528\u3059\u308bros2_control\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u60c5\u5831\u306b\u52a0\u3048\u3066\u3001\u30b8\u30e7\u30a4\u30f3\u30c8\u306e\u60c5\u5831\u3092\u8a18\u8f09\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 \u4ee5\u4e0b\u306f\u30b8\u30e7\u30a4\u30f3\u30c8\u60c5\u5831\u306e\u8a2d\u5b9a\u306e\u4f8b\u3067\u3059\u3002

    <ros2_control>\n  <joint>\n    <command_interface name=\"velocity\">\n      <param name=\"min\">-1</param>\n      <param name=\"max\"> 1</param>\n    </command_interface>\n    <state_interface name=\"position\"/>\n    <state_interface name=\"velocity\"/>\n    <state_interface name=\"effort\"/>\n  </joint>\n</ros2_control>\n

    \u3053\u3053\u3067\u3001isaac_ros2_control\u3067\u4f7f\u7528\u3059\u308b\u30b8\u30e7\u30a4\u30f3\u30c8\u60c5\u5831\u306f\u3001command_interface\u3092\u4e00\u3064\uff08\u4f4d\u7f6e\u304b\u901f\u5ea6\uff09\u3068state_interface\u3092\uff13\u3064\uff08\u4f4d\u7f6e\u3001\u901f\u5ea6\u3001\u529b\uff09\u542b\u3093\u3067\u3044\u308b\u5fc5\u8981\u304c\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_ros2_control/#_2","title":"\u30b8\u30e7\u30a4\u30f3\u30c8\u306e\u525b\u6027\u3001\u30c0\u30f3\u30d1\u4fc2\u6570\u306e\u8a2d\u5b9a","text":"

    Isaac Sim\u3067\u306f\u3001\u30b8\u30e7\u30a4\u30f3\u30c8\u304c\u767a\u751f\u3055\u305b\u308b\u529b\u306f\u4ee5\u4e0b\u306e\u5f0f\u3067\u4e0e\u3048\u3089\u308c\u308b\u3002

    force=stiffness*(position\uff0dtargetposition)+damping*(velocity\uff0dtargetvelocity)\n

    \u525b\u6027(stiffness)\u3068\u30c0\u30f3\u30d1\u4fc2\u6570(damping)\u306f\u901a\u5e38\u306eURDF\u3067\u306f\u8a18\u8ff0\u3067\u304d\u306a\u3044\u3002 \u672c\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u8a18\u8ff0\u306e\u3088\u3046\u306bjoint\u30bf\u30b0\u5185\u306bisaac_drive_api\u3068\u3044\u3046\u30bf\u30b0\u3092\u7528\u610f\u3057\u3001\u305d\u306e\u4e2d\u306b\u8a18\u8ff0\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u308b\u3002

    <robot>\n  <joint>\n    <isaac_drive_api stiffness=\"0\" damping=\"150000\"/>\n  </joint>\n</robot>\n

    isaac_drive_api\u30bf\u30b0\u304c\u542b\u307e\u308c\u308bjoint\u30bf\u30b0\u306f\u3001ros2_control\u30bf\u30b0\u5185\u3067\u306f\u306a\u3044\u3053\u3068\u306b\u6c17\u3092\u3064\u3051\u3066\u304f\u3060\u3055\u3044\u3002

    isaac_drive_api\u3092\u542b\u307e\u306a\u3044\u30b8\u30e7\u30a4\u30f3\u30c8\u3067\u306f\u3001\u525b\u6027\u3068\u30c0\u30f3\u30d1\u4fc2\u6570\u306f0\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_sensors/","title":"URDF\u3078\u306e\u30bb\u30f3\u30b5\u60c5\u5831\u306e\u8a18\u8ff0\u65b9\u6cd5","text":"

    \u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u306fIsaac Sim\u4e0a\u3067\u52d5\u4f5c\u3059\u308b\u30bb\u30f3\u30b5\u306e\u60c5\u5831\u3092\u30ed\u30dc\u30c3\u30c8\u306eURDF\u306b\u8a18\u8ff0\u3059\u308b\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002

    Gazebo Classic\u3067\u306fURDF\u306egazebo\u30bf\u30b0\u306b\u30bb\u30f3\u30b5\u60c5\u5831\u3092\u8a18\u8f09\u3059\u308b\u3053\u3068\u3067\u3001\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u4e0a\u306b\u30bb\u30f3\u30b5\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u51fa\u6765\u3066\u3044\u307e\u3057\u305f\u3002 \u305d\u3053\u3067\u3001\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u306fisaac\u30bf\u30b0\u306b\u30bb\u30f3\u30b5\u60c5\u5831\u3092\u8a18\u8f09\u3059\u308b\u3053\u3068\u3067\u3001\u540c\u69d8\u306e\u6a5f\u80fd\u3092\u5b9f\u73fe\u3057\u3066\u3044\u307e\u3059\u3002 \u4ee5\u4e0b\u3067\u306f\u3001LiDAR\u3001\u30ab\u30e1\u30e9\u304a\u3088\u3073\u30c7\u30d7\u30b9\u30ab\u30e1\u30e9\u306e\u30bb\u30f3\u30b5\u60c5\u5831\u306e\u8a18\u8ff0\u65b9\u6cd5\u306b\u3064\u3044\u3066\u793a\u3057\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_sensors/#lidar","title":"LiDAR\u60c5\u5831\u306e\u8a18\u8ff0","text":"

    \u4ee5\u4e0b\u306bLiDAR\u60c5\u5831\u306e\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002

    <sensor name=\"lidar_link\" type=\"lidar\">\n  <topic>scan</topic>\n  <sensor_dimension_num>3</sensor_dimension_num> <!-- 2 or 3 -->\n  <config>Example_Rotary</config>\n  <!-- Config Example\n  <config>Example_Rotary</config>\n  <config>slamtec/RPLIDAR_S2E</config>\n  <config>hokuyo/UST-30LX</config>\n  -->\n</sensor>\n

    \u4e0a\u8a18\u306e\u4f8b\u306b\u3042\u308b\u3088\u3046\u306b\u3001\u57fa\u672c\u7684\u306a\u8a18\u8ff0\u65b9\u6cd5\u306fgazebo\u30bf\u30b0\u306e\u969b\u3068\u540c\u3058\u3067\u3059\u304c\u3001\u8a2d\u5b9a\u5024\u304c\u5909\u308f\u3063\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002 sensor_dimension_num\u306f\u53d6\u5f97\u3059\u308b\u70b9\u7fa4\u306e\u6b21\u5143\u3067\u3001\uff12\u6b21\u5143\u307e\u305f\u306f\uff13\u6b21\u5143\u304c\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002 config\u306b\u306f\u3001LiDAR\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002 LiDAR\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u3001Isaac Sim\u306e\u57fa\u6e96\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\uff08\u30cd\u30a4\u30c6\u30a3\u30d6\u306a\u3089\"~/.local/share/ov/pkg/isaac-sim_2023.1.1/\"\u3001Docker\u306a\u3089\"/isaac-sim\"\uff09\u5185\u306e\"exts/omni.isaac.sensor/data/lidar_configs\"\u306b\u3042\u308a\u307e\u3059\u3002 \u5fc5\u8981\u306e\u5fdc\u3058\u3066\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0\u3057\u3066\u5bfe\u5fdc\u3057\u3066\u304f\u3060\u3055\u3044\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_sensors/#_1","title":"\u30ab\u30e1\u30e9\u60c5\u5831\u306e\u8a18\u8ff0","text":"

    \u4ee5\u4e0b\u306b\u30ab\u30e1\u30e9\u60c5\u5831\u306e\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002

    <sensor name=\"camera_link\" type=\"camera\">\n  <topic>image_raw</topic>\n  <horizontal_fov_rad>1.3962634</horizontal_fov_rad>\n  <horizontal_focal_length>30</horizontal_focal_length> <!-- optical parameter -->\n  <vertical_focal_length>30</vertical_focal_length> <!-- optical parameter -->\n  <focus_distance>400</focus_distance> <!-- distance for clear image -->\n  <projection>perspective</projection> <!-- perspective or orthgonal -->\n  <image>\n     <width>600</width>\n     <height>600</height>\n  </image>\n  <clip>\n    <near>0.02</near>\n    <far>300</far>\n  </clip>\n  <update_rate>10.0</update_rate>\n</sensor>\n
    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_sensors/#_2","title":"\u30c7\u30d7\u30b9\u30ab\u30e1\u30e9\u60c5\u5831\u306e\u8a18\u8ff0","text":"
    <sensor name=\"depth_camera_link\" type=\"depth_camera\">\n  <topic>image_raw</topic>\n  <horizontal_fov_rad>1.3962634</horizontal_fov_rad>\n  <horizontal_focal_length>30</horizontal_focal_length> <!-- optical parameter -->\n  <vertical_focal_length>30</vertical_focal_length> <!-- optical parameter -->\n  <focus_distance>400</focus_distance> <!-- distance for clear image -->\n  <projection>perspective</projection> <!-- perspective or orthgonal -->\n  <image>\n    <width>320</width>\n    <height>240</height>\n  </image>\n  <clip>\n    <near>0.1</near>\n    <far>100</far>\n  </clip>\n  <update_rate>10</update_rate>\n</sensor>\n
    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/tutorial/","title":"\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb","text":""},{"location":"ja/%E3%83%87%E3%83%A2/demo_for_arm_robot/","title":"\u30a2\u30fc\u30e0\u30ed\u30dc\u30c3\u30c8\u5411\u3051\u30c7\u30e2","text":"
    1. Install Docker and pull Isaac Sim Docker Image.

    2. Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git

    3. Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive

    4. Build a docker image with shell script. bash cd docker ./build_docker_image.sh

    5. Launch a docker container bash ./launch_docker.sh

    6. Build ros2 source codes bash colcon build && source install/setup.bash

    7. Launch simulator bash ros2 run isaac_ros2_scripts launcher

    8. To spawn robot (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 launch franka_moveit_config demo.launch.py You can control the robot from RViz.

    [!NOTE] For the first time, launching Isaac Sim takes a very long time. Isaac Sim must be fully launched to spawn the robot.

    "},{"location":"ja/%E3%83%87%E3%83%A2/demo_for_mobile_robot/","title":"\u79fb\u52d5\u30ed\u30dc\u30c3\u30c8\u5411\u3051\u30c7\u30e2","text":"
    1. Install Docker and pull Isaac Sim Docker Image.

    2. Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git

    3. Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive

    4. Build a docker image with shell script. bash cd docker ./build_docker_image.sh

    5. Launch a docker container bash ./launch_docker.sh

    6. Build ros2 source codes bash colcon build && source install/setup.bash

    7. Launch simulator bash ros2 run isaac_ros2_scripts launcher

    8. Spawn robot (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 launch isaac_diffbot_sim diffbot_spawn.launch.py

    9. Launch teleop_twist_keyboard (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 run teleop_twist_keyboard teleop_twist_keyboard

    [!NOTE] For the first time, launching Isaac Sim takes a very long time. Isaac Sim must be fully launched to spawn the robot.

    "}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Introduction","text":"

    This repository provides utilities to use Isaac Sim like Gazebo classic.

    "},{"location":"#features","title":"Features","text":""},{"location":"#system-requirements","title":"System Requirements","text":"Element Minimum Spec OS Ubuntu 22.04 CPU Intel Core i7 (7th Generation) AMD Ryzen 5 Cores 4 RAM 32GB Storage 50GB SSD GPU GeForce RTX 3070 VRAM 8GB ROS 2 Humble

    Please refer to Isaac Sim System Requirements.

    "},{"location":"#demo","title":"Demo","text":"

    This sample repository provides demonstlations for mobile robot and arm robot.

    Please check following documents.

    For Mobile Robot

    For Arm Robot

    "},{"location":"#how-to-use","title":"How to Use","text":"

    Check this tutorial.

    "},{"location":"#license","title":"LICENSE","text":"

    This repository is provided with MIT license. Please refer to this.

    "},{"location":"LICENSE/","title":"LICENSE","text":"
    MIT License\n\nCopyright (c) 2024 Masaaki Hijikata\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n
    "},{"location":"Demos/demo_for_arm_robot/","title":"Demo For Arm Robot","text":"
    1. Install Docker and pull Isaac Sim Docker Image.

    2. Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git

    3. Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive

    4. Build a docker image with shell script. bash cd docker ./build_docker_image.sh

    5. Launch a docker container bash ./launch_docker.sh

    6. Build ros2 source codes bash colcon build && source install/setup.bash

    7. Launch simulator bash ros2 run isaac_ros2_scripts launcher

    8. To spawn robot (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 launch franka_moveit_config demo.launch.py You can control the robot from RViz.

    [!NOTE] For the first time, launching Isaac Sim takes a very long time. Isaac Sim must be fully launched to spawn the robot.

    "},{"location":"Demos/demo_for_mobile_robot/","title":"Demo For Mobile Robot","text":"
    1. Install Docker and pull Isaac Sim Docker Image.

    2. Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git

    3. Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive

    4. Build a docker image with shell script. bash cd docker ./build_docker_image.sh

    5. Launch a docker container bash ./launch_docker.sh

    6. Build ros2 source codes bash colcon build && source install/setup.bash

    7. Launch simulator bash ros2 run isaac_ros2_scripts launcher

    8. Spawn robot (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 launch isaac_diffbot_sim diffbot_spawn.launch.py

    9. Launch teleop_twist_keyboard (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 run teleop_twist_keyboard teleop_twist_keyboard

    [!NOTE] For the first time, launching Isaac Sim takes a very long time. Isaac Sim must be fully launched to spawn the robot.

    "},{"location":"Tutorials/how_to_spawn_robot/","title":"How to Spawn Robot","text":"

    This document describes the procedure for generating a robot on the simulator. The generation of a robot model can be divided into the following three major steps: 1.

    1. generation of the physical model of the robot
    2. generation of the robot's sensor model
    3. generation of the robot controller

    The three steps are described in detail below.

    "},{"location":"Tutorials/how_to_spawn_robot/#generate-the-physical-model-of-the-robot","title":"Generate the physical model of the robot","text":"

    The following is an example of creating a node to generate a physical model of a robot.

        isaac_diffbot_description_path = os.path.join(\n        get_package_share_directory('diffbot_description'))\n\n    xacro_file = os.path.join(isaac_diffbot_description_path,\n                              'robots',\n                              'diffbot.urdf.xacro')\n    urdf_path = os.path.join(isaac_diffbot_description_path, 'robots', 'diffbot.urdf')\n\n    doc = xacro.process_file(xacro_file, mappings={'use_sim' : 'true'})\n\n    robot_desc = doc.toprettyxml(indent='  ')\n    f = open(urdf_path, 'w')\n    f.write(robot_desc)\n    f.close()\n\n    isaac_spawn_robot = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"spawn_robot\",\n        parameters=[{'urdf_path': str(urdf_path),\n                    'x' : 0.0,\n                    'y' : 0.0,\n                    'z' : 0.0,\n                    'R' : 0.0,\n                    'P' : 0.0,\n                    'Y' : 1.57,\n                    'fixed' : False,\n                    }],\n    )\n

    As shown in the example above, spawn_robot from the isaac_ros2_scripts package is used to generate the physical model. spawn_robot requires as arguments the URDF file of the robot to be generated, its position (X,Y,Z) and orientation (Roll,Pitch,Yaw), and whether the robot is fixed or not. The argument if the robot is fixed or not is used if the arm robot is fixed to the environment.

    "},{"location":"Tutorials/how_to_spawn_robot/#generate-sensor-model-of-the-robot","title":"Generate sensor model of the robot","text":"

    The following is an example of creating a node to generate a sensor model of a robot.

        isaac_prepare_sensors = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"prepare_sensors\",\n        parameters=[{'urdf_path': str(urdf_path)}],\n    )\n

    Since the generation of the robot's sensor model requires the information in the isaac tag in the URDF file, prepare_sensors requires the URDF file of the robot to be generated as an argument.

    "},{"location":"Tutorials/how_to_spawn_robot/#generate-robot-controllers","title":"Generate robot controllers","text":"

    The following is an example of creating a node to generate a controller for a robot. The controller here refers to the internal controller that drives the robot on the simulator based on shared memory values, not ros2_controller.

        isaac_prepare_robot_controller = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"prepare_robot_controller\",\n        parameters=[{'urdf_path': str(urdf_path)}],\n    )\n

    The information in the ros2_control tag in the URDF file is needed to generate the robot's controller, so prepare_robot_controller requires the URDF file of the robot to be generated as an argument.

    "},{"location":"Tutorials/how_to_spawn_robot/#how-to-start-up-a-node","title":"How to start up a node","text":"

    To generate additional robot models for Isaac Sim once it is up and running, this repository uses the Python REPL extension for Isaac Sim. This extension cannot be given multiple processes at the same time, so when launching a node, use RegisterEventHandler to process the nodes in order.

        return LaunchDescription([\n        RegisterEventHandler(\n            event_handler=OnProcessExit(\n                target_action=isaac_spawn_robot,\n                on_exit=[isaac_prepare_sensors],\n            )\n        ),\n        RegisterEventHandler(\n            event_handler=OnProcessExit(\n                target_action=isaac_prepare_sensors,\n                on_exit=[isaac_prepare_robot_controller],\n            )\n        ),\n        isaac_spawn_robot,\n    ])\n
    "},{"location":"Tutorials/how_to_use_simulator_launcher/","title":"How to Use Simulation Launcher","text":"

    Just as Gazebo Classic was able to launch the simulator from the ROS 2 launch file, this repository allows you to launch Isaac Sim using the simulation launcher.

    "},{"location":"Tutorials/how_to_use_simulator_launcher/#use-from-command-line","title":"Use from Command Line","text":"

    The simulation launcher can be run with the following command.

    ros2 run isaac_ros2_scripts launcher\n

    This command loads the default environment with the ground plane.

    "},{"location":"Tutorials/how_to_use_simulator_launcher/#use-from-launch-file","title":"Use from Launch File","text":"

    The ROS 2 launch file can be used to load and launch any USD file. An example of a launch file is shown below.

    import os\n\nfrom launch_ros.actions import Node\nfrom ament_index_python.packages import get_package_share_directory\nfrom launch import LaunchDescription\nfrom launch.substitutions import LaunchConfiguration\n\ndef generate_launch_description():\n    core_stage_description_path = os.path.join(\n        get_package_share_directory('stage_description'))\n\n    core_stage_usd_path = os.path.join(stage_description_path,\n                              'meshes', 'USD',\n                              'stage.usd')\n\n    isaac_launcher = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"launcher\",\n        parameters=[{'usd_path': str(core_stage_usd_path)}],\n    )\n\n    return LaunchDescription([\n        isaac_launcher,\n    ])\n

    In the above example, the simulation launcher is launched by reading the file \"stage_description/meshes/USD/stage.usd\".

    "},{"location":"Tutorials/setup_urdf_for_ros2_control/","title":"Set up URDF for ros2_control","text":""},{"location":"Tutorials/setup_urdf_for_ros2_control/#introduction-to-ros2_control","title":"Introduction to ros2_control","text":"

    The ros2_control offers a developers a common API that allows your software to switch between many different robot types, and the sensors they have built in, by simply changing some launch arguments. For example if we inspect the Panda Robot\u2019s ros2_control.xacro we can see it uses a flag use_fake_hardware to switch between being simulated or connecting to a physical robot.

    <ros2_control>\n  <hardware>\n    <xacro:if value=\"${use_fake_hardware}\">\n      <plugin>mock_components/GenericSystem</plugin>\n    </xacro:if>\n    <xacro:unless value=\"${use_fake_hardware}\">\n      <plugin>franka_hardware/FrankaHardwareInterface</plugin>\n      <param name=\"robot_ip\">${robot_ip}</param>\n    </xacro:unless>\n  </hardware>\n</ros2_control>\n

    Hardware Components can be of different types, but the plugin \"mock_components/GenericSystem\" is very a simple System that forwards the incoming command_interface values to the tracked state_interface of the joints (i.e., perfect control of the simulated joints).

    To use ros2_control with Isaac Sim, we have to introduce isaac_ros2_control. This Hardware Interface is a System that read / write joint state / command from shared memory. There is another method using topic_based_ros2_control, but this one did not work well with mobile robots due to problems with positional commands. isaac_ros2_control retrieves the shared memory associated with the name attribute of the robot tag and reads and writes information about the joint. Therefore, when operating multiple robots, it is necessary to change the name attribute value of the robot tag of the URDF to be read. The following is an example of introducing isaac_ros2_control.

    <ros2_control>\n  <hardware>\n    <xacro:if value=\"${use_fake_hardware}\">\n      <plugin>fake_components/GenericSystem</plugin>\n    </xacro:if>\n    <xacro:if value=\"${use_sim}\">\n      <plugin>isaac_ros2_control/IsaacSystem</plugin>\n    </xacro:if>\n  </hardware>\n</ros2_control>\n
    "},{"location":"Tutorials/setup_urdf_for_ros2_control/#set-up-joint-information","title":"Set up Joint Information","text":"

    Within the ros2_control tag in the URDF, joint information must be included in addition to the ros2_control plugin information. The following is an example of description of joint information.

    <ros2_control>\n  <joint>\n    <command_interface name=\"velocity\">\n      <param name=\"min\">-1</param>\n      <param name=\"max\"> 1</param>\n    </command_interface>\n    <state_interface name=\"position\"/>\n    <state_interface name=\"velocity\"/>\n    <state_interface name=\"effort\"/>\n  </joint>\n</ros2_control>\n

    Note that the joint information used in isaac_ros2_control must contain one command_interface (position or velocity) and three state_interface (position and velocity and effort).

    "},{"location":"Tutorials/setup_urdf_for_ros2_control/#set-up-joint-stiffness-damping-and-joint-friction","title":"Set up Joint Stiffness, Damping and Joint Friction","text":"

    In Isaac Sim, the force output by the joint is given by

    force=stiffness*(position\uff0dtargetposition)+damping*(velocity\uff0dtargetvelocity)\n

    The stiffness, damping and joint friction are not defined in default URDF. In this package, they are defined in isaac_drive_api tag in joint tag like below.

    <robot>\n  <joint>\n    <isaac_drive_api stiffness=\"0\" damping=\"150000\" joint_friction=\"1000\"/>\n  </joint>\n</robot>\n

    Note that the joint tag that include the isaac_drive_api tag is not exist in ros2_control tag.

    In default behaviour, the stiffness and damping are set zero.

    "},{"location":"Tutorials/setup_urdf_for_ros2_control/#set-up-friction-of-link","title":"Set up Friction of Link","text":"

    Unlike Gazebo, Isaac Sim allows the user to set the static and dynamic friction coefficients. Since these parameters are tied to the material, URDF adds friction information to the material tag, which is normally used to set the color. The following is an example of a description of a material with friction set:

    <robot>\n  <material name=\"white\">\n    <color rgba=\"1.0 1.0 1.0 1.0\"/>\n    <isaac_rigid_body static_friction=\"1.0\" dynamic_friction=\"1.0\"/>\n  </material>\n</robot>\n

    As with regular URDF, you can set friction on the link by setting the material in the visual tag. Example:

    <robot>\n  <link name=\"body_link\">\n    <inertial>\n      <origin xyz=\"0 0 0\" rpy=\"0 0 0\"/>\n      <mass value=\"1.0\"/>\n      <inertia ixx=\"0.001\" ixy=\"0.0\" ixz=\"0.0\" iyy=\"0.001\" iyz=\"0.0\" izz=\"0.001\"/>\n    </inertial>\n    <visual>\n      <origin xyz=\"0 0 0\" rpy=\"0 0 0\" />\n      <geometry>\n        <box size=\"0.24 0.18 0.06\" />\n      </geometry>\n      <material name=\"white\" />\n    </visual>\n    <collision>\n      <origin xyz=\"0 0 0\" rpy=\"0 0 0\" />\n      <geometry>\n        <box size=\"0.24 0.178 0.06\" />\n      </geometry>\n    </collision>\n  </link>\n</robot>\n

    Note that there is no need to duplicate the material in the collision tag.

    "},{"location":"Tutorials/setup_urdf_for_sensors/","title":"Set up URDF for Sensors","text":"

    This document shows how to describe the information of a sensor running on Isaac Sim in the robot's URDF.

    In Gazebo Classic, it was possible to generate sensors in the simulation by writing sensor information in the gazebo tag of the URDF. In this repository, the same functionality is achieved by describing sensor information in isaac tags. Below we show how to describe sensor information for LiDAR, cameras and depth cameras.

    "},{"location":"Tutorials/setup_urdf_for_sensors/#description-of-lidar-information","title":"Description of LiDAR information","text":"

    The following is an example of LiDAR information.

    <sensor name=\"lidar_link\" type=\"lidar\">\n  <topic>scan</topic>\n  <sensor_dimension_num>3</sensor_dimension_num> <!-- 2 or 3 -->\n  <config>Example_Rotary</config>\n  <!-- Config Example\n  <config>Example_Rotary</config>\n  <config>slamtec/RPLIDAR_S2E</config>\n  <config>hokuyo/UST-30LX</config>\n  -->\n</sensor>\n

    As shown in the example above, the basic description is the same as for the gazebo tag, but you can see that the setting values have changed. sensor_dimension_num is the dimension of the point cloud to be acquired, and can be set to 2D or 3D. config can be a LiDAR configuration file. The LiDAR configuration file is located in \"exts/omni.isaac.sensor/data/lidar_configs\" in \"exts/omni.isaac.sensor/data/lidar_configs\" in the Isaac Sim reference directory (\"~/.local/share/ov/pkg/isaac_sim-2023.1.1/\" for native or \"/isaac-sim\" for Docker). Please add configuration files as needed.

    "},{"location":"Tutorials/setup_urdf_for_sensors/#description-of-camera-information","title":"Description of Camera information","text":"

    The following is an example of camera information.

    <sensor name=\"camera_link\" type=\"camera\">\n  <topic>image_raw</topic>\n  <horizontal_fov_rad>1.3962634</horizontal_fov_rad>\n  <horizontal_focal_length>30</horizontal_focal_length> <!-- optical parameter -->\n  <vertical_focal_length>30</vertical_focal_length> <!-- optical parameter -->\n  <focus_distance>400</focus_distance> <!-- distance for clear image -->\n  <projection>perspective</projection> <!-- perspective or orthgonal -->\n  <image>\n     <width>600</width>\n     <height>600</height>\n  </image>\n  <clip>\n    <near>0.02</near>\n    <far>300</far>\n  </clip>\n  <update_rate>10.0</update_rate>\n</sensor>\n
    "},{"location":"Tutorials/setup_urdf_for_sensors/#description-of-depth-camera-information","title":"Description of Depth Camera information","text":"

    The following is an example of depth camera information.

    <sensor name=\"depth_camera_link\" type=\"depth_camera\">\n  <topic>image_raw</topic>\n  <horizontal_fov_rad>1.3962634</horizontal_fov_rad>\n  <horizontal_focal_length>30</horizontal_focal_length> <!-- optical parameter -->\n  <vertical_focal_length>30</vertical_focal_length> <!-- optical parameter -->\n  <focus_distance>400</focus_distance> <!-- distance for clear image -->\n  <projection>perspective</projection> <!-- perspective or orthgonal -->\n  <image>\n    <width>320</width>\n    <height>240</height>\n  </image>\n  <clip>\n    <near>0.1</near>\n    <far>100</far>\n  </clip>\n  <update_rate>10</update_rate>\n</sensor>\n
    "},{"location":"Tutorials/tutorial/","title":"Tutorials","text":""},{"location":"ja/","title":"\u306f\u3058\u3081\u306b","text":"

    \u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306f\u3001Gazebo Classic\u306e\u3088\u3046\u306a\u4f7f\u3044\u3084\u3059\u3044\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30c4\u30fc\u30eb\u3092Isaac Sim\u3067\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3059\u3002

    "},{"location":"ja/#_2","title":"\u7279\u5fb4","text":""},{"location":"ja/#_3","title":"\u30b7\u30b9\u30c6\u30e0\u8981\u4ef6","text":"\u8981\u7d20 \u6700\u5c0f\u30b9\u30da\u30c3\u30af OS Ubuntu 22.04 CPU Intel Core i7 (7th Generation) AMD Ryzen 5 Cores 4 RAM 32GB Storage 50GB SSD GPU GeForce RTX 2070 VRAM 8GB ROS 2 Humble

    \u3053\u3061\u3089\u306eIsaac Sim\u306e\u30b7\u30b9\u30c6\u30e0\u8981\u4ef6\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002

    "},{"location":"ja/#_4","title":"\u30c7\u30e2","text":"

    \u30b5\u30f3\u30d7\u30eb\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u79fb\u52d5\u30ed\u30dc\u30c3\u30c8\u3068\u30a2\u30fc\u30e0\u30ed\u30dc\u30c3\u30c8\u306e\u30c7\u30e2\u30f3\u30b9\u30c8\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002

    \u4f7f\u3044\u65b9\u306f\u4e0b\u8a18\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002

    "},{"location":"ja/#_5","title":"\u4f7f\u3044\u65b9","text":"

    \u3053\u3061\u3089\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002

    "},{"location":"ja/#_6","title":"\u30e9\u30a4\u30bb\u30f3\u30b9","text":"

    \u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306fMIT\u30e9\u30a4\u30bb\u30f3\u30b9\u3067\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002 \u8a73\u7d30\u306f\u3053\u3061\u3089\u3092\u53c2\u7167\u304f\u3060\u3055\u3044\u3002

    "},{"location":"ja/LICENSE/","title":"\u30e9\u30a4\u30bb\u30f3\u30b9","text":"
    MIT License\n\nCopyright (c) 2024 Masaaki Hijikata\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n
    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_spawn_robot/","title":"\u30ed\u30dc\u30c3\u30c8\u306e\u751f\u6210\u65b9\u6cd5","text":"

    \u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u306f\u3001\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u4e0a\u306b\u30ed\u30dc\u30c3\u30c8\u3092\u751f\u6210\u3059\u308b\u624b\u9806\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002 \u30ed\u30dc\u30c3\u30c8\u30e2\u30c7\u30eb\u306e\u751f\u6210\u306f\u3001\u5927\u304d\u304f\u5206\u3051\u3066\u4ee5\u4e0b\u306e\uff13\u3064\u306e\u624b\u9806\u306b\u5206\u3051\u3089\u308c\u307e\u3059\u3002

    1. \u30ed\u30dc\u30c3\u30c8\u306e\u7269\u7406\u30e2\u30c7\u30eb\u306e\u751f\u6210
    2. \u30ed\u30dc\u30c3\u30c8\u306e\u30bb\u30f3\u30b5\u30e2\u30c7\u30eb\u306e\u751f\u6210
    3. \u30ed\u30dc\u30c3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u751f\u6210

    \u4ee5\u4e0b\u3067\u306f\uff13\u3064\u306e\u624b\u9806\u306e\u8a73\u7d30\u3092\u8aac\u660e\u3057\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_spawn_robot/#_2","title":"\u30ed\u30dc\u30c3\u30c8\u306e\u7269\u7406\u30e2\u30c7\u30eb\u306e\u751f\u6210","text":"

    \u30ed\u30dc\u30c3\u30c8\u306e\u7269\u7406\u30e2\u30c7\u30eb\u3092\u751f\u6210\u3059\u308b\u30ce\u30fc\u30c9\u3092\u4f5c\u6210\u3059\u308b\u4f8b\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\u3002

        isaac_diffbot_description_path = os.path.join(\n        get_package_share_directory('diffbot_description'))\n\n    xacro_file = os.path.join(isaac_diffbot_description_path,\n                              'robots',\n                              'diffbot.urdf.xacro')\n    urdf_path = os.path.join(isaac_diffbot_description_path, 'robots', 'diffbot.urdf')\n    # xacro\u3092\u30ed\u30fc\u30c9\n    doc = xacro.process_file(xacro_file, mappings={'use_sim' : 'true'})\n    # xacro\u3092\u5c55\u958b\u3057\u3066URDF\u3092\u751f\u6210\n    robot_desc = doc.toprettyxml(indent='  ')\n    f = open(urdf_path, 'w')\n    f.write(robot_desc)\n    f.close()\n\n    isaac_spawn_robot = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"spawn_robot\",\n        parameters=[{'urdf_path': str(urdf_path),\n                    'x' : 0.0,\n                    'y' : 0.0,\n                    'z' : 0.0,\n                    'R' : 0.0,\n                    'P' : 0.0,\n                    'Y' : 1.57,\n                    'fixed' : False,\n                    }],\n    )\n

    \u4e0a\u8a18\u306e\u4f8b\u306b\u3042\u308b\u3088\u3046\u306b\u3001\u7269\u7406\u30e2\u30c7\u30eb\u306e\u751f\u6210\u306b\u306f\u3001isaac_ros2_scripts\u30d1\u30c3\u30b1\u30fc\u30b8\u306espawn_robot\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002 spawn_robot\u306f\u5f15\u6570\u3068\u3057\u3066\u3001\u751f\u6210\u3059\u308b\u30ed\u30dc\u30c3\u30c8\u306eURDF\u30d5\u30a1\u30a4\u30eb\u3001\u4f4d\u7f6e\uff08X,Y,Z\uff09\u3068\u59ff\u52e2(Roll,Pitch,Yaw)\u3068\u30ed\u30dc\u30c3\u30c8\u304c\u56fa\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u4e0e\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 \u30ed\u30dc\u30c3\u30c8\u304c\u56fa\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u306e\u5f15\u6570\u306f\u3001\u30a2\u30fc\u30e0\u30ed\u30dc\u30c3\u30c8\u304c\u74b0\u5883\u306b\u56fa\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_spawn_robot/#_3","title":"\u30ed\u30dc\u30c3\u30c8\u306e\u30bb\u30f3\u30b5\u30e2\u30c7\u30eb\u306e\u751f\u6210","text":"

    \u30ed\u30dc\u30c3\u30c8\u306e\u30bb\u30f3\u30b5\u30e2\u30c7\u30eb\u3092\u751f\u6210\u3059\u308b\u30ce\u30fc\u30c9\u3092\u4f5c\u6210\u3059\u308b\u4f8b\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\u3002

        isaac_prepare_sensors = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"prepare_sensors\",\n        parameters=[{'urdf_path': str(urdf_path)}],\n    )\n

    \u30ed\u30dc\u30c3\u30c8\u306e\u30bb\u30f3\u30b5\u30e2\u30c7\u30eb\u306e\u751f\u6210\u306b\u306f\u3001URDF\u30d5\u30a1\u30a4\u30eb\u5185\u306eisaac\u30bf\u30b0\u5185\u306e\u60c5\u5831\u304c\u5fc5\u8981\u306a\u306e\u3067\u3001prepare_sensors\u306f\u5f15\u6570\u3068\u3057\u3066\u751f\u6210\u3059\u308b\u30ed\u30dc\u30c3\u30c8\u306eURDF\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u3067\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_spawn_robot/#_4","title":"\u30ed\u30dc\u30c3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u751f\u6210","text":"

    \u30ed\u30dc\u30c3\u30c8\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3092\u751f\u6210\u3059\u308b\u30ce\u30fc\u30c9\u3092\u4f5c\u6210\u3059\u308b\u4f8b\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\u3002 \u3053\u3053\u3067\u3044\u3046\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306f\u3001ros2_controller\u3067\u306f\u306a\u304f\u5171\u6709\u30e1\u30e2\u30ea\u306e\u5024\u3092\u3082\u3068\u306b\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u4e0a\u306e\u30ed\u30dc\u30c3\u30c8\u3092\u99c6\u52d5\u3055\u305b\u308b\u5185\u90e8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3092\u6307\u3057\u307e\u3059\u3002

        isaac_prepare_robot_controller = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"prepare_robot_controller\",\n        parameters=[{'urdf_path': str(urdf_path)}],\n    )\n

    \u30ed\u30dc\u30c3\u30c8\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u751f\u6210\u306b\u306f\u3001URDF\u30d5\u30a1\u30a4\u30eb\u5185\u306eros2_control\u30bf\u30b0\u5185\u306e\u60c5\u5831\u304c\u5fc5\u8981\u306a\u306e\u3067\u3001prepare_robot_controller\u306b\u306f\u5f15\u6570\u3068\u3057\u3066\u751f\u6210\u3059\u308b\u30ed\u30dc\u30c3\u30c8\u306eURDF\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u3067\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_spawn_robot/#_5","title":"\u30ce\u30fc\u30c9\u306e\u7acb\u3061\u4e0a\u3052\u65b9\u306b\u3064\u3044\u3066","text":"

    \u4e00\u5ea6\u8d77\u52d5\u3057\u3066\u3044\u308bIsaac Sim\u306b\u8ffd\u52a0\u3067\u30ed\u30dc\u30c3\u30c8\u30e2\u30c7\u30eb\u3092\u751f\u6210\u3059\u308b\u65b9\u6cd5\u3068\u3057\u3066\u3001\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u306fIsaac Sim\u306ePython REPL\u30a8\u30af\u30b9\u30c6\u30f3\u30b7\u30e7\u30f3\u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\u3002 \u3053\u306e\u30a8\u30af\u30b9\u30c6\u30f3\u30b7\u30e7\u30f3\u306f\u540c\u6642\u306b\u8907\u6570\u306e\u51e6\u7406\u3092\u4e0e\u3048\u308b\u3053\u3068\u304c\u51fa\u6765\u306a\u3044\u306e\u3067\u3001\u30ce\u30fc\u30c9\u3092\u8d77\u52d5\u3059\u308b\u969b\u306b\u306fRegisterEventHandler\u3092\u4f7f\u7528\u3057\u3066\u9806\u756a\u306b\u30ce\u30fc\u30c9\u3092\u51e6\u7406\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002

        return LaunchDescription([\n        RegisterEventHandler(\n            event_handler=OnProcessExit(\n                target_action=isaac_spawn_robot,\n                on_exit=[isaac_prepare_sensors],\n            )\n        ),\n        RegisterEventHandler(\n            event_handler=OnProcessExit(\n                target_action=isaac_prepare_sensors,\n                on_exit=[isaac_prepare_robot_controller],\n            )\n        ),\n        isaac_spawn_robot,\n    ])\n
    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_use_simulator_launcher/","title":"\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u30e9\u30f3\u30c1\u30e3\u30fc\u306e\u4f7f\u3044\u65b9","text":"

    Gazebo Classic\u3067\u3082\u3001ROS 2\u306elaunch\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u3092\u8d77\u52d5\u3067\u304d\u305f\u3088\u3046\u306b\u3001\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u306f\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u30e9\u30f3\u30c1\u30e3\u30fc\u3092\u4f7f\u7528\u3057\u3066Isaac Sim\u3092\u8d77\u52d5\u3067\u304d\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_use_simulator_launcher/#_2","title":"\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u306e\u5b9f\u884c","text":"

    \u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u30e9\u30f3\u30c1\u30e3\u30fc\u306f\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002

    ros2 run isaac_ros2_scripts launcher\n

    \u3053\u306e\u30b3\u30de\u30f3\u30c9\u3067\u306f\u3001\u5730\u9762\u306e\u3042\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u74b0\u5883\u304c\u8aad\u307f\u8fbc\u307e\u308c\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/how_to_use_simulator_launcher/#launch","title":"launch\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u306e\u5b9f\u884c","text":"

    ROS 2\u306elaunch\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4efb\u610f\u306eUSD\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u8d77\u52d5\u3055\u305b\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\u3002 launch\u30d5\u30a1\u30a4\u30eb\u306e\u4f8b\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\u3002

    import os\n\nfrom launch_ros.actions import Node\nfrom ament_index_python.packages import get_package_share_directory\nfrom launch import LaunchDescription\nfrom launch.substitutions import LaunchConfiguration\n\ndef generate_launch_description():\n    core_stage_description_path = os.path.join(\n        get_package_share_directory('stage_description'))\n\n    core_stage_usd_path = os.path.join(stage_description_path,\n                              'meshes', 'USD',\n                              'stage.usd')\n\n    isaac_launcher = Node(\n        package=\"isaac_ros2_scripts\",\n        executable=\"launcher\",\n        parameters=[{'usd_path': str(core_stage_usd_path)}],\n    )\n\n    return LaunchDescription([\n        isaac_launcher,\n    ])\n

    \u4e0a\u8a18\u306e\u4f8b\u3067\u306f\u3001stage_description/meshes/USD/stage.usd\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3001\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u30e9\u30f3\u30c1\u30e3\u30fc\u3092\u8d77\u52d5\u3057\u3066\u3044\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_ros2_control/","title":"URDF\u3078\u306eros2_cotnrol\u30bf\u30b0\u306e\u8a18\u8ff0\u65b9\u6cd5","text":"

    \u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u306fIsaac Sim\u4e0a\u3067ros2_control\u3067\u5236\u5fa1\u3067\u304d\u308b\u30ed\u30dc\u30c3\u30c8\u306eURDF\u3092\u8a18\u8ff0\u3059\u308b\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_ros2_control/#ros2_control","title":"ros2_control\u306e\u5c0e\u5165","text":"

    ros2_control\u306f\u958b\u767a\u8005\u306b\u5171\u901a\u306eAPI\u3092\u63d0\u4f9b\u3057\u3001\u8d77\u52d5\u6642\u306e\u5f15\u6570\u3092\u5909\u66f4\u3059\u308b\u3060\u3051\u3067\u3001\u69d8\u3005\u306a\u30bf\u30a4\u30d7\u306e\u30ed\u30dc\u30c3\u30c8\u3084\u5185\u8535\u30bb\u30f3\u30b5\u3092\u5207\u308a\u66ff\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001panda\u306eros2_control.xacro\u3092\u898b\u3066\u307f\u308b\u3068\u3001use_fake_hardware\u3068\u3044\u3046\u30d5\u30e9\u30b0\u3092\u4f7f\u3063\u3066\u3001\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u304b\u7269\u7406\u30ed\u30dc\u30c3\u30c8\u3078\u306e\u63a5\u7d9a\u304b\u3092\u5207\u308a\u66ff\u3048\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002

    <ros2_control>\n  <hardware>\n    <xacro:if value=\"${use_fake_hardware}\">\n      <plugin>mock_components/GenericSystem</plugin>\n    </xacro:if>\n    <xacro:unless value=\"${use_fake_hardware}\">\n      <plugin>franka_hardware/FrankaHardwareInterface</plugin>\n      <param name=\"robot_ip\">${robot_ip}</param>\n    </xacro:unless>\n  </hardware>\n</ros2_control>\n

    \u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u30fb\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u306f\u69d8\u3005\u306a\u30bf\u30a4\u30d7\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u30d7\u30e9\u30b0\u30a4\u30f3 \"mock_components/GenericSystem \"\u306f\u3001\u5165\u529b\u3055\u308c\u305fcommand_interface\u306e\u5024\u3092\u3001\u95a2\u7bc0\u306e\u8ffd\u8de1\u3055\u308c\u305fstate_interface\u306b\u8ee2\u9001\u3059\u308b\uff08\u3064\u307e\u308a\u3001\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3055\u308c\u305f\u95a2\u7bc0\u3092\u5b8c\u74a7\u306b\u5236\u5fa1\u3059\u308b\uff09\u975e\u5e38\u306b\u30b7\u30f3\u30d7\u30eb\u306a\u30b7\u30b9\u30c6\u30e0\u3067\u3059\u3002

    Isaac Sim\u3067ros2_control\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001isaac_ros2_control\u3092\u5c0e\u5165\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306f\u3001\u5171\u6709\u30e1\u30e2\u30ea\u304b\u3089\u95a2\u7bc0\u306e\u72b6\u614b\u3084\u30b3\u30de\u30f3\u30c9\u3092\u8aad\u307f\u66f8\u304d\u3059\u308b\u30b7\u30b9\u30c6\u30e0\u3067\u3059\u3002 \u4ed6\u306b\u3082topic_based_ros2_control\u3092\u4f7f\u3046\u65b9\u6cd5\u3082\u3042\u308a\u307e\u3059\u304c\u3001\u3053\u3061\u3089\u306f\u4f4d\u7f6e\u6307\u4ee4\u306b\u3088\u3063\u3066\u95a2\u7bc0\u89d2\u5ea6\u304c\u56fa\u5b9a\u3055\u308c\u308b\u554f\u984c\u304c\u3042\u308a\u3001\u79fb\u52d5\u30ed\u30dc\u30c3\u30c8\u3067\u306f\u3046\u307e\u304f\u52d5\u4f5c\u3057\u307e\u305b\u3093\u3067\u3057\u305f\u3002 isaac_ros2_control\u306f\u3001\u30ed\u30dc\u30c3\u30c8\u30bf\u30b0\u306ename\u5c5e\u6027\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u5171\u6709\u30e1\u30e2\u30ea\u3092\u53d6\u5f97\u3057\u3001\u95a2\u7bc0\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u8aad\u307f\u66f8\u304d\u3057\u307e\u3059\u3002 \u305d\u306e\u305f\u3081\u3001\u8907\u6570\u306e\u30ed\u30dc\u30c3\u30c8\u3092\u64cd\u4f5c\u3059\u308b\u5834\u5408\u306f\u3001\u8aad\u307f\u8fbc\u3080URDF\u306e\u30ed\u30dc\u30c3\u30c8\u30bf\u30b0\u306ename\u5c5e\u6027\u5024\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 \u4ee5\u4e0b\u306bisaac_ros2_control\u306e\u5c0e\u5165\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002

    <ros2_control>\n  <hardware>\n    <xacro:if value=\"${use_fake_hardware}\">\n      <plugin>fake_components/GenericSystem</plugin>\n    </xacro:if>\n    <xacro:if value=\"${use_sim}\">\n      <plugin>isaac_ros2_control/IsaacSystem</plugin>\n    </xacro:if>\n  </hardware>\n</ros2_control>\n
    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_ros2_control/#_1","title":"\u30b8\u30e7\u30a4\u30f3\u30c8\u60c5\u5831\u306e\u8a2d\u5b9a","text":"

    URDF\u306eros2_control\u30bf\u30b0\u5185\u306b\u306f\u3001\u4f7f\u7528\u3059\u308bros2_control\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u60c5\u5831\u306b\u52a0\u3048\u3066\u3001\u30b8\u30e7\u30a4\u30f3\u30c8\u306e\u60c5\u5831\u3092\u8a18\u8f09\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 \u4ee5\u4e0b\u306f\u30b8\u30e7\u30a4\u30f3\u30c8\u60c5\u5831\u306e\u8a2d\u5b9a\u306e\u4f8b\u3067\u3059\u3002

    <ros2_control>\n  <joint>\n    <command_interface name=\"velocity\">\n      <param name=\"min\">-1</param>\n      <param name=\"max\"> 1</param>\n    </command_interface>\n    <state_interface name=\"position\"/>\n    <state_interface name=\"velocity\"/>\n    <state_interface name=\"effort\"/>\n  </joint>\n</ros2_control>\n

    \u3053\u3053\u3067\u3001isaac_ros2_control\u3067\u4f7f\u7528\u3059\u308b\u30b8\u30e7\u30a4\u30f3\u30c8\u60c5\u5831\u306f\u3001command_interface\u3092\u4e00\u3064\uff08\u4f4d\u7f6e\u304b\u901f\u5ea6\uff09\u3068state_interface\u3092\uff13\u3064\uff08\u4f4d\u7f6e\u3001\u901f\u5ea6\u3001\u529b\uff09\u542b\u3093\u3067\u3044\u308b\u5fc5\u8981\u304c\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_ros2_control/#_2","title":"\u30b8\u30e7\u30a4\u30f3\u30c8\u306e\u525b\u6027\u3001\u30c0\u30f3\u30d1\u4fc2\u6570\u3001\u95a2\u7bc0\u6469\u64e6\u306e\u8a2d\u5b9a","text":"

    Isaac Sim\u3067\u306f\u3001\u30b8\u30e7\u30a4\u30f3\u30c8\u304c\u767a\u751f\u3055\u305b\u308b\u529b\u306f\u4ee5\u4e0b\u306e\u5f0f\u3067\u4e0e\u3048\u3089\u308c\u308b\u3002

    force=stiffness*(position\uff0dtargetposition)+damping*(velocity\uff0dtargetvelocity)\n

    \u525b\u6027(stiffness)\u3068\u30c0\u30f3\u30d1\u4fc2\u6570(damping)\u3001\u95a2\u7bc0\u6469\u64e6(joint friction)\u306f\u901a\u5e38\u306eURDF\u3067\u306f\u8a18\u8ff0\u3067\u304d\u306a\u3044\u3002 \u672c\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u8a18\u8ff0\u306e\u3088\u3046\u306bjoint\u30bf\u30b0\u5185\u306bisaac_drive_api\u3068\u3044\u3046\u30bf\u30b0\u3092\u7528\u610f\u3057\u3001\u305d\u306e\u4e2d\u306b\u8a18\u8ff0\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u308b\u3002

    <robot>\n  <joint>\n    <isaac_drive_api stiffness=\"0\" damping=\"150000\" joint_friction=\"1000\"/>\n  </joint>\n</robot>\n

    isaac_drive_api\u30bf\u30b0\u304c\u542b\u307e\u308c\u308bjoint\u30bf\u30b0\u306f\u3001ros2_control\u30bf\u30b0\u5185\u3067\u306f\u306a\u3044\u3053\u3068\u306b\u6c17\u3092\u3064\u3051\u3066\u304f\u3060\u3055\u3044\u3002

    isaac_drive_api\u3092\u542b\u307e\u306a\u3044\u30b8\u30e7\u30a4\u30f3\u30c8\u3067\u306f\u3001\u525b\u6027\u3068\u30c0\u30f3\u30d1\u4fc2\u6570\u306f0\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_ros2_control/#_3","title":"\u30ea\u30f3\u30af\u306e\u6469\u64e6\u306e\u8a2d\u5b9a","text":"

    Isaac Sim\u3067\u306fGazebo\u3068\u7570\u306a\u308a\u3001\u9759\u6b62\u6469\u64e6\u4fc2\u6570\u3068\u52d5\u6469\u64e6\u4fc2\u6570\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u3053\u308c\u3089\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u30de\u30c6\u30ea\u30a2\u30eb\u306b\u7d10\u4ed8\u3051\u3089\u308c\u308b\u305f\u3081\u3001URDF\u3067\u306f\u901a\u5e38\u8272\u3092\u8a2d\u5b9a\u3059\u308b\u305f\u3081\u306b\u5229\u7528\u3055\u308c\u3066\u3044\u305fmaterial\u30bf\u30b0\u306b\u6469\u64e6\u306e\u60c5\u5831\u3092\u4ed8\u4e0e\u3059\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f\u3002 \u4ee5\u4e0b\u304c\u6469\u64e6\u3092\u8a2d\u5b9a\u3057\u305f\u30de\u30c6\u30ea\u30a2\u30eb\u306e\u8a18\u8ff0\u306e\u4f8b\u3067\u3059\u3002

    <robot>\n  <material name=\"white\">\n    <color rgba=\"1.0 1.0 1.0 1.0\"/>\n    <isaac_rigid_body static_friction=\"1.0\" dynamic_friction=\"1.0\"/>\n  </material>\n</robot>\n

    \u901a\u5e38\u306eURDF\u3068\u540c\u69d8\u306b\u3001visual\u30bf\u30b0\u306b\u30de\u30c6\u30ea\u30a2\u30eb\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u30ea\u30f3\u30af\u306b\u6469\u64e6\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u4f8b\uff1a

    <robot>\n  <link name=\"body_link\">\n    <inertial>\n      <origin xyz=\"0 0 0\" rpy=\"0 0 0\"/>\n      <mass value=\"1.0\"/>\n      <inertia ixx=\"0.001\" ixy=\"0.0\" ixz=\"0.0\" iyy=\"0.001\" iyz=\"0.0\" izz=\"0.001\"/>\n    </inertial>\n    <visual>\n      <origin xyz=\"0 0 0\" rpy=\"0 0 0\" />\n      <geometry>\n        <box size=\"0.24 0.18 0.06\" />\n      </geometry>\n      <material name=\"white\" />\n    </visual>\n    <collision>\n      <origin xyz=\"0 0 0\" rpy=\"0 0 0\" />\n      <geometry>\n        <box size=\"0.24 0.178 0.06\" />\n      </geometry>\n    </collision>\n  </link>\n</robot>\n

    collision\u30bf\u30b0\u306b\u91cd\u8907\u3057\u3066\u30de\u30c6\u30ea\u30a2\u30eb\u3092\u8a18\u8ff0\u3057\u306a\u304f\u3066\u826f\u3044\u3053\u3068\u306b\u6c17\u3092\u3064\u3051\u3066\u304f\u3060\u3055\u3044\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_sensors/","title":"URDF\u3078\u306e\u30bb\u30f3\u30b5\u60c5\u5831\u306e\u8a18\u8ff0\u65b9\u6cd5","text":"

    \u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u306fIsaac Sim\u4e0a\u3067\u52d5\u4f5c\u3059\u308b\u30bb\u30f3\u30b5\u306e\u60c5\u5831\u3092\u30ed\u30dc\u30c3\u30c8\u306eURDF\u306b\u8a18\u8ff0\u3059\u308b\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002

    Gazebo Classic\u3067\u306fURDF\u306egazebo\u30bf\u30b0\u306b\u30bb\u30f3\u30b5\u60c5\u5831\u3092\u8a18\u8f09\u3059\u308b\u3053\u3068\u3067\u3001\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u4e0a\u306b\u30bb\u30f3\u30b5\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u51fa\u6765\u3066\u3044\u307e\u3057\u305f\u3002 \u305d\u3053\u3067\u3001\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u306fisaac\u30bf\u30b0\u306b\u30bb\u30f3\u30b5\u60c5\u5831\u3092\u8a18\u8f09\u3059\u308b\u3053\u3068\u3067\u3001\u540c\u69d8\u306e\u6a5f\u80fd\u3092\u5b9f\u73fe\u3057\u3066\u3044\u307e\u3059\u3002 \u4ee5\u4e0b\u3067\u306f\u3001LiDAR\u3001\u30ab\u30e1\u30e9\u304a\u3088\u3073\u30c7\u30d7\u30b9\u30ab\u30e1\u30e9\u306e\u30bb\u30f3\u30b5\u60c5\u5831\u306e\u8a18\u8ff0\u65b9\u6cd5\u306b\u3064\u3044\u3066\u793a\u3057\u307e\u3059\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_sensors/#lidar","title":"LiDAR\u60c5\u5831\u306e\u8a18\u8ff0","text":"

    \u4ee5\u4e0b\u306bLiDAR\u60c5\u5831\u306e\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002

    <sensor name=\"lidar_link\" type=\"lidar\">\n  <topic>scan</topic>\n  <sensor_dimension_num>3</sensor_dimension_num> <!-- 2 or 3 -->\n  <config>Example_Rotary</config>\n  <!-- Config Example\n  <config>Example_Rotary</config>\n  <config>slamtec/RPLIDAR_S2E</config>\n  <config>hokuyo/UST-30LX</config>\n  -->\n</sensor>\n

    \u4e0a\u8a18\u306e\u4f8b\u306b\u3042\u308b\u3088\u3046\u306b\u3001\u57fa\u672c\u7684\u306a\u8a18\u8ff0\u65b9\u6cd5\u306fgazebo\u30bf\u30b0\u306e\u969b\u3068\u540c\u3058\u3067\u3059\u304c\u3001\u8a2d\u5b9a\u5024\u304c\u5909\u308f\u3063\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002 sensor_dimension_num\u306f\u53d6\u5f97\u3059\u308b\u70b9\u7fa4\u306e\u6b21\u5143\u3067\u3001\uff12\u6b21\u5143\u307e\u305f\u306f\uff13\u6b21\u5143\u304c\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002 config\u306b\u306f\u3001LiDAR\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002 LiDAR\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u3001Isaac Sim\u306e\u57fa\u6e96\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\uff08\u30cd\u30a4\u30c6\u30a3\u30d6\u306a\u3089\"~/.local/share/ov/pkg/isaac-sim_2023.1.1/\"\u3001Docker\u306a\u3089\"/isaac-sim\"\uff09\u5185\u306e\"exts/omni.isaac.sensor/data/lidar_configs\"\u306b\u3042\u308a\u307e\u3059\u3002 \u5fc5\u8981\u306e\u5fdc\u3058\u3066\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0\u3057\u3066\u5bfe\u5fdc\u3057\u3066\u304f\u3060\u3055\u3044\u3002

    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_sensors/#_1","title":"\u30ab\u30e1\u30e9\u60c5\u5831\u306e\u8a18\u8ff0","text":"

    \u4ee5\u4e0b\u306b\u30ab\u30e1\u30e9\u60c5\u5831\u306e\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002

    <sensor name=\"camera_link\" type=\"camera\">\n  <topic>image_raw</topic>\n  <horizontal_fov_rad>1.3962634</horizontal_fov_rad>\n  <horizontal_focal_length>30</horizontal_focal_length> <!-- optical parameter -->\n  <vertical_focal_length>30</vertical_focal_length> <!-- optical parameter -->\n  <focus_distance>400</focus_distance> <!-- distance for clear image -->\n  <projection>perspective</projection> <!-- perspective or orthgonal -->\n  <image>\n     <width>600</width>\n     <height>600</height>\n  </image>\n  <clip>\n    <near>0.02</near>\n    <far>300</far>\n  </clip>\n  <update_rate>10.0</update_rate>\n</sensor>\n
    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/setup_urdf_for_sensors/#_2","title":"\u30c7\u30d7\u30b9\u30ab\u30e1\u30e9\u60c5\u5831\u306e\u8a18\u8ff0","text":"
    <sensor name=\"depth_camera_link\" type=\"depth_camera\">\n  <topic>image_raw</topic>\n  <horizontal_fov_rad>1.3962634</horizontal_fov_rad>\n  <horizontal_focal_length>30</horizontal_focal_length> <!-- optical parameter -->\n  <vertical_focal_length>30</vertical_focal_length> <!-- optical parameter -->\n  <focus_distance>400</focus_distance> <!-- distance for clear image -->\n  <projection>perspective</projection> <!-- perspective or orthgonal -->\n  <image>\n    <width>320</width>\n    <height>240</height>\n  </image>\n  <clip>\n    <near>0.1</near>\n    <far>100</far>\n  </clip>\n  <update_rate>10</update_rate>\n</sensor>\n
    "},{"location":"ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB/tutorial/","title":"\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb","text":""},{"location":"ja/%E3%83%87%E3%83%A2/demo_for_arm_robot/","title":"\u30a2\u30fc\u30e0\u30ed\u30dc\u30c3\u30c8\u5411\u3051\u30c7\u30e2","text":"
    1. Install Docker and pull Isaac Sim Docker Image.

    2. Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git

    3. Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive

    4. Build a docker image with shell script. bash cd docker ./build_docker_image.sh

    5. Launch a docker container bash ./launch_docker.sh

    6. Build ros2 source codes bash colcon build && source install/setup.bash

    7. Launch simulator bash ros2 run isaac_ros2_scripts launcher

    8. To spawn robot (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 launch franka_moveit_config demo.launch.py You can control the robot from RViz.

    [!NOTE] For the first time, launching Isaac Sim takes a very long time. Isaac Sim must be fully launched to spawn the robot.

    "},{"location":"ja/%E3%83%87%E3%83%A2/demo_for_mobile_robot/","title":"\u79fb\u52d5\u30ed\u30dc\u30c3\u30c8\u5411\u3051\u30c7\u30e2","text":"
    1. Install Docker and pull Isaac Sim Docker Image.

    2. Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git

    3. Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive

    4. Build a docker image with shell script. bash cd docker ./build_docker_image.sh

    5. Launch a docker container bash ./launch_docker.sh

    6. Build ros2 source codes bash colcon build && source install/setup.bash

    7. Launch simulator bash ros2 run isaac_ros2_scripts launcher

    8. Spawn robot (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 launch isaac_diffbot_sim diffbot_spawn.launch.py

    9. Launch teleop_twist_keyboard (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 run teleop_twist_keyboard teleop_twist_keyboard

    [!NOTE] For the first time, launching Isaac Sim takes a very long time. Isaac Sim must be fully launched to spawn the robot.

    "}]} \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 2866d558fa044b9f89ce6351625a80a72c5f8d2c..226b03d43078d114ce4ab5df9d3ef6cfe77e7799 100644 GIT binary patch delta 13 Ucmb=gXP58h;CRQFG?Bdm0356YApigX delta 13 Ucmb=gXP58h;OJy$oycAR02ufKWdHyG
  • GPUGeForce RTX 2070GeForce RTX 3070
    VRAM