No kinematics plugins defined. Fill and load kinematics.yaml!

Continuing the discussion from Move UR with a MoveIt2 Script:

Hello, I tried this solution and it doesnt work for me.

We are trying to move a Universal Robot arm and we want to move it through URSIM beforehand. To do this we are trying to adapt the hello_moveit_ur project (configured for panda) Your First C++ MoveIt Project — MoveIt Documentation: Humble documentation to ur5e or ur3e.

In this project they explain how to make a launch file for this purpose: simple_moveit2_universal_robots_movement/README.md at main · LucaBross/simple_moveit2_universal_robots_movement · GitHub
I cannot make it works

Steps to reproduce

According to the README provided for Luca Bross in the same github mentioned before:

Shell 1: run the driver
ros2 launch ur_robot_driver ur_control.launch.py ur_type:=ur3e robot_ip:=172.17.0.2 launch_rviz:=false initial_joint_controller:=joint_trajectory_controller to connect to the Universal Robot.

Start the external control urcap on the UR to allow external control (172.17.0.2 )
whose answer is :

[ur_ros2_control_node-1] [INFO] [1724836702.880117247] [UR_Client_Library:]: Robot requested program
[ur_ros2_control_node-1] [INFO] [1724836702.880196920] [UR_Client_Library:]: Sent program to robot
[ur_ros2_control_node-1] [INFO] [1724836702.909041735] [UR_Client_Library:]: Robot connected to reverse interface. Ready to receive control commands.

Shell 2: run the moveit controller

ros2 launch ur_moveit_config ur_moveit.launch.py ur_type:=ur3e launch_rviz:=true 
to cofigure moveit.

whose anser is :

[rviz2-2] [INFO] [1724836802.044574767] [interactive_marker_display_95582728855616]: Sending request for interactive markers
[rviz2-2] [INFO] [1724836802.078529470] [interactive_marker_display_95582728855616]: Service response received for initialization
[rviz2-2] [INFO] [1724836862.032627211] [move_group_interface]: Ready to take commands for planning group ur_manipulator.

Shell 3: launch the program hello
Start the hello_moveit_ur file with a launchfile ros2 launch hello_moveit_ur hello_moveit_ur_launch.py.
whose anser is:

[INFO] [launch]: All log files can be found below /home/pedro/.ros/log/2024-08-28-11-36-43-385497-pedro-B650-AORUS-ELITE-AX-11823
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [hello_moveit_ur-1]: process started with pid [11826]
[hello_moveit_ur-1] [INFO] [1724837803.703205261] [moveit_rdf_loader.rdf_loader]: Loaded robot model in 0.00261015 seconds
[hello_moveit_ur-1] [INFO] [1724837803.703235167] [moveit_robot_model.robot_model]: Loading robot model 'ur'...
[hello_moveit_ur-1] [INFO] [1724837803.703242611] [moveit_robot_model.robot_model]: No root/virtual joint specified in SRDF. Assuming fixed joint
[hello_moveit_ur-1] [WARN] [1724837803.770902047] [moveit_ros.robot_model_loader]: No kinematics plugins defined. Fill and load kinematics.yaml!

Expected behaviour

The robot to move in the UR SIM, to the selected point.

Actual behaviour

It gives a warning about the kinematics and keep waiting.

Thanks a lot.

We solved it.
The problem was a conflict of ‘sourcing’

Can you specify, how you did it? I am facing the same problem!!

1 Like

Hello, at the end we did nothing special but start from scratch. We realize probably we were sourcing it wrongly

Download again simple_moveit2_universal_robots_movement-main/ , in fact we dowloand the zip package.
We used the source version of UR5 driver and move it. So we had to build them. The workspace for this is ur_ros2_ws.

You need to use 4 terminals (or shells), to execute the UR5 DRIVER, the URSIM, the MOVE IT framework, and the program hello_moveit itself.

T1 (: driver_ur)

cd ~/ur_ros2_ws
source /opt/ros/humble/setup.bash
source install/setup.bash
ros2 launch ur_robot_driver ur_control.launch.py ur_type:=ur3e robot_ip:=172.17.0.2 launch_rviz:=false

NOW launch the URSIM / URCAP in other terminal (this is going to be your 2nd terminal, if you launch it from a shell).
Now Terminal 1 should answer:

[ur_ros2_control_node-1] [INFO] [1724661734.114233192] [UR_Client_Library:]: Robot connected to reverse interface. Ready to receive control commands.

T2 (: move_it) → in fact is 3rd terminal

cd ~/ur_ros2_ws
source /opt/ros/humble/setup.bash
source install/setup.bash
ros2 launch ur_moveit_config ur_moveit.launch.py ur_type:=ur3e launch_rviz:=true

Terminal 2 should answer:
[rviz2-2] [INFO] [1724770119.055652176] [interactive_marker_display_95051914406416]: Sending request for interactive markers

[rviz2-2] [INFO] [1724770119.087438542] [interactive_marker_display_95051914406416]: Service response received for initialization

[rviz2-2] [INFO] [1724169912.926740615] [move_group_interface]: Ready to take commands for planning group ur_manipulator.

Last line it will take more time.

T3 Last terminal (in fact is 4th)- to launch hello_moveit_ur
Now depending where you unzipped the simple_moveit2_universal_robots_movement-main/ , you can have two options.

First option. You can just unzip it in /home, just go to the folder and execute:

T3 (:hello…)
Build the package:

cd simple_moveit2_universal_robots_movement-main/
colcon build

To execute the hello_moveit:

cd simple_moveit2_universal_robots_movement-main/
source /opt/ros/humble/setup.bash
source install/setup.bash
ros2 launch hello_moveit_ur hello_moveit_ur_launch.py

The other option is to build it inside a workspace, ==> ~/ws_UR3e/src/simple_moveit2_universal_robots_movement-main/

Then you should build it from the WS.

T3 (:hello…)

cd ~/ws_UR3e
source /opt/ros/humble/setup.bash
colcon build

To execute the hello_moveit:

cd ~/ws_UR3e
source /opt/ros/humble/setup.bash
source install/setup.bash
ros2 launch hello_moveit_ur hello_moveit_ur_launch.py

then should be accepted and executed and the node should exit.
[hello_moveit_ur-1] [INFO] [1726138386.006110493] [move_group_interface]: MoveGroup action client/server ready

[hello_moveit_ur-1] [INFO] [1726138386.006299472] [move_group_interface]: Planning request accepted

[hello_moveit_ur-1] [INFO] [1726138386.051726588] [move_group_interface]: Planning request complete!

[hello_moveit_ur-1] [INFO] [1726138386.052507462] [move_group_interface]: time taken to generate plan: 0.0311912 seconds

[hello_moveit_ur-1] [INFO] [1726138386.052972034] [move_group_interface]: Execute request accepted

[hello_moveit_ur-1] [INFO] [1726138402.711349299] [move_group_interface]: Execute request success!

[INFO] [hello_moveit_ur-1]: process has finished cleanly [pid 22634]

WARNINGS about the kinematicks No kinematics plugins defined. Fill and load kinematics.yaml! will still be there, but the program should works.

hope it helps

:slight_smile:

Thank you so much for your detailed explanation. I am following exactly all the steps you mentioned above, still if I define
geometry_msgs::msg::Pose msg;
msg.orientation.w = 1.0;
msg.position.x = 0.300;
msg.position.y = 0.300;
msg.position.z = 0.300;

It is going to (-0.3,-0.3,0.05) with tcp RX= 0 RY = 0 and RZ= 3.143

Also getting this warning

Error: Semantic description is not specified for the same robot as the URDF
at line 664 in ./src/model.cpp
[INFO] [1726832308.485516353] [moveit_rdf_loader.rdf_loader]: Loaded robot model in 2.95336 seconds
[INFO] [1726832308.486186709] [moveit_robot_model.robot_model]: Loading robot model ‘ur5e’…
[INFO] [1726832308.486495040] [moveit_robot_model.robot_model]: No root/virtual joint specified in SRDF. Assuming fixed joint
[WARN] [1726832308.649051192] [moveit_ros.robot_model_loader]: No kinematics plugins defined. Fill and load

Also tried rotating the quaternions
ms.orientation.x = 0.0;
msg.orientation.y = 0.0;
msg.orientation.z = 0.0;

Still not going to the desired TCP location.

I even inspected the launch.py everything seems correct. It would be great if you can suggest some means for correction.
Did you change anything other than changing the name of the robot?
And how it is different if I run it as a ros2 node and not as ros2 launch file?

Sorry. Now we are at the same page. :smile: We couldn’t change neither in the minimum, the position of the example. The hello example is written :

// Set a target Pose
auto const target_pose = {
geometry_msgs::msg::Pose msg;
msg.orientation.w = 1.0;
msg.position.x = 0.28;
msg.position.y = -0.2;
msg.position.z = 0.5;
return msg;
}();

the change of the postion x in

// Set a target Pose
auto const target_pose = {
geometry_msgs::msg::Pose msg;
msg.orientation.w = 1.0;
msg.position.x = 0.30;
msg.position.y = -0.2;
msg.position.z = 0.5;
return msg;
}();

Turns into a robot error. We couldn’t achieve this movement, so in addition we are afraid to leave the simulator and work with the real robot. Although we tried the default target pose, and the robot moved but was too slow.

We didn’t change anything but the robot name.

Broadly speaking, what I can tell you is that the difference between working with a launch file or not (i.e. launching only one node with the ros2 command) is whether you launch a single node or multiple nodes. The launch file is a configuration file that allows you to launch multiple nodes and configure their parameters. In this case, I think it is used more for parameter configuration.

We could do a meeting if you want.

We achieved to move it, but the problem is, it always move, no matter if you execute the same script, and the target pose was reached, it tries to find a new path and a new plan to reach the same pose in another way

Hi Pedromoreo,

It is still not working for me. It would be great if you can explain how you figured it out?

P.S please reply to my email.
TIA

Cant find any email. I sent you a message , please check your inbox.

best.

Hi @pedromoreo
I have emailed you. If you did not find any email. Please let me know here.