Elite-Robots / ROS

31 stars 5 forks source link

EC612 and EC66 issues testing ROS Driver #4

Closed progettista6 closed 2 years ago

progettista6 commented 2 years ago

Hello,

I cloned this repository in a Kontron industrial PC with Ubuntu 20.04.5 LTS and ROS Noetic installed. I tried to command an EC612 robot with the following firmware and software versions:

Controller software V3.5.2.2022090 Servo software V11.41

I launched the EC612 controllers and the related elite_moveit.launch file, and everything works: in fact Rviz panel showed the correct configuration for the robot.

I use the joint_limits.yaml file provided, without changes in velocities and accelerations values.

In my node I used the MoveGroupInterface ROS library, setting the following values:

//-----elite----- moveit::planning_interface::MoveGroupInterface el ("manipulator"); ros::ServiceClient client = nh.serviceClient("/set_digital_io_server"); elite_msgs::SetIO srv; el.setPlanningTime( 15.0 ); //sec el.setGoalTolerance( 0.01 ); //m el.setGoalOrientationTolerance( 0.05);//rad el.setMaxAccelerationScalingFactor(0.01); el.setMaxVelocityScalingFactor(0.05);

I noticed that the robot moved only by setting el.setMaxVelocityScalingFactor(0.01) and el.setMaxAccelerationScalingFactor(0.01), but the movement was logically very slow. Trying to command a movement with el.setMaxAccelerationScalingFactor(0.25) and el.setMaxVelocityScalingFactor(0.5), the robot moved very sharply and this caused an overspeed error.

Using the same workspace to command an EC66 robot, with the same controller and servo software versions, and the same workspace, I noticed a completely different behaviour.

In fact, setting el.setMaxAccelerationScalingFactor(0.25) and el.setMaxVelocityScalingFactor(0.5), the robot moved better. The only note I would make is that when I commanded a movement at full speed, the robot moved slower than commanding a movement at full speed via teach pendant.

Could you check and help me to move correctly both EC612 and EC66, please?

Waiting for your reply,

Thank you

JunJie-zhang-o commented 2 years ago

3

Regarding these two questions, I am very sorry. The configuration files of ec66 and ec612 are different, corresponding to two different interfaces of the robot SDK. It is recommended to use the configuration of EC66. We will update this question.

JunJie-zhang-o commented 2 years ago

image image

progettista6 commented 2 years ago

So if I understood correctly, I have to set "joint_trajectory_movel" also in the "ec612.yaml" file, can you confirm that?

Thank you

JunJie-zhang-o commented 2 years ago

Yes

progettista6 commented 2 years ago

Thank you very much, now the EC612 robot works correctly. What about the EC66? When I command a movement at full speed via ROS driver the robot moves much slower than commanding a movement at full speed via teach pendant. I used the provided "joint_limits.yaml" file without changes in velocity and acceleration values. Thank you

JunJie-zhang-o commented 2 years ago

If you want to achieve the same operation as the teach pendant, you may need to use cart_move_serve or joint_move in elite_drive, these two services are suitable for moving between two points

progettista6 commented 2 years ago

Hello,

I tried to use the "/joint_move" service as you suggested, but the robot moves very slowly even when setting very high acceleration and velocity values.

I leave you below the code I used for the service:

//-----elite----- ros::ServiceClient elite_move_client = nh.serviceClient("/joint_move"); elite_msgs::JointMove elite_move_srv;

elite_move_srv.request.target_joint = {180.0,-90.0,90.0,-90.0,90.0,-90.0,0.0,0.0};
elite_move_srv.request.speed = 1.0;
elite_move_srv.request.acc = 80;
elite_move_srv.request.dec = 40;
elite_move_srv.request.is_blocking = true;

if(!(elite_move_client.call(elite_move_srv)))  
{
    ros::shutdown();
}
usleep(2000000);

Do you have any suggestions?

Thank you

JunJie-zhang-o commented 2 years ago

Have you set the global speed percentage for auto mode or remote mode?These two speed percentages are modified synchronously.

progettista6 commented 2 years ago

Do you mean the "speed" and "acc" service arguments values, or something else? What is the procedure to follow?

Thank you

miaokeqin commented 2 years ago

You first need to set the speed to 100% in automatic mode, then go to remote mode and run the program to see if the speed increases. for the aforementioned el.setMaxAccelerationScalingFactor(0.01); el.setMaxVelocityScalingFactor(0.05); You can set the parameter to 1 to see if the robotic arm can achieve a satisfactory speed

Do you mean the "speed" and "acc" service arguments values, or something else? What is the procedure to follow?

Thank you

miaokeqin commented 2 years ago

For the speed parameter of joint_move, it can be set to: elite_move_srv.request.speed = 100; elite_move_srv.request.acc = 100; elite_move_srv.request.dec = 100; I have tested with significant speed changes, be careful during testing

progettista6 commented 2 years ago

I set the velocity as you indicated:

For now, I can use the first mode, but I'd like to use also the second one.

Thank you

JunJie-zhang-o commented 2 years ago

did you check the speed percentage on the teach pendant? image

progettista6 commented 2 years ago

Yes, in "Remote" mode and in "Play" mode it shows "100%".

miaokeqin commented 2 years ago

Can you provide the service sample code of joint_move, if it is convenient for me to test it, the running speed of the sample code of joint_move has changed obviously. You can look at test_joint_move.py in the test file

miaokeqin commented 2 years ago

you can also test in terminal like this: rosservice call /joint_move "target_joint: [0,-60,33,-80,90,0] speed: 100 acc: 10 dec: 10 is_blocking: False"

progettista6 commented 2 years ago

Hello,

I tried again to use "joint_move" service, I had set the speed parameter too low. Now it works correctly.

Thank you