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":" -
Install Docker and pull Isaac Sim Docker Image.
-
Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git
-
Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive
-
Build a docker image with shell script. bash cd docker ./build_docker_image.sh
-
Launch a docker container bash ./launch_docker.sh
-
Build ros2 source codes bash colcon build && source install/setup.bash
-
Launch simulator bash ros2 run isaac_ros2_scripts launcher
-
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":" -
Install Docker and pull Isaac Sim Docker Image.
-
Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git
-
Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive
-
Build a docker image with shell script. bash cd docker ./build_docker_image.sh
-
Launch a docker container bash ./launch_docker.sh
-
Build ros2 source codes bash colcon build && source install/setup.bash
-
Launch simulator bash ros2 run isaac_ros2_scripts launcher
-
Spawn robot (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 launch isaac_diffbot_sim diffbot_spawn.launch.py
-
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
"},{"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":" -
Install Docker and pull Isaac Sim Docker Image.
-
Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git
-
Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive
-
Build a docker image with shell script. bash cd docker ./build_docker_image.sh
-
Launch a docker container bash ./launch_docker.sh
-
Build ros2 source codes bash colcon build && source install/setup.bash
-
Launch simulator bash ros2 run isaac_ros2_scripts launcher
-
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":" -
Install Docker and pull Isaac Sim Docker Image.
-
Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git
-
Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive
-
Build a docker image with shell script. bash cd docker ./build_docker_image.sh
-
Launch a docker container bash ./launch_docker.sh
-
Build ros2 source codes bash colcon build && source install/setup.bash
-
Launch simulator bash ros2 run isaac_ros2_scripts launcher
-
Spawn robot (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 launch isaac_diffbot_sim diffbot_spawn.launch.py
-
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":" -
Install Docker and pull Isaac Sim Docker Image.
-
Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git
-
Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive
-
Build a docker image with shell script. bash cd docker ./build_docker_image.sh
-
Launch a docker container bash ./launch_docker.sh
-
Build ros2 source codes bash colcon build && source install/setup.bash
-
Launch simulator bash ros2 run isaac_ros2_scripts launcher
-
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":" -
Install Docker and pull Isaac Sim Docker Image.
-
Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git
-
Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive
-
Build a docker image with shell script. bash cd docker ./build_docker_image.sh
-
Launch a docker container bash ./launch_docker.sh
-
Build ros2 source codes bash colcon build && source install/setup.bash
-
Launch simulator bash ros2 run isaac_ros2_scripts launcher
-
Spawn robot (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 launch isaac_diffbot_sim diffbot_spawn.launch.py
-
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.
- generation of the physical model of the robot
- generation of the robot's sensor model
- 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":""},{"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
"},{"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
- \u30ed\u30dc\u30c3\u30c8\u306e\u7269\u7406\u30e2\u30c7\u30eb\u306e\u751f\u6210
- \u30ed\u30dc\u30c3\u30c8\u306e\u30bb\u30f3\u30b5\u30e2\u30c7\u30eb\u306e\u751f\u6210
- \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":" -
Install Docker and pull Isaac Sim Docker Image.
-
Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git
-
Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive
-
Build a docker image with shell script. bash cd docker ./build_docker_image.sh
-
Launch a docker container bash ./launch_docker.sh
-
Build ros2 source codes bash colcon build && source install/setup.bash
-
Launch simulator bash ros2 run isaac_ros2_scripts launcher
-
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":" -
Install Docker and pull Isaac Sim Docker Image.
-
Clone the repo to your ros2 workspace bash git clone https://github.com/hijimasa/isaac-ros2-control-sample.git
-
Get git submodules bash cd isaac-ros2-control-sample git submodule update --init --recursive
-
Build a docker image with shell script. bash cd docker ./build_docker_image.sh
-
Launch a docker container bash ./launch_docker.sh
-
Build ros2 source codes bash colcon build && source install/setup.bash
-
Launch simulator bash ros2 run isaac_ros2_scripts launcher
-
Spawn robot (another terminal) bash docker exec -it isaac-sim /bin/bash ros2 launch isaac_diffbot_sim diffbot_spawn.launch.py
-
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 9268049..581eb2b 100644
Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ