-
Notifications
You must be signed in to change notification settings - Fork 44
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Robot does not hold current position when iiwa_driver is launched #84
Comments
Which controller are you using? The default one or the |
Yes, I used the default one. Are you suggesting I use |
I went ahead to try the |
This is weird. The TorqueController should do nothing (just gravity compensation). Are you sure that you are following the bringup instructions here correctly? The only other thing that comes to my mind is the following: Do you have some tool attached to the end-effector? Which Java file have you loaded (look here)? |
Hmm, I may have used |
As you probably found out, the line in _toolAttached = getApplicationData().createFromTemplate("MyVirtualGripper"); needs to have the name of the tool that is known to the KUKA Java stack. But then - besides some slight miscalibration it works for us. |
Indeed, using In summary, what exactly is the Lastly, it appears there is no consideration of Coriolis forces. Was this done on purpose? Thanks |
This is nice!
This part needs a big documentation that we never found time to write. It is not just It could be that the driver is launched too soon and the initial command is junk. What is the output of the above?
Yes because iiwa adds this (and gravity forces) automatically and there is no way to remove it. So we do not add anything for this. |
@costashatz I tested the CustomControllers again, and it works! The problem I had before was that I had modified the custom_effort_controller.cpp file to account for my namespace modification. This resulted in the weird behavior I saw. Once I fixed that, everything appears to be working perfectly for just a single robot. I am now working on addressing the issues with namespace as recommended by you and Matthias in the other post (namespace). It appears that wrapping namespace for simulation seems to be slightly different from wrapping namespace for the hardware. On the hardware, it is as simple as creating two yaml files for the controller and passing the appropriate yaml file for each robot. Whereas in simulation, I also have to worry about spawning both robots, so I must pay attention to how I setup the |
Happy that this is working..
Let's move this discussion in #85 . See @matthias-mayr's reply. Closing this. |
Hello Konstantinos,
I would like to cite iiwa_ros, please do you have a bibtex reference for your software?
Regards
Victor Aladele
PhD student
Robotics and Machine Learning
Electrical and Computer Engineering Department
Georgia Institute of Technology
The true sign of intelligence is not knowledge but imagination.
Albert Einstein<http://www.brainyquote.com/quotes/authors/a/albert_einstein.html>
…________________________________
From: Konstantinos Chatzilygeroudis ***@***.***>
Sent: Monday, May 9, 2022 4:11 AM
To: epfl-lasa/iiwa_ros ***@***.***>
Cc: Aladele, Victor Oluwatobi ***@***.***>; Author ***@***.***>
Subject: Re: [epfl-lasa/iiwa_ros] Robot does not hold current position when iiwa_driver is launched (Issue #84)
@costashatz<https://github.com/costashatz> I tested the CustomControllers again, and it works! The problem I had before was that I had modified the custom_effort_controller.cpp file to account for my namespace modification. This resulted in the weird behavior I saw. Once I fixed that, everything appears to be working perfectly for just a single robot.
Happy that this is working..
I am now working on addressing the issues with namespace as recommended by you and Matthias in the other post (namespace<#85>). It appears that wrapping namespace for simulation seems to be slightly different from wrapping namespace for the hardware. On the hardware, it is as simple as creating two yaml files for the controller and passing the appropriate yaml file for each robot. Whereas in simulation, I also have to worry about spawning both robots, so I must pay attention to how I setup the robot_description parameter. I was hoping I could load just one robot_description to the parameter server, and spawn two separate robots using the same robot_description, but it appears that is not possible.
Let's move this discussion in #85<#85> . See @matthias-mayr<https://github.com/matthias-mayr>'s reply. Closing this.
—
Reply to this email directly, view it on GitHub<#84 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/AIME5TC2IBROF4THLJTW7A3VJDCE3ANCNFSM5U5MSRUA>.
You are receiving this because you authored the thread.Message ID: ***@***.***>
|
Check here. This should suffice for now. Aiming for a proper citation soon :) |
Great! Thank you!
Regards
Victor Aladele
PhD student
Robotics and Machine Learning
Electrical and Computer Engineering Department
Georgia Institute of Technology
The true sign of intelligence is not knowledge but imagination.
Albert Einstein<http://www.brainyquote.com/quotes/authors/a/albert_einstein.html>
…________________________________
From: Konstantinos Chatzilygeroudis ***@***.***>
Sent: Tuesday, June 28, 2022 10:34 AM
To: epfl-lasa/iiwa_ros ***@***.***>
Cc: Aladele, Victor Oluwatobi ***@***.***>; Author ***@***.***>
Subject: Re: [epfl-lasa/iiwa_ros] Robot does not hold current position when iiwa_driver is launched (Issue #84)
Hello Konstantinos, I would like to cite iiwa_ros, please do you have a bibtex reference for your software? Regards
Check here<https://github.com/epfl-lasa/iiwa_ros#citing-iiwa_ros>. This should suffice for now. Aiming for a proper citation soon :)
—
Reply to this email directly, view it on GitHub<#84 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/AIME5TDG6NRICW7UT54HKIDVRMEPJANCNFSM5U5MSRUA>.
You are receiving this because you authored the thread.Message ID: ***@***.***>
|
This seems to me like a bad calibration of the robot. Try to calibrate the robot using your smartpad.
The
This is most probably due to wrong configuration. Are you using |
Thank you for the timely response!
We are using
We did calibration on SmartPad in the morning, after which the performance might be a little bit better (but still the robot cannot hold its configuration at any initial pose). What we found is that the default gravity compensation performs differently at different robot's configuration: Under some joint configuration the robot can really stay still for minutes but under another configuration some joints (in our case joint 5 is the one demonstrating the most weird behavior) tend to rotate until reaching the limits. It is worth mentioning that the robot keeps still when launching the torque controller in all the cases. So basically we suppose that the default URDF used by KUKA to realize the gravity compensation is not perfect -- the modeling mismatch may cause larger effect on the compensation under some joint configuration than under others. But anyway we are able to achieve simple joint-wise torque control using IIWA_ROS. Please let me know if you think up possible solutions or detect any incorrect operation in our test. |
Wait. What do you mean here? I thought you were saying that it wasn't working with the torque controller.
Yes, the gravity compensation is not perfect. It doesn't account for velocities for example. It's pure gravity compensation. Also KUKA is not using a URDF and their model is pretty good. It's just that you cannot compensate for everything.
Your signal should be much stronger than the gravity compensation in any case. |
Sorry for the misleading expressions. I wanted to say that the joint velocities are zero when launching the torque controller so that the gravity compensation was not affected by initial movement of the robot.
Thank you for the reminder. Previously I suppose KUKA also took Coriolis and centrifugal into account.
It is the case. I cannot adjust the performance of gravity compensation by modifying the URDF accordingly. |
I met some guys from Stanford who visited about 50 points in the workspace and recorded the external torques reported by KUKA. Since there shouldn't be any if the robot is undisturbed, this tells you how much it is off. Before doing that, they saw the same behavior that you are experiencing. They also had a quite good connection to KUKA people, so I am sure they talked to them about this and apparently this is still the solution of the Stanford lab. |
Thank you for sharing this story! It made me believe that we are not alone encountering this weird behavior and also shed light on how it can be solved. |
We typically run a Cartesian impedance controller with iiwa_ros. Then it is not that apparent, except if we completely disable the stiffness. |
Thank you again for sharing this toolbox, which seems to be a well-designed impedance controllers for manipulator's control. We will follow it later if we find it useful for our study. Just think of another question using |
Yes, you are configuring KUKA's joint impedance controller
Not really. Once the FRI connection is built up, only joint position references and joint effort references are sent from the ROS side. There is the code around grl that allowed to configure things on the robot side with a different channel. I spent some time with it in 2020, but did not make it work before I opted for another solution. It seems like the repository got abandoned when the PhD student left. |
Thanks! But what is the reference joint position for KUKA's joint impedance controller? Am I able to check and modify this value? Are there also default damping gains for that joint impedance controller? And further, if I implement another controller and publish torque signal, I wonder if the robot will receive a compound torque command of default gravity compensation + default joint impedance control + user's control? |
I assume so. That is on the KUKA side. You should have received some documentation for their Java API
FRI allows users to overlay KUKA's control with custom references. And this is what is sent from the ROS side with This means that if some stiffness for that joint impedance controller is defined, then it would output a torque signal as well. When we do torque control like in the Cartesian impedance controller repo we typically do not want that the KUKA controller to interfere, so we set the stiffness to 0. The gravity compensation would always be applied and the it's gravity compensation + user torques |
Glad to know that I may have control over the reference joint position for KUKA's joint impedance controller. May you please explain this operation in a bit more detail? Some questions are listed below for example
It is very likely that we will also set the stiffness to 0 so as to avoid interference between KUKA's controller and our custom controller. I want to play with KUKA's stiffness gains and its reference joint position mainly because the robot didn't behave as we expected when I gave non-zero stiffness: the robot moved rapidly to an unknown configuration and incur safety shutdown (while with 0 stiffness the robot seems to be a bit normal). So there should be something wrong such as incorrect configuration from us or mechanical failure of one joint, etc. Hope I can figure them out before they ruin the results in the future. |
According to the instructions on this repository, to launch the robot, the application is selected on the smartpad and the command
roslaunch iiwa_driver iiwa_bringup.launch
is run in the terminal. However, when I do that, and selectTorque
(the other options arewrench
andposition
) on the smart pad, the robot suddenly starts moving very fast to a configuration I have no idea what it is. I expected the robot to stay in its current pose. Am I missing something or is there a solution to this?The text was updated successfully, but these errors were encountered: