-
Notifications
You must be signed in to change notification settings - Fork 274
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
Make homing callable #227
Comments
What about creating a new controller for the purpose of Homing? That way the stop / start of ros_control would be taken care of. The issue would be which hardware_interface to use; I was tempted to to use I'm still open to the above, but it might be worthwhile to consider creating a new hardware_interface with a different datatype at its core, either bool for start_motion, or some kind of uint / enum for sending specific commands. Errors / state during homing could still be received through the JointStateInterface / Diagnostics. |
I would not mix these concepts. Controllers are meant to be switchable, but homing is a one-off process. |
hm. What about systems with relative encoders? I could see those needing to be re-homed after an e-stop or some other error (like a hw crash). |
That's exactly the target use case for this issue :) |
So you're imagining an additional rosservice ( |
After looking into this a bit I still believe that creating a new controller is a more flexible way to implement this behavior. In our robot there are edge cases that could be caused by a malfunction that we would need to recover from by re-homing. For this we'd need to leave portions of the robot active and still controlled by ros_control while homing the affected joints. It also seems that you're suggesting shutting off ros_control and Homing all home-able joints at once, which in our robot is also an issue as the design has parts colliding in the all joints homed position. By implementing homing as a controller we can home a subset of joints, adjust position, then home the remaining joints. Halting / Cancellation are all capabilities described in DS402's Homing. |
Summary of Work so farI implemented a controller based version of executable homing and it was less than ideal. We use ros_canopen and gazebo_ros_pkgs to control a robot and simulate a robot. While I got an implementation that worked quite well for the robot, I ran into issues that would have required me to implement fake transmissions to get the controllers to work with gazebo_ros_pkgs. I think there is value in potentially having a ros_control HandleType that can pass a bool and/or uint enum for passing non-numerical command values, but I imagine that would be a contentious feature. If that existed this would have been straight-forward and worked quite well. As it stands, blocking this feature until that gets implemented isn't a good idea. Below are some issues I ran into for posterity:
Going forward:Because of our robot I still wish to find a solution that supports keeping ros_control running for non-homing or non-associated joints. The obvious solution is a service, but:
So I'm currently leaning toward an ActionServer. |
The text was updated successfully, but these errors were encountered: