From d3e00a5347817b602c091199687f5a8a1d700df8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20Fr=C3=B6hlich?= Date: Tue, 23 Apr 2024 22:55:34 +0200 Subject: [PATCH] Rewrite mimic joints (#276) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Alejandro Hernández Cordero --- doc/img/gz_gripper.gif | Bin 0 -> 89139 bytes doc/index.rst | 39 ++-- gz_ros2_control/src/gz_system.cpp | 170 ++++-------------- .../config/gripper_controller_effort.yaml | 15 ++ ....yaml => gripper_controller_position.yaml} | 0 ...pper_mimic_joint_example_effort.launch.py} | 2 +- ...per_mimic_joint_example_effort.launch.xml} | 2 +- ...per_mimic_joint_example_position.launch.py | 100 +++++++++++ ...er_mimic_joint_example_position.launch.xml | 63 +++++++ ...test_gripper_mimic_joint_effort.xacro.urdf | 102 +++++++++++ ...t_gripper_mimic_joint_position.xacro.urdf} | 5 +- 11 files changed, 343 insertions(+), 155 deletions(-) create mode 100644 doc/img/gz_gripper.gif create mode 100644 gz_ros2_control_demos/config/gripper_controller_effort.yaml rename gz_ros2_control_demos/config/{gripper_controller.yaml => gripper_controller_position.yaml} (100%) rename gz_ros2_control_demos/launch/{gripper_mimic_joint_example.launch.py => gripper_mimic_joint_example_effort.launch.py} (98%) rename gz_ros2_control_demos/launch/{gripper_mimic_joint_example.launch.xml => gripper_mimic_joint_example_effort.launch.xml} (98%) create mode 100644 gz_ros2_control_demos/launch/gripper_mimic_joint_example_position.launch.py create mode 100644 gz_ros2_control_demos/launch/gripper_mimic_joint_example_position.launch.xml create mode 100644 gz_ros2_control_demos/urdf/test_gripper_mimic_joint_effort.xacro.urdf rename gz_ros2_control_demos/urdf/{test_gripper_mimic_joint.xacro.urdf => test_gripper_mimic_joint_position.xacro.urdf} (94%) diff --git a/doc/img/gz_gripper.gif b/doc/img/gz_gripper.gif new file mode 100644 index 0000000000000000000000000000000000000000..da48c9fce69ccc9c571fe1454e922ff70152157b GIT binary patch literal 89139 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 tag to the mimicked joint `detailed manual `__ -* ``mimic`` and ``multiplier`` parameters to joint definition in ```` tag +To use ``mimic`` joints in *gz_ros2_control* you should define its parameters in your URDF, i.e, set the ```` tag to the mimicked joint (see the `URDF specification `__) .. code-block:: xml + + + + + + + - + @@ -119,16 +122,7 @@ We should include: -.. code-block:: xml - - - right_finger_joint - 1 - - - - - +The mimic joint must not have command interfaces configured in the ```` tag, but state interfaces can be configured. Add the gz_ros2_control plugin @@ -244,8 +238,19 @@ The following example shows parallel gripper with mimic joint: .. code-block:: shell - ros2 launch gz_ros2_control_demos gripper_mimic_joint_example.launch.py + ros2 launch gz_ros2_control_demos gripper_mimic_joint_example_position.launch.py + +.. image:: img/gz_gripper.gif + :alt: Gripper + +To demonstrate the setup of the initial position and a position-mimicked joint in +case of an effort command interface of the joint to be mimicked, run + +.. code-block:: shell + + ros2 launch gz_ros2_control_demos gripper_mimic_joint_example_effort.launch.py +instead. Send example commands: diff --git a/gz_ros2_control/src/gz_system.cpp b/gz_ros2_control/src/gz_system.cpp index 519dfefa..ac5cc8d1 100644 --- a/gz_ros2_control/src/gz_system.cpp +++ b/gz_ros2_control/src/gz_system.cpp @@ -100,14 +100,6 @@ struct jointData gz_ros2_control::GazeboSimSystemInterface::ControlMethod joint_control_method; }; -struct MimicJoint -{ - std::size_t joint_index; - std::size_t mimicked_joint_index; - double multiplier = 1.0; - std::vector interfaces_to_mimic; -}; - class ImuData { public: @@ -175,9 +167,6 @@ class gz_ros2_control::GazeboSimSystemPrivate /// \brief Gazebo communication node. GZ_TRANSPORT_NAMESPACE Node node; - /// \brief mapping of mimicked joints to index of joint they mimic - std::vector mimic_joints_; - /// \brief Gain which converts position error to a velocity command double position_proportional_gain_; @@ -287,58 +276,20 @@ bool GazeboSimSystem::initSim( // Accept this joint and continue configuration RCLCPP_INFO_STREAM(this->nh_->get_logger(), "Loading joint: " << joint_name); - std::string suffix = ""; - // check if joint is mimicked - if (joint_info.parameters.find("mimic") != joint_info.parameters.end()) { - const auto mimicked_joint = joint_info.parameters.at("mimic"); - const auto mimicked_joint_it = std::find_if( - hardware_info.joints.begin(), hardware_info.joints.end(), - [&mimicked_joint](const hardware_interface::ComponentInfo & info) { - return info.name == mimicked_joint; - }); - if (mimicked_joint_it == hardware_info.joints.end()) { - throw std::runtime_error( - std::string("Mimicked joint '") + mimicked_joint + "' not found"); - } - - MimicJoint mimic_joint; - mimic_joint.joint_index = j; - mimic_joint.mimicked_joint_index = std::distance( - hardware_info.joints.begin(), mimicked_joint_it); - auto param_it = joint_info.parameters.find("multiplier"); - if (param_it != joint_info.parameters.end()) { - mimic_joint.multiplier = hardware_interface::stod(joint_info.parameters.at("multiplier")); - } else { - mimic_joint.multiplier = 1.0; - } - - // check joint info of mimicked joint - auto & joint_info_mimicked = hardware_info.joints[mimic_joint.mimicked_joint_index]; - const auto state_mimicked_interface = std::find_if( - joint_info_mimicked.state_interfaces.begin(), joint_info_mimicked.state_interfaces.end(), - [&mimic_joint](const hardware_interface::InterfaceInfo & interface_info) { - bool pos = interface_info.name == "position"; - if (pos) {mimic_joint.interfaces_to_mimic.push_back(hardware_interface::HW_IF_POSITION);} - bool vel = interface_info.name == "velocity"; - if (vel) {mimic_joint.interfaces_to_mimic.push_back(hardware_interface::HW_IF_VELOCITY);} - bool eff = interface_info.name == "effort"; - if (vel) {mimic_joint.interfaces_to_mimic.push_back(hardware_interface::HW_IF_EFFORT);} - return pos || vel || eff; - }); - if (state_mimicked_interface == joint_info_mimicked.state_interfaces.end()) { - throw std::runtime_error( - std::string( - "For mimic joint '") + joint_info.name + - "' no state interface was found in mimicked joint '" + mimicked_joint + - " ' to mimic"); - } + auto it = std::find_if( + hardware_info.mimic_joints.begin(), + hardware_info.mimic_joints.end(), + [j](const hardware_interface::MimicJoint & mj) { + return mj.joint_index == j; + }); + + if (it != hardware_info.mimic_joints.end()) { RCLCPP_INFO_STREAM( this->nh_->get_logger(), - "Joint '" << joint_name << "'is mimicking joint '" << mimicked_joint << "' with mutiplier: " - << mimic_joint.multiplier); - this->dataPtr->mimic_joints_.push_back(mimic_joint); - suffix = "_mimic"; + "Joint '" << joint_name << "'is mimicking joint '" << + this->dataPtr->joints_[it->mimicked_joint_index].name << + "' with multiplier: " << it->multiplier << " and offset: " << it->offset); } RCLCPP_INFO_STREAM(this->nh_->get_logger(), "\tState:"); @@ -373,7 +324,7 @@ bool GazeboSimSystem::initSim( if (joint_info.state_interfaces[i].name == "position") { RCLCPP_INFO_STREAM(this->nh_->get_logger(), "\t\t position"); this->dataPtr->state_interfaces_.emplace_back( - joint_name + suffix, + joint_name, hardware_interface::HW_IF_POSITION, &this->dataPtr->joints_[j].joint_position); initial_position = get_initial_value(joint_info.state_interfaces[i]); @@ -382,7 +333,7 @@ bool GazeboSimSystem::initSim( if (joint_info.state_interfaces[i].name == "velocity") { RCLCPP_INFO_STREAM(this->nh_->get_logger(), "\t\t velocity"); this->dataPtr->state_interfaces_.emplace_back( - joint_name + suffix, + joint_name, hardware_interface::HW_IF_VELOCITY, &this->dataPtr->joints_[j].joint_velocity); initial_velocity = get_initial_value(joint_info.state_interfaces[i]); @@ -391,7 +342,7 @@ bool GazeboSimSystem::initSim( if (joint_info.state_interfaces[i].name == "effort") { RCLCPP_INFO_STREAM(this->nh_->get_logger(), "\t\t effort"); this->dataPtr->state_interfaces_.emplace_back( - joint_name + suffix, + joint_name, hardware_interface::HW_IF_EFFORT, &this->dataPtr->joints_[j].joint_effort); initial_effort = get_initial_value(joint_info.state_interfaces[i]); @@ -406,7 +357,7 @@ bool GazeboSimSystem::initSim( if (joint_info.command_interfaces[i].name == "position") { RCLCPP_INFO_STREAM(this->nh_->get_logger(), "\t\t position"); this->dataPtr->command_interfaces_.emplace_back( - joint_name + suffix, + joint_name, hardware_interface::HW_IF_POSITION, &this->dataPtr->joints_[j].joint_position_cmd); if (!std::isnan(initial_position)) { @@ -415,7 +366,7 @@ bool GazeboSimSystem::initSim( } else if (joint_info.command_interfaces[i].name == "velocity") { RCLCPP_INFO_STREAM(this->nh_->get_logger(), "\t\t velocity"); this->dataPtr->command_interfaces_.emplace_back( - joint_name + suffix, + joint_name, hardware_interface::HW_IF_VELOCITY, &this->dataPtr->joints_[j].joint_velocity_cmd); if (!std::isnan(initial_velocity)) { @@ -424,7 +375,7 @@ bool GazeboSimSystem::initSim( } else if (joint_info.command_interfaces[i].name == "effort") { RCLCPP_INFO_STREAM(this->nh_->get_logger(), "\t\t effort"); this->dataPtr->command_interfaces_.emplace_back( - joint_name + suffix, + joint_name, hardware_interface::HW_IF_EFFORT, &this->dataPtr->joints_[j].joint_effort_cmd); if (!std::isnan(initial_effort)) { @@ -732,76 +683,31 @@ hardware_interface::return_type GazeboSimSystem::write( } // set values of all mimic joints with respect to mimicked joint - for (const auto & mimic_joint : this->dataPtr->mimic_joints_) { - for (const auto & mimic_interface : mimic_joint.interfaces_to_mimic) { - if (mimic_interface == "position") { - // Get the joint position - double position_mimicked_joint = - this->dataPtr->ecm->Component( - this->dataPtr->joints_[mimic_joint.mimicked_joint_index].sim_joint)->Data()[0]; + for (const auto & mimic_joint : this->info_.mimic_joints) { + // Get the joint position + double position_mimicked_joint = + this->dataPtr->ecm->Component( + this->dataPtr->joints_[mimic_joint.mimicked_joint_index].sim_joint)->Data()[0]; - double position_mimic_joint = - this->dataPtr->ecm->Component( - this->dataPtr->joints_[mimic_joint.joint_index].sim_joint)->Data()[0]; + double position_mimic_joint = + this->dataPtr->ecm->Component( + this->dataPtr->joints_[mimic_joint.joint_index].sim_joint)->Data()[0]; - double position_error = - position_mimic_joint - position_mimicked_joint * mimic_joint.multiplier; + double position_error = + position_mimic_joint - position_mimicked_joint * mimic_joint.multiplier; - double velocity_sp = (-1.0) * position_error * (*this->dataPtr->update_rate); + double velocity_sp = (-1.0) * position_error * (*this->dataPtr->update_rate); - auto vel = - this->dataPtr->ecm->Component( - this->dataPtr->joints_[mimic_joint.joint_index].sim_joint); - - if (vel == nullptr) { - this->dataPtr->ecm->CreateComponent( - this->dataPtr->joints_[mimic_joint.joint_index].sim_joint, - sim::components::JointVelocityCmd({velocity_sp})); - } else if (!vel->Data().empty()) { - vel->Data()[0] = velocity_sp; - } - } - if (mimic_interface == "velocity") { - // get the velocity of mimicked joint - double velocity_mimicked_joint = - this->dataPtr->ecm->Component( - this->dataPtr->joints_[mimic_joint.mimicked_joint_index].sim_joint)->Data()[0]; - - if (!this->dataPtr->ecm->Component( - this->dataPtr->joints_[mimic_joint.joint_index].sim_joint)) - { - this->dataPtr->ecm->CreateComponent( - this->dataPtr->joints_[mimic_joint.joint_index].sim_joint, - sim::components::JointVelocityCmd({0})); - } else { - const auto jointVelCmd = - this->dataPtr->ecm->Component( - this->dataPtr->joints_[mimic_joint.joint_index].sim_joint); - *jointVelCmd = sim::components::JointVelocityCmd( - {mimic_joint.multiplier * velocity_mimicked_joint}); - } - } - if (mimic_interface == "effort") { - // TODO(ahcorde): Revisit this part ignitionrobotics/ign-physics#124 - // Get the joint force - // const auto * jointForce = - // _ecm.Component( - // this->dataPtr->sim_joints_[j]); - if (!this->dataPtr->ecm->Component( - this->dataPtr->joints_[mimic_joint.joint_index].sim_joint)) - { - this->dataPtr->ecm->CreateComponent( - this->dataPtr->joints_[mimic_joint.joint_index].sim_joint, - sim::components::JointForceCmd({0})); - } else { - const auto jointEffortCmd = - this->dataPtr->ecm->Component( - this->dataPtr->joints_[mimic_joint.joint_index].sim_joint); - *jointEffortCmd = sim::components::JointForceCmd( - {mimic_joint.multiplier * - this->dataPtr->joints_[mimic_joint.mimicked_joint_index].joint_effort}); - } - } + auto vel = + this->dataPtr->ecm->Component( + this->dataPtr->joints_[mimic_joint.joint_index].sim_joint); + + if (vel == nullptr) { + this->dataPtr->ecm->CreateComponent( + this->dataPtr->joints_[mimic_joint.joint_index].sim_joint, + sim::components::JointVelocityCmd({velocity_sp})); + } else if (!vel->Data().empty()) { + vel->Data()[0] = velocity_sp; } } diff --git a/gz_ros2_control_demos/config/gripper_controller_effort.yaml b/gz_ros2_control_demos/config/gripper_controller_effort.yaml new file mode 100644 index 00000000..ac5855eb --- /dev/null +++ b/gz_ros2_control_demos/config/gripper_controller_effort.yaml @@ -0,0 +1,15 @@ +controller_manager: + ros__parameters: + update_rate: 100 # Hz + + gripper_controller: + type: forward_command_controller/ForwardCommandController + + joint_state_broadcaster: + type: joint_state_broadcaster/JointStateBroadcaster + +gripper_controller: + ros__parameters: + joints: + - right_finger_joint + interface_name: effort diff --git a/gz_ros2_control_demos/config/gripper_controller.yaml b/gz_ros2_control_demos/config/gripper_controller_position.yaml similarity index 100% rename from gz_ros2_control_demos/config/gripper_controller.yaml rename to gz_ros2_control_demos/config/gripper_controller_position.yaml diff --git a/gz_ros2_control_demos/launch/gripper_mimic_joint_example.launch.py b/gz_ros2_control_demos/launch/gripper_mimic_joint_example_effort.launch.py similarity index 98% rename from gz_ros2_control_demos/launch/gripper_mimic_joint_example.launch.py rename to gz_ros2_control_demos/launch/gripper_mimic_joint_example_effort.launch.py index 90fbb0db..eab09938 100644 --- a/gz_ros2_control_demos/launch/gripper_mimic_joint_example.launch.py +++ b/gz_ros2_control_demos/launch/gripper_mimic_joint_example_effort.launch.py @@ -37,7 +37,7 @@ def generate_launch_description(): " ", PathJoinSubstitution( [FindPackageShare("gz_ros2_control_demos"), - "urdf", "test_gripper_mimic_joint.xacro.urdf"] + "urdf", "test_gripper_mimic_joint_effort.xacro.urdf"] ), ] ) diff --git a/gz_ros2_control_demos/launch/gripper_mimic_joint_example.launch.xml b/gz_ros2_control_demos/launch/gripper_mimic_joint_example_effort.launch.xml similarity index 98% rename from gz_ros2_control_demos/launch/gripper_mimic_joint_example.launch.xml rename to gz_ros2_control_demos/launch/gripper_mimic_joint_example_effort.launch.xml index 72d5e81d..67e2fcb3 100644 --- a/gz_ros2_control_demos/launch/gripper_mimic_joint_example.launch.xml +++ b/gz_ros2_control_demos/launch/gripper_mimic_joint_example_effort.launch.xml @@ -25,7 +25,7 @@ Author: Dr. Denis description="Start RViz2 automatically with this launch file."/> - + diff --git a/gz_ros2_control_demos/launch/gripper_mimic_joint_example_position.launch.py b/gz_ros2_control_demos/launch/gripper_mimic_joint_example_position.launch.py new file mode 100644 index 00000000..2b196a35 --- /dev/null +++ b/gz_ros2_control_demos/launch/gripper_mimic_joint_example_position.launch.py @@ -0,0 +1,100 @@ +# Copyright 2024 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Author: Denis Stogl (Stogl Robotics Consulting) +# + +from launch import LaunchDescription +from launch.actions import DeclareLaunchArgument, ExecuteProcess, IncludeLaunchDescription +from launch.actions import RegisterEventHandler +from launch.event_handlers import OnProcessExit +from launch.launch_description_sources import PythonLaunchDescriptionSource +from launch.substitutions import Command, FindExecutable, LaunchConfiguration, PathJoinSubstitution + +from launch_ros.actions import Node +from launch_ros.substitutions import FindPackageShare + + +def generate_launch_description(): + # Launch Arguments + use_sim_time = LaunchConfiguration('use_sim_time', default=True) + + # Get URDF via xacro + robot_description_content = Command( + [ + PathJoinSubstitution([FindExecutable(name="xacro")]), + " ", + PathJoinSubstitution( + [FindPackageShare("gz_ros2_control_demos"), + "urdf", "test_gripper_mimic_joint_position.xacro.urdf"] + ), + ] + ) + robot_description = {"robot_description": robot_description_content} + + node_robot_state_publisher = Node( + package='robot_state_publisher', + executable='robot_state_publisher', + output='screen', + parameters=[robot_description] + ) + + gz_spawn_entity = Node( + package='ros_gz_sim', + executable='create', + output='screen', + arguments=["-topic", "robot_description", "-name", + "gripper", "-allow_renaming", "true"], + ) + + load_joint_state_broadcaster = ExecuteProcess( + cmd=['ros2', 'control', 'load_controller', '--set-state', 'active', + 'joint_state_broadcaster'], + output='screen' + ) + + load_gripper_controller = ExecuteProcess( + cmd=['ros2', 'control', 'load_controller', '--set-state', 'active', + 'gripper_controller'], + output='screen' + ) + + return LaunchDescription([ + # Launch gazebo environment + IncludeLaunchDescription( + PythonLaunchDescriptionSource( + [PathJoinSubstitution([FindPackageShare('ros_gz_sim'), + 'launch', + 'gz_sim.launch.py'])]), + launch_arguments=[('gz_args', [' -r -v 4 empty.sdf'])]), + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=gz_spawn_entity, + on_exit=[load_joint_state_broadcaster], + ) + ), + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=load_joint_state_broadcaster, + on_exit=[load_gripper_controller], + ) + ), + node_robot_state_publisher, + gz_spawn_entity, + # Launch Arguments + DeclareLaunchArgument( + 'use_sim_time', + default_value=use_sim_time, + description='If true, use simulated clock'), + ]) diff --git a/gz_ros2_control_demos/launch/gripper_mimic_joint_example_position.launch.xml b/gz_ros2_control_demos/launch/gripper_mimic_joint_example_position.launch.xml new file mode 100644 index 00000000..76dd181d --- /dev/null +++ b/gz_ros2_control_demos/launch/gripper_mimic_joint_example_position.launch.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gz_ros2_control_demos/urdf/test_gripper_mimic_joint_effort.xacro.urdf b/gz_ros2_control_demos/urdf/test_gripper_mimic_joint_effort.xacro.urdf new file mode 100644 index 00000000..292e3f2b --- /dev/null +++ b/gz_ros2_control_demos/urdf/test_gripper_mimic_joint_effort.xacro.urdf @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gz_ros2_control/GazeboSimSystem + + + + + 0.15 + + + + + + + + + + + + + + $(find gz_ros2_control_demos)/config/gripper_controller_effort.yaml + + + diff --git a/gz_ros2_control_demos/urdf/test_gripper_mimic_joint.xacro.urdf b/gz_ros2_control_demos/urdf/test_gripper_mimic_joint_position.xacro.urdf similarity index 94% rename from gz_ros2_control_demos/urdf/test_gripper_mimic_joint.xacro.urdf rename to gz_ros2_control_demos/urdf/test_gripper_mimic_joint_position.xacro.urdf index 555bd493..92dd872d 100644 --- a/gz_ros2_control_demos/urdf/test_gripper_mimic_joint.xacro.urdf +++ b/gz_ros2_control_demos/urdf/test_gripper_mimic_joint_position.xacro.urdf @@ -88,9 +88,6 @@ - right_finger_joint - 1 - @@ -99,7 +96,7 @@ - $(find gz_ros2_control_demos)/config/gripper_controller.yaml + $(find gz_ros2_control_demos)/config/gripper_controller_position.yaml