Kinovarobotics / kinova-movo

Source code of the Kinova MOVO platform
BSD 3-Clause "New" or "Revised" License
44 stars 37 forks source link

Force control of MOVO #58

Open mptangtang opened 5 years ago

mptangtang commented 5 years ago

Dear everybody:

I would like to use force control/adimittance control with 7-dof jaco arm equipped on MOVO. However when I look at the topics offered by movo1 or movo2, there are no such interfaces for me. It seems that the two arms could only be contolled by using Moveit! using position or velocity control on both joints and end-effector. Are there any methods that I could use force control or get the force feedbacks from the two arms?

I have tried to connect my computer directly to the jaco arm using USB and pull out the ethernet plug. The demo admittance control program works fine. I also tried to run the program directly on either movo1 or movo2. However the arm initialization failed. It seems that the arms are occupied by other program which offeres arm control for ROS.

So I was wondering that are there any methods that I could implement the arm force control on MOVO?

Best wishes!

Qing

martine1406 commented 5 years ago

Dear @mptangtang

I suggest you look at those related issues and discussions: https://github.com/orgs/Kinovarobotics/teams/movo-beta-program/discussions/45 https://github.com/Kinovarobotics/kinova-movo/issues/47 https://github.com/Kinovarobotics/kinova-movo/issues/34

You are right, as is, the movo topics only offer you the possibility of controlling in position mode both in angular and cartesian space. Through the joint space trajectory controller, you can command the arms in angular position mode and using the teleop topics, you can control in Cartesian velocity mode. Finally, some work from university of Queensland made it possible to control the arms in angular velocity mode by publishing to topic /movo/%s_arm/angular_vel_cmd.

As you noticed by connecting directly to the arms, the Kinova arms and API indeed support Reactive force control/admittance.

Please look at the links I have provided at the beginning of this post and I hope they answer your question

Good luck in your work

mptangtang commented 5 years ago

Dear @martine1406

Thank you very much for your suggestions. I might understand what is going on behind the MOVO.

Does that mean that the movo1 will call the python code "kinova_api_wrapper.py" each time when we control the jaco arm. If I would like to implement the force control with jaco through the ROS, I have to modify the "kinova_api_wrapper.py" on the movo1 computer (or both movo1 and movo2). To realize the interface by myself?

Best wishes

martine1406 commented 5 years ago

Hi @mptangtang

Yes you are right, movo1 will call the python code "kinova_api_wrapper.py" each time you control the jaco arm. If you would like to implement the force control with jaco through the ROS, one of the first steps will indeed be to the "kinova_api_wrapper.py" on both movo1 and movo2. Movo1 and movo2 should always run the same version of the code.

Martine

mptangtang commented 5 years ago

Dear @martine1406

Are there any methods to implement the force control by C++?

Best wishes!

Qing

martine1406 commented 5 years ago

Hi @mptangtang

Here is the strategy to implement Reactive force control (snippet from #34)

First, you'll have to set the gravity vector in the right orientation since the arms are mounted horizontally. The C++ API function to do so is SetGravityVector. The base axis system for the Kinova arms is defined as shown below:

image

Then, you will need to activate the Reactive force control mode. The C++ API function to do so is SetForceControl.

Finally, you have functions to customize the Reactive force control: SetCartesianForceMinMax, SetCartesianInertiaDamping

Reactive force control will allow you to grab the robot by its hand and move it around (I think this is the best option considering what you want to do).