Robotics StackExchange | Archived questions

URDF robot falling apart with link origins to global origin with correct inertias

Hi All,

I have spent about a week now absolutely racking my brains to try and solve this issue and have had zero luck. I believe I have tried everything I can possible find to do.

I am trying to create a cartesian robot with 5 degrees freedom. Each axis is prismatic with gross movements in the X Y and Z directions as well as individually moving fingers for a gripper. I first created my URDF with the SW2URDF converter then proceeded to edit it as necessary. When I launch it in gazebo each of the links aside from the fixed base links end up flying around in the air then coming to rest with the origins coinciding with the global origin.

I have edited each links inertia and ensured the masses are correct which is one of the most common solves. I have also played around with the effort limits, kd kp mu1 mu2 variables and attempted to add both an effort controller and a position controller with no luck.

Here is my URDF:


<?xml version="1.0" encoding="utf-8"?> <!-- This URDF was automatically created by SolidWorks to URDF Exporter! Originally created by Stephen Brawner (brawner@gmail.com) Commit Version: 1.5.1-0-g916b5db Build Version: 1.5.7152.31018 For more information, please see http://wiki.ros.org/sw_urdf_exporter -->

/cartesian_pharmacist

>

10.0 10.0

transmissioninterface/SimpleTransmission <joint name="verticalbearingmovementjoint"> PositionJointInterface 1

10.0 10.0

10.0 10.0

10.0 10.0

10.0 10.0

10.0 10.0


Here is my gazebo launch file:


<?xml version="1.0" encoding="UTF-8"?>

here is my world launch file:

<?xml version="1.0" encoding="utf-8"?>

<arg name="x" default="0.0" />
<arg name="y" default="0.0" />
<arg name="z" default="0.0" />

<arg name="urdf_robot_file" default="" />
<arg name="robot_name" default="" />

<!-- these are the arguments you can pass this launch file, for example paused:=true -->

<!-- We resume the logic in emptyworld.launch, changing only the name of the world to be launched --> <include file="$(find gazeboros)/launch/emptyworld.launch"> <arg name="worldname" value="$(find cartesianpharmacist)/worlds/pharmacyworld.world"/>

<!-- Run a python script to the send a service call to gazeboros to spawn a URDF robot --> <node name="urdfspawner" pkg="gazeboros" type="spawnmodel" respawn="false" output="screen" args="-urdf -model cartesianpharmacist -param robotdescription"/>


Here is my controller launch file:


<?xml version="1.0" encoding="utf-8"?>

<!-- Load joint controller configurations from YAML file to parameter server -->

<!-- load the controllers -->

<!-- convert joint states to TF transforms for rviz, etc -->


Here is my config yaml file:


cartesianpharmacist: # Publish all joint states ----------------------------------- jointstatecontroller: type: jointstatecontroller/JointStateController publishrate: 50

# Position Controllers ---------------------------------------
vertical_bearing_movement_joint_position_controller:
  type: position_controllers/JointPositionController
  joint: vertical_bearing_movement_joint

pid: {p: 21.6, i: 0.011, d: 0.14}


Please note that in my urdf I have the transmissions for each joint commented out and I am trying to get just the vertical movement going initially. I have converted each STL to a dae through blender and made absolutely sure that the link origins are correctly oriented and in the right location.

Thankyou in advance for any help. I believe I have tried everything and simply cannot find the source of the issue.

Asked by CurtinHamish on 2020-10-05 03:14:25 UTC

Comments

Answers