From e8a8a045cafabcdf172a5986ff3c3c6922e790a2 Mon Sep 17 00:00:00 2001 From: Masaaki Hijikata Date: Sat, 2 Mar 2024 21:47:48 +0900 Subject: [PATCH] add how_to_spawn_robot --- 404.html | 42 + Demos/demo_for_arm_robot/index.html | 42 + Demos/demo_for_mobile_robot/index.html | 44 +- LICENSE/index.html | 42 + Tutorials/how_to_spawn_robot/index.html | 1136 ++++++++++++++++ .../how_to_use_simulator_launcher/index.html | 44 +- .../setup_urdf_for_ros2_control/index.html | 42 + Tutorials/setup_urdf_for_sensors/index.html | 42 + Tutorials/tutorial/index.html | 50 +- docs/Tutorials/how_to_spawn_robot.md | 102 ++ docs/Tutorials/tutorial.md | 6 +- .../how_to_spawn_robot.md" | 102 ++ .../tutorial.md" | 6 +- index.html | 42 + ja/LICENSE/index.html | 44 +- ja/index.html | 42 + .../how_to_spawn_robot/index.html" | 1138 +++++++++++++++++ .../how_to_use_simulator_launcher/index.html" | 44 +- .../setup_urdf_for_ros2_control/index.html" | 42 + .../setup_urdf_for_sensors/index.html" | 42 + .../tutorial/index.html" | 50 +- .../demo_for_arm_robot/index.html" | 42 + .../demo_for_mobile_robot/index.html" | 42 + search/search_index.json | 2 +- sitemap.xml.gz | Bin 127 -> 127 bytes 25 files changed, 3201 insertions(+), 29 deletions(-) create mode 100644 Tutorials/how_to_spawn_robot/index.html create mode 100644 docs/Tutorials/how_to_spawn_robot.md create mode 100644 "docs/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.md" create mode 100644 "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" diff --git a/404.html b/404.html index 6e6e260..1d4e73d 100644 --- a/404.html +++ b/404.html @@ -412,6 +412,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -615,6 +636,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • diff --git a/Demos/demo_for_arm_robot/index.html b/Demos/demo_for_arm_robot/index.html index a1d3677..7a4d188 100644 --- a/Demos/demo_for_arm_robot/index.html +++ b/Demos/demo_for_arm_robot/index.html @@ -433,6 +433,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -636,6 +657,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • diff --git a/Demos/demo_for_mobile_robot/index.html b/Demos/demo_for_mobile_robot/index.html index 0afc1ee..adb55eb 100644 --- a/Demos/demo_for_mobile_robot/index.html +++ b/Demos/demo_for_mobile_robot/index.html @@ -12,7 +12,7 @@ - + @@ -433,6 +433,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -636,6 +657,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • diff --git a/LICENSE/index.html b/LICENSE/index.html index 3c4a4a8..844834d 100644 --- a/LICENSE/index.html +++ b/LICENSE/index.html @@ -431,6 +431,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -634,6 +655,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • diff --git a/Tutorials/how_to_spawn_robot/index.html b/Tutorials/how_to_spawn_robot/index.html new file mode 100644 index 0000000..f85ce31 --- /dev/null +++ b/Tutorials/how_to_spawn_robot/index.html @@ -0,0 +1,1136 @@ + + + + + + + + + + + + + + + + + + + + + + + How to Spawn Robot - ROS 2 utilities for Isaac Sim + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + Skip to content + + +
    +
    + +
    + + + + + + +
    + + +
    + +
    + + + + + + +
    +
    + + + +
    +
    +
    + + + + + +
    +
    +
    + + + + + + + +
    +
    + + + + +

    How to Spawn Robot

    +

    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. +
    3. generation of the robot's sensor model
    4. +
    5. generation of the robot controller
    6. +
    +

    The three steps are described in detail below.

    +

    Generate the physical model of the robot

    +

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

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

    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.

    +

    Generate sensor model of the robot

    +

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

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

    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.

    +

    Generate robot controllers

    +

    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(
    +        package="isaac_ros2_scripts",
    +        executable="prepare_robot_controller",
    +        parameters=[{'urdf_path': str(urdf_path)}],
    +    )
    +
    +

    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.

    +

    How to start up a node

    +

    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([
    +        RegisterEventHandler(
    +            event_handler=OnProcessExit(
    +                target_action=isaac_spawn_robot,
    +                on_exit=[isaac_prepare_sensors],
    +            )
    +        ),
    +        RegisterEventHandler(
    +            event_handler=OnProcessExit(
    +                target_action=isaac_prepare_sensors,
    +                on_exit=[isaac_prepare_robot_controller],
    +            )
    +        ),
    +        isaac_spawn_robot,
    +    ])
    +
    + + + + + + + + + + + + + +
    +
    + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + \ No newline at end of file diff --git a/Tutorials/how_to_use_simulator_launcher/index.html b/Tutorials/how_to_use_simulator_launcher/index.html index d6a117b..a3febc8 100644 --- a/Tutorials/how_to_use_simulator_launcher/index.html +++ b/Tutorials/how_to_use_simulator_launcher/index.html @@ -9,7 +9,7 @@ - + @@ -421,6 +421,27 @@ + + +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + @@ -684,6 +705,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • diff --git a/Tutorials/setup_urdf_for_ros2_control/index.html b/Tutorials/setup_urdf_for_ros2_control/index.html index e47595d..8f38c98 100644 --- a/Tutorials/setup_urdf_for_ros2_control/index.html +++ b/Tutorials/setup_urdf_for_ros2_control/index.html @@ -423,6 +423,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -684,6 +705,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • diff --git a/Tutorials/setup_urdf_for_sensors/index.html b/Tutorials/setup_urdf_for_sensors/index.html index 89402aa..43e9f2c 100644 --- a/Tutorials/setup_urdf_for_sensors/index.html +++ b/Tutorials/setup_urdf_for_sensors/index.html @@ -423,6 +423,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -693,6 +714,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • diff --git a/Tutorials/tutorial/index.html b/Tutorials/tutorial/index.html index cb5f05f..bb1a7f1 100644 --- a/Tutorials/tutorial/index.html +++ b/Tutorials/tutorial/index.html @@ -423,6 +423,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -636,6 +657,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • @@ -859,13 +901,7 @@

    Tutorials

    How to Use Simulator Launcher

  • -

    How to Spawn Robot

    -
  • -
  • -

    How to Launch ros2_control

    -
  • -
  • -

    How to Launch Sensors

    +

    How to Spawn Robot

  • diff --git a/docs/Tutorials/how_to_spawn_robot.md b/docs/Tutorials/how_to_spawn_robot.md new file mode 100644 index 0000000..79a3ff2 --- /dev/null +++ b/docs/Tutorials/how_to_spawn_robot.md @@ -0,0 +1,102 @@ +# How to Spawn Robot + +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. + +## Generate the physical model of the robot + +The following is an example of creating a node to generate a physical model of a robot. + +```python + isaac_diffbot_description_path = os.path.join( + get_package_share_directory('diffbot_description')) + + xacro_file = os.path.join(isaac_diffbot_description_path, + 'robots', + 'diffbot.urdf.xacro') + urdf_path = os.path.join(isaac_diffbot_description_path, 'robots', 'diffbot.urdf') + + doc = xacro.process_file(xacro_file, mappings={'use_sim' : 'true'}) + + robot_desc = doc.toprettyxml(indent=' ') + f = open(urdf_path, 'w') + f.write(robot_desc) + f.close() + + isaac_spawn_robot = Node( + package="isaac_ros2_scripts", + executable="spawn_robot", + parameters=[{'urdf_path': str(urdf_path), + 'x' : 0.0, + 'y' : 0.0, + 'z' : 0.0, + 'R' : 0.0, + 'P' : 0.0, + 'Y' : 1.57, + 'fixed' : False, + }], + ) +``` + +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. + +## Generate sensor model of the robot + +The following is an example of creating a node to generate a sensor model of a robot. + +```python + isaac_prepare_sensors = Node( + package="isaac_ros2_scripts", + executable="prepare_sensors", + parameters=[{'urdf_path': str(urdf_path)}], + ) +``` + +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. + + +## Generate robot controllers + +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. + +```python + isaac_prepare_robot_controller = Node( + package="isaac_ros2_scripts", + executable="prepare_robot_controller", + parameters=[{'urdf_path': str(urdf_path)}], + ) +``` + +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. + +## How to start up a node + +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. + +```python + return LaunchDescription([ + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=isaac_spawn_robot, + on_exit=[isaac_prepare_sensors], + ) + ), + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=isaac_prepare_sensors, + on_exit=[isaac_prepare_robot_controller], + ) + ), + isaac_spawn_robot, + ]) +``` diff --git a/docs/Tutorials/tutorial.md b/docs/Tutorials/tutorial.md index 18d7325..d931d13 100644 --- a/docs/Tutorials/tutorial.md +++ b/docs/Tutorials/tutorial.md @@ -6,8 +6,4 @@ - [How to Use Simulator Launcher](./how_to_use_simulator_launcher.md) -- How to Spawn Robot - -- How to Launch ros2_control - -- How to Launch Sensors \ No newline at end of file +- [How to Spawn Robot](./how_to_spawn_robot.md) 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/how_to_spawn_robot.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/how_to_spawn_robot.md" new file mode 100644 index 0000000..38e6265 --- /dev/null +++ "b/docs/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.md" @@ -0,0 +1,102 @@ +# ロボットの生成方法 + +このドキュメントでは、シミュレータ上にロボットを生成する手順について説明します。 +ロボットモデルの生成は、大きく分けて以下の3つの手順に分けられます。 + +1. ロボットの物理モデルの生成 +2. ロボットのセンサモデルの生成 +3. ロボットコントローラの生成 + +以下では3つの手順の詳細を説明します。 + +## ロボットの物理モデルの生成 + +ロボットの物理モデルを生成するノードを作成する例を以下に示します。 + +```python + isaac_diffbot_description_path = os.path.join( + get_package_share_directory('diffbot_description')) + + xacro_file = os.path.join(isaac_diffbot_description_path, + 'robots', + 'diffbot.urdf.xacro') + urdf_path = os.path.join(isaac_diffbot_description_path, 'robots', 'diffbot.urdf') + # xacroをロード + doc = xacro.process_file(xacro_file, mappings={'use_sim' : 'true'}) + # xacroを展開してURDFを生成 + robot_desc = doc.toprettyxml(indent=' ') + f = open(urdf_path, 'w') + f.write(robot_desc) + f.close() + + isaac_spawn_robot = Node( + package="isaac_ros2_scripts", + executable="spawn_robot", + parameters=[{'urdf_path': str(urdf_path), + 'x' : 0.0, + 'y' : 0.0, + 'z' : 0.0, + 'R' : 0.0, + 'P' : 0.0, + 'Y' : 1.57, + 'fixed' : False, + }], + ) +``` + +上記の例にあるように、物理モデルの生成には、isaac_ros2_scriptsパッケージのspawn_robotを使用します。 +spawn_robotは引数として、生成するロボットのURDFファイル、位置(X,Y,Z)と姿勢(Roll,Pitch,Yaw)とロボットが固定されているかどうかを与える必要があります。 +ロボットが固定されているかどうかの引数は、アームロボットが環境に固定されている場合に使用されます。 + +## ロボットのセンサモデルの生成 + +ロボットのセンサモデルを生成するノードを作成する例を以下に示します。 + +```python + isaac_prepare_sensors = Node( + package="isaac_ros2_scripts", + executable="prepare_sensors", + parameters=[{'urdf_path': str(urdf_path)}], + ) +``` + +ロボットのセンサモデルの生成には、URDFファイル内のisaacタグ内の情報が必要なので、prepare_sensorsは引数として生成するロボットのURDFファイルが必要です。 + + +## ロボットコントローラの生成 + +ロボットのコントローラを生成するノードを作成する例を以下に示します。 +ここでいうコントローラは、ros2_controllerではなく共有メモリの値をもとにシミュレータ上のロボットを駆動させる内部コントローラを指します。 + +```python + isaac_prepare_robot_controller = Node( + package="isaac_ros2_scripts", + executable="prepare_robot_controller", + parameters=[{'urdf_path': str(urdf_path)}], + ) +``` + +ロボットのコントローラの生成には、URDFファイル内のros2_controlタグ内の情報が必要なので、prepare_robot_controllerには引数として生成するロボットのURDFファイルが必要です。 + +## ノードの立ち上げ方について + +一度起動しているIsaac Simに追加でロボットモデルを生成する方法として、このリポジトリではIsaac SimのPython REPLエクステンションを利用しています。 +このエクステンションは同時に複数の処理を与えることが出来ないので、ノードを起動する際にはRegisterEventHandlerを使用して順番にノードを処理するようにしてください。 + +```python + return LaunchDescription([ + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=isaac_spawn_robot, + on_exit=[isaac_prepare_sensors], + ) + ), + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=isaac_prepare_sensors, + on_exit=[isaac_prepare_robot_controller], + ) + ), + isaac_spawn_robot, + ]) +``` 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/tutorial.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/tutorial.md" index 92b92b1..fc97e23 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/tutorial.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/tutorial.md" @@ -6,8 +6,4 @@ - [シミュレーションランチャーの使い方](./how_to_use_simulator_launcher.md) -- ロボットの生成方法 - -- ros2_controlの立ち上げ方 - -- センサの立ち上げ方 \ No newline at end of file +- [ロボットの生成方法](./how_to_spawn_robot.md) diff --git a/index.html b/index.html index f716dc0..bb85ded 100644 --- a/index.html +++ b/index.html @@ -504,6 +504,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -707,6 +728,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • diff --git a/ja/LICENSE/index.html b/ja/LICENSE/index.html index b29b42d..c4f1546 100644 --- a/ja/LICENSE/index.html +++ b/ja/LICENSE/index.html @@ -12,7 +12,7 @@ - + @@ -421,6 +421,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -636,6 +657,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • diff --git a/ja/index.html b/ja/index.html index 35745ea..54b5c6a 100644 --- a/ja/index.html +++ b/ja/index.html @@ -421,6 +421,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -711,6 +732,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • 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" new file mode 100644 index 0000000..54cccfc --- /dev/null +++ "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" @@ -0,0 +1,1138 @@ + + + + + + + + + + + + + + + + + + + + + + + ロボットの生成方法 - ROS 2 utilities for Isaac Sim + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + Skip to content + + +
    +
    + +
    + + + + + + +
    + + +
    + +
    + + + + + + +
    +
    + + + +
    +
    +
    + + + + + +
    +
    +
    + + + + + + + +
    +
    + + + + +

    ロボットの生成方法

    +

    このドキュメントでは、シミュレータ上にロボットを生成する手順について説明します。 +ロボットモデルの生成は、大きく分けて以下の3つの手順に分けられます。

    +
      +
    1. ロボットの物理モデルの生成
    2. +
    3. ロボットのセンサモデルの生成
    4. +
    5. ロボットコントローラの生成
    6. +
    +

    以下では3つの手順の詳細を説明します。

    +

    ロボットの物理モデルの生成

    +

    ロボットの物理モデルを生成するノードを作成する例を以下に示します。

    +
        isaac_diffbot_description_path = os.path.join(
    +        get_package_share_directory('diffbot_description'))
    +
    +    xacro_file = os.path.join(isaac_diffbot_description_path,
    +                              'robots',
    +                              'diffbot.urdf.xacro')
    +    urdf_path = os.path.join(isaac_diffbot_description_path, 'robots', 'diffbot.urdf')
    +    # xacroをロード
    +    doc = xacro.process_file(xacro_file, mappings={'use_sim' : 'true'})
    +    # xacroを展開してURDFを生成
    +    robot_desc = doc.toprettyxml(indent='  ')
    +    f = open(urdf_path, 'w')
    +    f.write(robot_desc)
    +    f.close()
    +
    +    isaac_spawn_robot = Node(
    +        package="isaac_ros2_scripts",
    +        executable="spawn_robot",
    +        parameters=[{'urdf_path': str(urdf_path),
    +                    'x' : 0.0,
    +                    'y' : 0.0,
    +                    'z' : 0.0,
    +                    'R' : 0.0,
    +                    'P' : 0.0,
    +                    'Y' : 1.57,
    +                    'fixed' : False,
    +                    }],
    +    )
    +
    +

    上記の例にあるように、物理モデルの生成には、isaac_ros2_scriptsパッケージのspawn_robotを使用します。 +spawn_robotは引数として、生成するロボットのURDFファイル、位置(X,Y,Z)と姿勢(Roll,Pitch,Yaw)とロボットが固定されているかどうかを与える必要があります。 +ロボットが固定されているかどうかの引数は、アームロボットが環境に固定されている場合に使用されます。

    +

    ロボットのセンサモデルの生成

    +

    ロボットのセンサモデルを生成するノードを作成する例を以下に示します。

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

    ロボットのセンサモデルの生成には、URDFファイル内のisaacタグ内の情報が必要なので、prepare_sensorsは引数として生成するロボットのURDFファイルが必要です。

    +

    ロボットコントローラの生成

    +

    ロボットのコントローラを生成するノードを作成する例を以下に示します。 +ここでいうコントローラは、ros2_controllerではなく共有メモリの値をもとにシミュレータ上のロボットを駆動させる内部コントローラを指します。

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

    ロボットのコントローラの生成には、URDFファイル内のros2_controlタグ内の情報が必要なので、prepare_robot_controllerには引数として生成するロボットのURDFファイルが必要です。

    +

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

    +

    一度起動しているIsaac Simに追加でロボットモデルを生成する方法として、このリポジトリではIsaac SimのPython REPLエクステンションを利用しています。 +このエクステンションは同時に複数の処理を与えることが出来ないので、ノードを起動する際にはRegisterEventHandlerを使用して順番にノードを処理するようにしてください。

    +
        return LaunchDescription([
    +        RegisterEventHandler(
    +            event_handler=OnProcessExit(
    +                target_action=isaac_spawn_robot,
    +                on_exit=[isaac_prepare_sensors],
    +            )
    +        ),
    +        RegisterEventHandler(
    +            event_handler=OnProcessExit(
    +                target_action=isaac_prepare_sensors,
    +                on_exit=[isaac_prepare_robot_controller],
    +            )
    +        ),
    +        isaac_spawn_robot,
    +    ])
    +
    + + + + + + + + + + + + + +
    +
    + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + \ No newline at end of file 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 9619094..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" @@ -9,7 +9,7 @@ - + @@ -421,6 +421,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -626,6 +647,27 @@ + + +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + 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 c7cac5c..25c5d99 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" @@ -421,6 +421,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -628,6 +649,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • 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 cd74a91..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" @@ -421,6 +421,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -628,6 +649,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • 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 9d08196..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" @@ -421,6 +421,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -628,6 +649,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • @@ -861,13 +903,7 @@

    チュートリアル

    シミュレーションランチャーの使い方

  • -

    ロボットの生成方法

    -
  • -
  • -

    ros2_controlの立ち上げ方

    -
  • -
  • -

    センサの立ち上げ方

    +

    ロボットの生成方法

  • 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 8869b2b..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" @@ -421,6 +421,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -626,6 +647,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • 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 f5c603b..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" @@ -419,6 +419,27 @@ +
  • + + + + + How to Spawn Robot + + + + +
  • + + + + + + + + + +
  • @@ -624,6 +645,27 @@ +
  • + + + + + ロボットの生成方法 + + + + +
  • + + + + + + + + + +
  • diff --git a/search/search_index.json b/search/search_index.json index 47bdeb9..19d661b 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":"
    • This spawns URDF model at the desired timing and position.
    • This provide ros2_control plugin to use ros2_controller, for example diff_drive_controller.
    • This supports rotational and prismatic joints using position and velocity control.
    • 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.
    "},{"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_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.

    <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

    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.

    <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
    "},{"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.

    <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

    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_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":"
    • Set up URDF for ros2_control

    • Set up URDF for Sensors

    • How to Use Simulator Launcher

    • How to Spawn Robot

    • How to Launch ros2_control

    • How to Launch Sensors

    "},{"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":"
    • URDF\u30e2\u30c7\u30eb\u3092\u4efb\u610f\u306e\u30bf\u30a4\u30df\u30f3\u30b0\u3068\u4f4d\u7f6e\u59ff\u52e2\u3067\u751f\u6210\u3067\u304d\u307e\u3059\u3002
    • ros2_controller\uff08\u4f8b\uff1adiff_drive_controller\uff09\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306eros2_control\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002
    • \u4f4d\u7f6e\u5236\u5fa1\u3068\u901f\u5ea6\u5236\u5fa1\u3092\u4f7f\u3063\u305f\u56de\u8ee2\u95a2\u7bc0\u3068\u89d2\u67f1\u95a2\u7bc0\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002
    • Isaac Sim\u304b\u3089ros2_control\u306b\u95a2\u7bc0\u306e\u72b6\u614b(\u4f4d\u7f6e\u3001\u901f\u5ea6\u3001\u529b)\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002
    • URDF\u306e\u8a18\u8ff0\u304b\u3089\u30bb\u30f3\u30b5\u3092\u8d77\u52d5\u3057\u307e\u3059\u3002
    • \u30bb\u30f3\u30b5\u3068\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3092\u4efb\u610f\u306e\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u8d77\u52d5\u3067\u304d\u307e\u3059\u3002
    "},{"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

    • \u79fb\u52d5\u30ed\u30dc\u30c3\u30c8\u5411\u3051

    • \u30a2\u30fc\u30e0\u30ed\u30dc\u30c3\u30c8\u5411\u3051

    "},{"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_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

    <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

    \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

    <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
    "},{"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

    <joint name=\"${prefix}left_wheel_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

    \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_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":"
    • URDF\u3078\u306eros2_cotnrol\u30bf\u30b0\u306e\u8a18\u8ff0\u65b9\u6cd5

    • URDF\u3078\u306e\u30bb\u30f3\u30b5\u60c5\u5831\u306e\u8a18\u8ff0\u65b9\u6cd5

    • \u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u30e9\u30f3\u30c1\u30e3\u30fc\u306e\u4f7f\u3044\u65b9

    • \u30ed\u30dc\u30c3\u30c8\u306e\u751f\u6210\u65b9\u6cd5

    • ros2_control\u306e\u7acb\u3061\u4e0a\u3052\u65b9

    • \u30bb\u30f3\u30b5\u306e\u7acb\u3061\u4e0a\u3052\u65b9

    "},{"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":"
    • This spawns URDF model at the desired timing and position.
    • This provide ros2_control plugin to use ros2_controller, for example diff_drive_controller.
    • This supports rotational and prismatic joints using position and velocity control.
    • 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.
    "},{"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.

    <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

    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.

    <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
    "},{"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.

    <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

    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_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":"
    • Set up URDF for ros2_control

    • Set up URDF for Sensors

    • How to Use Simulator Launcher

    • How to Spawn Robot

    "},{"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":"
    • URDF\u30e2\u30c7\u30eb\u3092\u4efb\u610f\u306e\u30bf\u30a4\u30df\u30f3\u30b0\u3068\u4f4d\u7f6e\u59ff\u52e2\u3067\u751f\u6210\u3067\u304d\u307e\u3059\u3002
    • ros2_controller\uff08\u4f8b\uff1adiff_drive_controller\uff09\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306eros2_control\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002
    • \u4f4d\u7f6e\u5236\u5fa1\u3068\u901f\u5ea6\u5236\u5fa1\u3092\u4f7f\u3063\u305f\u56de\u8ee2\u95a2\u7bc0\u3068\u89d2\u67f1\u95a2\u7bc0\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002
    • Isaac Sim\u304b\u3089ros2_control\u306b\u95a2\u7bc0\u306e\u72b6\u614b(\u4f4d\u7f6e\u3001\u901f\u5ea6\u3001\u529b)\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002
    • URDF\u306e\u8a18\u8ff0\u304b\u3089\u30bb\u30f3\u30b5\u3092\u8d77\u52d5\u3057\u307e\u3059\u3002
    • \u30bb\u30f3\u30b5\u3068\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3092\u4efb\u610f\u306e\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u8d77\u52d5\u3067\u304d\u307e\u3059\u3002
    "},{"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

    • \u79fb\u52d5\u30ed\u30dc\u30c3\u30c8\u5411\u3051

    • \u30a2\u30fc\u30e0\u30ed\u30dc\u30c3\u30c8\u5411\u3051

    "},{"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

    <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

    \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

    <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
    "},{"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

    <joint name=\"${prefix}left_wheel_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

    \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_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":"
    • URDF\u3078\u306eros2_cotnrol\u30bf\u30b0\u306e\u8a18\u8ff0\u65b9\u6cd5

    • URDF\u3078\u306e\u30bb\u30f3\u30b5\u60c5\u5831\u306e\u8a18\u8ff0\u65b9\u6cd5

    • \u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u30e9\u30f3\u30c1\u30e3\u30fc\u306e\u4f7f\u3044\u65b9

    • \u30ed\u30dc\u30c3\u30c8\u306e\u751f\u6210\u65b9\u6cd5

    "},{"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 9268049c189f014c72c065ece3e803079e894ad4..581eb2b415c83ab6cab0457a63ecfd0590a86f1f 100644 GIT binary patch delta 12 Tcmb=gXOr*d;J7J2k*yK{7