Skip to content

Conversation

@jellehierck
Copy link

Hi!

For my group it was useful to have a package template for ros2_control controllers. I have started implementation of this to create a controller package and showcase some useful tricks, which became super simple with ros2-pkg-create!

I created this draft PR to let you know I am working on this and give updates on the progress. I am also curious if you would be interested to merge this alongside the other templates.

The controller which is generated is a joint impedance controller meant for a Franka FR3 robot, a 7-DoF robotic arm. The controller will take in a position reference and generate a torque output based on stiffness and damping parameters.

I currently have implemented:

  • Generation of a ros2_control controller including dependencies and a load test.
  • Generation of a launch and config file structures to easily include the controller into other projects.
  • Generation of real-time safe subscriber for reference commands from a topic (when the use_subscriber flag is used).
    • I did not yet implement the non-subscriber controller.
  • Generation of real-time safe publisher to output information to a topic (when the use_publisher flag is used).
    • I did not yet implement the non-publisher controller.
  • Generation of an additional custom controller messages package for the subscriber and/or publisher.
    • This additional interfaces package is always generated, should only be done if use_subscriber and/or use_publisher are set.
    • Or, alternatively, I could alter the control algorithm used to take in common_interfaces such as geometry_msgs/msg/Twist and geometry_msgs/msg/Wrench. But I decided to stick with joint impedance for now since that is a lot simpler to implement 😉.

And I also have some more stuff planned:

  • Update documentation with:
    • Examples of how to start the controller and use its features.
    • Examples of how to include the launch file(s) into other projects.
  • Integrating an action server to control the robot, similar to Nav2.
  • Upgrading to semantic components for hardware access instead of directly accessing the joint command interfaces.

Some stuff I am not sure about because of time constraints (any help would be super welcome 😄):

  • It would be nice to have a general robot URDF instead of relying on the franka_description package, but I did not look for a generally available robot description package. Also, it would require quite some refactoring of the code.
  • I did not look into the docker integration yet.

Let me know what you think!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants