GSoC 2020: Questions regarding project ideas

Hi MoveIt Community,
my name is Sebastian and I am highly interested in contributing to MoveIt! as part of GSoC this summer. I am studying the Master of Mechatronics and Information Technology at the Karlsruhe Institute of Technology in Germany. My field of specialization is robotics.
On the MoveIt project website I saw two open future projects that draw my interest:

  • Improved Integration with ROS-Controls and Controller Switching
  • Add Support for MoveIt Task Constructor to MoveIt 2
    I’d like to ask where I can get further information on both? Or what would be the appropriate way to discuss these tasks in more detail?

Furthermore, I am very interested in closed-loop control related topics. I saw on the MoveIt website at the road map for MoveIt2 that there are plans to integrate “reactive, closed-loop control” as part of the realtime support milestone.
Is there a chance to do some work on that topic as a GSoC project? I have seen that there is currently some activity in the ros2_control project and I would be interested for example in working on the implementation of an interface between ros2_control and MoveIt2. Do you guys know if that could be a possible project and if there are any mentors interested?
Thanks in advance for your help!

3 Likes

This could certainly be a project. Can you say a bit more about your prior experience with ROS/MoveIt (if any)? @AndyZe and @ct2034, do you have any advice on what this project could look like?

3 Likes

Thank you for your reply!

I have been working as a research assistant in software development for robots since 2016 and gained substantial experience in working with ROS (All projects I worked on were with ROS). Besides, I am familiar with using ros_control and developed a few custom controllers, one of those as part of my bachelor thesis.

I have some experience with MoveIt, using it in a few projects mostly with the Move Group C++ Interface.

Last November, I took a practical course at my university where I gathered some experience in ROS2. My task was mainly to evaluate the current status of ROS2 for usage in robotic use case demonstrations and to migrate some ROS packages to ROS2.

Additionally, during a six months internship in 2018/19 I got introduced to a professional software development workflow and I am used to working with git. During this internship I also contributed to the C++ library “libfranka” (https://github.com/sjahr).

1 Like

I haven’t used ROS2 much myself but some ideas are:

(1) Lots of topics from the ros2_controllers roadmap: Announcing the ros2_control working group

(2) Implement a ros_control controller that can accept streaming commands or trajectory commands, without the need to switch controllers. Similar to this PR but hopefully better. We would need to get the ros2_control maintainers onboard with this approach, though. It’s unclear if something like this would be accepted because it’s very different from the current paradigm. May involve splines or polynomial fitting. https://github.com/ros-controls/ros_controllers/pull/383

(3) Create the new version of jog_arm in ROS2. This is a local planner that plans at a very high rate (>100’s of Hz) so you can stream commands to the robot for teleop or compliance. It should probably be integrated with the MoveIt API better.

(4) Porting MoveIt Task Constructor sounds fine, too, but I wouldn’t be the ideal mentor for that.

1 Like

To spew another idea:

  • A C++ interface for ros2_control, to skip the exchange of messages/services
1 Like

These ideas sound really exciting. I would be interested in working on (3). Would you be a mentor for such a project? I think I need the weekend to take a deeper look at the current version of the jog_arm and afterwards I would like to discuss the task more detailed with you before submitting a proposal.

What would be an appropriate way to do so? Should I send you an email or discuss it in this topic (or a new one since this ones name is rather generic)?

Although I am interested in (3) the C++ interface for ros2_control sounds also quite interesting but I think I have not got the idea yet. Which message/service exchange would you like to skip? Between a node which generates the command value and the a controller, so you could set this value without possible network delay through service or topic interface?

1 Like

Yep, that’s exactly it. It’s currently done with a service call, like

rosservice call /controller_manager/switch_controllers … …

At least in ROS1, not sure about ROS2

1 Like

According to this issue there is currently no implementation to switch controllers during runtime but I think it will to be integrated as part of their roadmap milestone “Support for ros_control in ROS2” till May.

What could be interesting in ros2_control to solve the controller switch problem is the planned new feature to chain controllers. If implemented as described it would be possible to interconnect multiple controllers to a more complex structure. I don’t just think of cascaded systems but the possibility to create logic circuits of ros_controllers (which could be seen as transmission elements) with other ros_controllers serving as logical gates.

For example as alternative to a situation depended controller switch, two default controllers (such as a joint-trajectory- and a velocity controller) could be started and their output routed to a third “logical gate” controller. In this case this controller serves as a switch which simply forwards the joint-trajectory controllers output as long as there is no output from the velocity_controller and otherwise forwards the velocity_controllers output. This approach shares some similarity with the cob_control_mode_adapter but instead of using a controller switch based on the input, the adapter itself is a controller.
What is your opinion of that?

1 Like

I think there would be some subtleties that would make that difficult. When you switch, how do you avoid discontinuities?

Yes, I see your point. A quite simple solution would be to use a simple filter for the output of the third controller like

send_command = param_a * last_step_command + (1 - param_a) * current_step_command

But I guess that leads to other problems regarding latency and shifting from desired values. Maybe it could be overcome with a more complex interpolation algorithm.

How did you overcome this problem? I took a look at your code in the your pull request for the TrajOrJogController and as far as I understood you set the streamed velocity commands directly in the joints_handle:

  if ( !allow_trajectory_execution_ )
  {
    JointTrajectoryController::preemptActiveGoal();
    std::vector<double> & command = *commands_buffer_.readFromRT();
    for(unsigned int i=0; i<n_joints_; ++i)
    {
      JointTrajectoryController::joints_[i].setCommand(command[i]);
    }
  }

Are discontinuities handled by the HW interface itself?

I just stopped the robot momentarily when controller type switched. Yeah, there would be better ways to do it.

Another idea (not related to ros_control at all) would be an RViz GUI plugin for MoveIt planning/execution. This would need to be rewritten to use moveit_cpp since that’s all that’s available on ROS2 right now (no move_group_interface).

Hi MoveIt Community,
I am Utkarsh, currently a pre-final year Mechanical Engineering major currently enrolled in the IIT Roorkee, India. I am very much interested in contributing to MoveIt! as a part of GSoC 2020. I am interested in the field of Robotics and Control, and I also love to work in fields related to Deep Learning.

I came to know about the project on TrajOpt Integration and about the works on Trajectory Optimization Methods. The description of the project intrigued me a lot to know more about the TrajOpt framework and the ways in which MoveIt handles the kinematic chain.

I understand the improvement based on the implementation of collision cost but I will be grateful if @ommmid can describe a little more about the progress of your contribution.

Also, I had an overview of the MoveIt implementations of CHOMP and I realized that similar implementations of TrajOpt framework can be contributed from my end.

I would also like to thank the community to include the custom cost function in the implemented methods. I realized a similar need during my current project on optimal trajectory generations for a custom bipedal robot. I am trying to figure out something like an integration to the motion planning field objectives (like including it as a separate cost function code).

I am using MoveIt! for my projects in order to perform basic simulations for the motion planning algorithms I try to implement (due to availability of a lot of robot models). Can anyone guide me with the thought of including reinforcement learning based simulations and implementations with the MoveIt! framework based on the availability and interest of mentors? That would be a great suggestion for me even for my future contributions to the community.

Thank you in advance.
Sincerely