# Gazebo sim UR10e plus Robotiq gripper

Dear All,

I am trying to create a Gazebo simulation of an assembled robot comprised of the Universal Robots UR10e arm and an attached Robotiq 3-fingers gripper. I am using the ros-industrial packages for both: UR10e, Robotiq.

I have created a package for my custom solution, called cobot_description and there I have a urdf folder containing my custom urdf file. I have asked for help in a previous question in order to create such URDF and now it spawns nicely in RViz (I am using Visual Studio Code's ROS extension to see it inside of an RViz windows in Visual Studio).

I have now moved ahead trying to create the Gazebo Sim for the robot. To that end, I have created a new package in the same directory of the previously introduced cobot description one, called cobot_gazebo. Here, I have created a launch folder, where I have created a file called cobot_empty_world.launch which is intended to spawn my assembled robot in Gazebo.

The following is the code I have written to spawn it:

<?xml version="1.0"?>
<launch>
<!-- Args copied from ur10e.launch -->
<arg name="limited" default="false"  doc="If true, limits joint range [-PI, PI] on all joints." />
<arg name="paused" default="false" doc="Starts gazebo in paused mode" />
<arg name="gui" default="true" doc="Starts gazebo gui" />

<!-- Startup of empty Gazebo world -->
<include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="world_name" default="worlds/empty.world"/> <arg name="paused" value="$(arg paused)"/>
<arg name="gui" value="$(arg gui)"/> </include> <!-- Upload the ur10e + robotiq to param server --> <include file="$(find cobot_description)/launch/ur10e_robotiq_upload.launch">
</include>

<!-- push robot_description to factory and spawn robot in gazebo -->
<node name="spawn_gazebo_model" pkg="gazebo_ros" type="spawn_model" args="-urdf -param robot_description -model robot -z 0.1" respawn="false" output="screen" />

<!-- At this point, the Robotiq launch file ends, while the ur10e continues with controllers -->

<!-- Code from ur10e.launch -->
<include file="$(find ur_e_gazebo)/launch/controller_utils.launch"/> <!-- start this controller --> <rosparam file="$(find ur_e_gazebo)/controller/arm_controller_ur10e.yaml" command="load"/>
<node name="arm_controller_spawner" pkg="controller_manager" type="controller_manager" args="spawn arm_controller" respawn="false" output="screen"/>
<node name="ros_control_controller_manager" pkg="controller_manager" type="controller_manager" respawn="false" output="screen" args="load joint_group_position_controller" />

</launch>

As you can tell from the code, I have copied its structure from the same-purpose files in the UR and Robotiq packages. I have copied the content of the UR10e file which includes, as commented, some controllers.

The file I am calling to upload the robot to the param server is simply this:

<?xml version="1.0"?>
<launch>
<param name="robot_description" command="$(find xacro)/xacro.py '$(find cobot_description)/urdf/ur10e_robotiq.urdf.xacro'" />
</launch>

Issue: when launching the cobot_empty_world.launch file, I get the following error:

edit retag close merge delete

Sort by » oldest newest most voted

The issue was in the URDF being faulty. There, I called the UR10e file both outside and inside the macro, causing problems with the URDF.

more

With Gazebo, you can not have multiple root links in your URDF, as the error message is saying. Now, the problem is that you are using the file ur10e_robot.urdf.xacro which already defines a root link world for the robot, but this root link does not support the prefix argument as you can see here

To solve your problem, you could not refer to the ur10e_robot.urdf.xacro directly, but just copy its content to your URDF and with an updated definition of the world link, like this:

<joint name="world_joint" type="fixed">
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
</joint>
more

I have also tried using {prefix}base_link and robot_base_link (tried these two for fun) but these also do not work. The first one raises an error equal to the one above (child link name adjusted), while the second option raises an error equal to the one in the original post, that is:

Anyway, I believe your solution may be right, but it fails to find {prefix} because it is present in the instantiation of the ur10e_robot xacro, but maybe it isn't globally available and therefore the ...(more)

( 2021-07-05 03:40:35 -0600 )edit

I think it is exactly as you say, I mentioned {prefix}robot_base_link above because that is the convention that you seem to be using, but if you do not define it as a macro at that level, then you can just replace it directly with the value it is expecting robot_base_link

( 2021-07-05 09:46:01 -0600 )edit

However, calling robot_base_link results in the error I stated above:

Once again, it is weird that it outputs [base_link] instead of the whole [robot_base_link]. I don't know what I should do, honestly.

Regards

( 2021-07-05 12:42:08 -0600 )edit

Well it seems you are getting confused with the use of {prefix}, unless you are going to have several robots, you can try not defining any prefix at all, not for the robot, not for the gripper. That may make things easier to track for you.

( 2021-07-05 20:45:35 -0600 )edit

I will try avoiding the prefix, but I added it for a future need of including a left and a right UR10e with corresponding grippers.

I was wondering if the issue might be another one. Indeed, if we consider the error stating that it fails to find a root, why would a UR10e spawn normally but have issues when attaching a gripper on its end effector? Wouldn’t it be because the gripper has a base link that is connected to world too? I haven’t found it in the files, though. I just don’t understand why this custom solution has issues just because I try to join two components… there must be a problem in the hierarchy, but wouldn’t it be solved when I create a joint between the end effector and the first link of the gripper?

Regards

( 2021-07-06 02:33:48 -0600 )edit

If you can provide access to your files I may have a look. Otherwise, you can check my approach to having dual robots with grippers in gazebo here

• Make sure that you are defining the root link, as in the example above, and that the macros for the robot and gripper don't define it. Make sure you connect properly the root link of the gripper with the end effector link of your robot, otherwise your problem may be a lingering link on the gripper.
( 2021-07-08 23:49:34 -0600 )edit

Sure! Thank you.

I will check your code in a moment. Meanwhile, I have uploaded my cobot folder in this repo. Please also download the robotiq and universal robots repos from the links in my first post here.

Cobot

Regards

( 2021-07-09 02:35:38 -0600 )edit