Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 6 additions & 75 deletions launch/tutorial_7_launch.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Launch Franka FR3 with gripper in Gazebo for HPP tutorial 7 (pick and place).
"""Launch Franka fr3 in Gazebo with a joint_trajectory_controller for HPP tutorial 6.

Usage (inside the docker container):
ros2 launch /home/user/devel/install/share/hpp_tutorial/tutorial_7/launch_sim.py
ros2 launch hpp_tutorial tutorial_7/launch_sim.py
"""

import os
Expand Down Expand Up @@ -37,30 +37,13 @@ def get_robot_description_and_controllers(context: LaunchContext, robot_type):
franka_xacro,
mappings={
"robot_type": robot_type_str,
"hand": "true",
"hand": "false",
"ros2_control": "true",
"gazebo": "true",
"ee_id": "franka_hand",
},
).toxml()

detachable_joint_plugin = f"""
<gazebo>
<plugin filename="gz-sim-detachable-joint-system" name="gz::sim::systems::DetachableJoint">
<parent_link>{robot_type_str}_hand</parent_link>
<child_model>box</child_model>
<child_link>base_link</child_link>
<attach_topic>/box/attach</attach_topic>
<detach_topic>/box/detach</detach_topic>
<suppress_child_warning>true</suppress_child_warning>
</plugin>
</gazebo>
</robot>
"""
robot_description_xml = robot_description_xml.replace(
"</robot>", detachable_joint_plugin
)

# Replace the Franka default controllers YAML with our tutorial controllers
franka_controllers = os.path.join(
get_package_share_directory("franka_gazebo_bringup"),
Expand All @@ -78,6 +61,7 @@ def get_robot_description_and_controllers(context: LaunchContext, robot_type):
parameters=[{"robot_description": robot_description_xml}],
)

# Spawn controllers using ros2_control spawner
spawn_jsb = Node(
package="controller_manager",
executable="spawner",
Expand All @@ -92,21 +76,11 @@ def get_robot_description_and_controllers(context: LaunchContext, robot_type):
output="screen",
)

spawn_gripper = Node(
package="controller_manager",
executable="spawner",
arguments=["gripper_controller"],
output="screen",
)

return [robot_state_publisher, spawn_jsb, spawn_jtc, spawn_gripper]
return [robot_state_publisher, spawn_jsb, spawn_jtc]


def generate_launch_description():
robot_type = LaunchConfiguration("robot_type")
tutorial_share = get_package_share_directory("hpp_tutorial")
box_urdf = os.path.join(tutorial_share, "urdf", "box.urdf")
ground_urdf = os.path.join(tutorial_share, "urdf", "ground.urdf")

# Gazebo Sim
os.environ["GZ_SIM_RESOURCE_PATH"] = os.path.dirname(
Expand All @@ -130,51 +104,10 @@ def generate_launch_description():
output="screen",
)

spawn_box = Node(
package="ros_gz_sim",
executable="create",
arguments=[
"-name",
"box",
"-file",
box_urdf,
"-x",
"0.4",
"-y",
"-0.2",
"-z",
"0.0251",
],
output="screen",
)

spawn_ground = Node(
package="ros_gz_sim",
executable="create",
arguments=[
"-name",
"ground",
"-file",
ground_urdf,
"-x",
"0.0",
"-y",
"0.0",
"-z",
"0.0",
],
output="screen",
)

bridge = Node(
package="ros_gz_bridge",
executable="parameter_bridge",
arguments=[
"/clock@rosgraph_msgs/msg/Clock[gz.msgs.Clock",
"/box/attach@std_msgs/msg/Empty]gz.msgs.Empty",
"/box/detach@std_msgs/msg/Empty]gz.msgs.Empty",
"/world/empty/set_pose@ros_gz_interfaces/srv/SetEntityPose",
],
arguments=["/clock@rosgraph_msgs/msg/Clock[gz.msgs.Clock"],
output="screen",
)

Expand All @@ -186,8 +119,6 @@ def generate_launch_description():
function=get_robot_description_and_controllers, args=[robot_type]
),
spawn,
spawn_ground,
spawn_box,
bridge,
]
)
83 changes: 76 additions & 7 deletions launch/tutorial_6_launch.py → launch/tutorial_8_launch.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Launch Franka fr3 in Gazebo with a joint_trajectory_controller for HPP tutorial 6.
"""Launch Franka FR3 with gripper in Gazebo for HPP tutorial 8 (pick and place).

Usage (inside the docker container):
ros2 launch hpp_tutorial tutorial_6/launch_sim.py
ros2 launch /home/user/devel/install/share/hpp_tutorial/tutorial_8/launch_sim.py
"""

import os
Expand All @@ -23,7 +23,7 @@ def get_robot_description_and_controllers(context: LaunchContext, robot_type):
robot_type_str = context.perform_substitution(robot_type)

tutorial_dir = os.path.join(
get_package_share_directory("hpp_tutorial"), "tutorial_6"
get_package_share_directory("hpp_tutorial"), "tutorial_8"
)
controllers_yaml = os.path.join(tutorial_dir, "controllers.yaml")

Expand All @@ -37,13 +37,30 @@ def get_robot_description_and_controllers(context: LaunchContext, robot_type):
franka_xacro,
mappings={
"robot_type": robot_type_str,
"hand": "false",
"hand": "true",
"ros2_control": "true",
"gazebo": "true",
"ee_id": "franka_hand",
},
).toxml()

detachable_joint_plugin = f"""
<gazebo>
<plugin filename="gz-sim-detachable-joint-system" name="gz::sim::systems::DetachableJoint">
<parent_link>{robot_type_str}_hand</parent_link>
<child_model>box</child_model>
<child_link>base_link</child_link>
<attach_topic>/box/attach</attach_topic>
<detach_topic>/box/detach</detach_topic>
<suppress_child_warning>true</suppress_child_warning>
</plugin>
</gazebo>
</robot>
"""
robot_description_xml = robot_description_xml.replace(
"</robot>", detachable_joint_plugin
)

# Replace the Franka default controllers YAML with our tutorial controllers
franka_controllers = os.path.join(
get_package_share_directory("franka_gazebo_bringup"),
Expand All @@ -61,7 +78,6 @@ def get_robot_description_and_controllers(context: LaunchContext, robot_type):
parameters=[{"robot_description": robot_description_xml}],
)

# Spawn controllers using ros2_control spawner
spawn_jsb = Node(
package="controller_manager",
executable="spawner",
Expand All @@ -76,11 +92,21 @@ def get_robot_description_and_controllers(context: LaunchContext, robot_type):
output="screen",
)

return [robot_state_publisher, spawn_jsb, spawn_jtc]
spawn_gripper = Node(
package="controller_manager",
executable="spawner",
arguments=["gripper_controller"],
output="screen",
)

return [robot_state_publisher, spawn_jsb, spawn_jtc, spawn_gripper]


def generate_launch_description():
robot_type = LaunchConfiguration("robot_type")
tutorial_share = get_package_share_directory("hpp_tutorial")
box_urdf = os.path.join(tutorial_share, "urdf", "box.urdf")
ground_urdf = os.path.join(tutorial_share, "urdf", "ground.urdf")

# Gazebo Sim
os.environ["GZ_SIM_RESOURCE_PATH"] = os.path.dirname(
Expand All @@ -104,10 +130,51 @@ def generate_launch_description():
output="screen",
)

spawn_box = Node(
package="ros_gz_sim",
executable="create",
arguments=[
"-name",
"box",
"-file",
box_urdf,
"-x",
"0.4",
"-y",
"-0.2",
"-z",
"0.0251",
],
output="screen",
)

spawn_ground = Node(
package="ros_gz_sim",
executable="create",
arguments=[
"-name",
"ground",
"-file",
ground_urdf,
"-x",
"0.0",
"-y",
"0.0",
"-z",
"0.0",
],
output="screen",
)

bridge = Node(
package="ros_gz_bridge",
executable="parameter_bridge",
arguments=["/clock@rosgraph_msgs/msg/Clock[gz.msgs.Clock"],
arguments=[
"/clock@rosgraph_msgs/msg/Clock[gz.msgs.Clock",
"/box/attach@std_msgs/msg/Empty]gz.msgs.Empty",
"/box/detach@std_msgs/msg/Empty]gz.msgs.Empty",
"/world/empty/set_pose@ros_gz_interfaces/srv/SetEntityPose",
],
output="screen",
)

Expand All @@ -119,6 +186,8 @@ def generate_launch_description():
function=get_robot_description_and_controllers, args=[robot_type]
),
spawn,
spawn_ground,
spawn_box,
bridge,
]
)
2 changes: 1 addition & 1 deletion tutorial_1/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ hpp-exec_branch=${HPP_VERSION}
hpp-exec_repository=${HPP_REPO}
hpp-exec_extra_flags=${PYTHON_FLAGS}

hpp-rviz_branch=${HPP_VERSION}
hpp-rviz_branch=main
hpp-rviz_repository=${HPP_REPO}
hpp-rviz_extra_flags=${HPP_EXTRA_FLAGS}

Expand Down
4 changes: 2 additions & 2 deletions tutorial_7/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Launch the Gazebo simulation with
a `joint_trajectory_controller`:

```
ros2 launch hpp_tutorial tutorial_6_launch.py
ros2 launch hpp_tutorial tutorial_7_launch.py
```

Wait until you see `Configured and activated joint_trajectory_controller` in the
Expand All @@ -34,7 +34,7 @@ docker exec -it hpp bash
Source the environments and run the tutorial script:

```
cd ~/devel/src/hpp_tutorial/tutorial_6
cd ~/devel/src/hpp_tutorial/tutorial_7
python -i init.py
```

Expand Down
6 changes: 3 additions & 3 deletions tutorial_8/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Having completed [tutorial 7](../tutorial_7/README.md).

## Overview

Tutorial 6 executed one arm trajectory with `send_trajectory`. This tutorial
Tutorial 7 executed one arm trajectory with `send_trajectory`. This tutorial
adds the gripper: the robot must open the fingers before approaching the box,
close them before transport, then open them again at the goal.

Expand Down Expand Up @@ -46,7 +46,7 @@ docker exec -it hpp bash
Run the tutorial script:

```
cd ~/devel/src/hpp_tutorial/tutorial_7
cd ~/devel/src/hpp_tutorial/tutorial_8
python -i init.py
```

Expand Down Expand Up @@ -115,7 +115,7 @@ def release_box():

`open_gripper` and `close_gripper` send a reference value for
`fr3_finger_joint1` to open or close the gripper. They use `send_trajectory`,
as in `tutorial_6`. On the real robot, this would be performed by a ROS action
as in `tutorial_7`. On the real robot, this would be performed by a ROS action
instead.

`grasp_box` and `release_box` call `attach_box` and `detach_box` respectively.
Expand Down