Potential Code Sprints and Future Projects




This page lists potential projects that would greatly benefit the MoveIt project. This is by no means an exhaustive list, but is meant to serve as a discussion starting point for code sprints and other efforts.

If you would like to contribute to these efforts, have a look at the related Github issues and ask for clarifications on Github or Discord.

Feel free to contact PickNik Robotics for further information or sponsorship opportunities.

Note: If you are looking at this list for a Google Summer of Code application, you should become familiar with the issue and codebase before starting the project in order to succeed within the new 10-week time frame.

Table of Contents

  • Prerequisites: ROS, some motion planning background
  • Programming skills: C++
  • Difficulty: Medium
  • Potential mentors: Omid Heidari
  • Description: TrajOpt is a motion planning framework from UC Berkeley for generating robot trajectories by local optimization. Integration of TrajOpt into the MoveIt framework would require API changes to how MoveIt stores and accesses information about the kinematic chain and changes to the MoveIt collision checking API to support integration with the Bullet collision checker for convex to convex contact checking.

    Some initial work was performed by Omid Heidari during an internship at PickNik in 2019, but more work is needed to cleanly integrate the framework with MoveIt. The collision checking interface for MoveIt has changed significantly. Implementing a collision cost using this unified interface for collision checking backends is one of the major remaining issues.

    MoveIt also contains implementations of other trajectory optimization methods: STOMP and CHOMP. These implementations all contain their own way of computing trajectories, but share a lot of common ideas, such as using a signed distance field to compute collision cost. Refactoring this code to use common code for the same ideas would help in making the code more maintainable. It is also a first step to making it possible to provide callback hooks for a user-configurable trajectory cost function that can be used with any of the trajectory optimization methods, which is currently not possible.

Simultaneous Trajectory Execution

  • Prerequisites: some ROS
  • Programming skills: C++
  • Difficulty: Medium
  • Potential mentors: -
  • Description: MoveIt currently only supports the execution of one robot trajectory (although the trajectory can involve multiple planning groups, e.g. two arms). However, to run e.g. a robot workcell efficiently, each robot arm has to move independently.

    The goal of this project is to allow multiple trajectories to be started, executed and stopped independently from one another. The main difficulty is that the arms may collide with one another, so additional checks will be necessary, such as:

    • Do two trajectories intersect at all?
    • Does the next position in a trajectory collide with another robot arm?
    • What are the next positions of the other currently active robot arms?
  • Related Github issues: 2287

Grasp Pose Generation

  • Prerequisites: ROS
  • Programming skills: C++, Python
  • Difficulty: Medium
  • Potential mentors: Mark Moll
  • Description: Improve grasp pose synthesis within MoveIt and the MoveIt Task constructor. Current grasp synthesis algorithms pair deep neural networks and sampling point clouds, see GPD and Dex-Net. An initial effort using the previous grasping methods includes a demo and a tutorial. Further work is required to harden this implementation, see PR 196.

  • Related Github issues: 188

Tutorial for multiple robot arms

  • Prerequisites: ROS
  • Programming skills: C++, Python
  • Difficulty: Low-Medium
  • Potential mentors: -
  • Description: While there are some ROS Answers posts and examples floating around, there is no definitive resource on how to set up multiple robot (arms) with MoveIt. The goal of this project is to write a tutorial that should become the reference. This project is a good preparation for the one above.

  • Related Github issues: 465

Scene graph support

  • Prerequisites: ROS
  • Programming skills: C++
  • Difficulty: Medium-High
  • Potential mentors: -
  • Description: The planning scene in MoveIt is currently represented as a flat list of transforms from the origin. In this project, the planning scene should be extended with a scene graph or kinematic tree, so that it allows e.g. picking up a tray or rack with other items in/on it, or the dynamic attachment or removal of a hand to a robot arm.

    As a blueprint for the implementation, it is worth looking at Tesseract (forked from MoveIt) and TMKit (no ROS support).

  • Related Github issues: 202, 202

Creation of a Benchmark Suite for Evaluating MoveIt Performance

  • Prerequisites: ROS, some motion planning background
  • Programming skills: C++
  • Difficulty: Medium
  • Potential mentors: Mark Moll, Henning Kayser
  • Description: It would be a set of benchmark tasks to serve as examples, and to run as part of continuous tests. For this, we need to identify and implement standard tasks at varying levels of difficulty that can be achieved with several robots for which a MoveIt configuration is available. E.g.:
    • Moving to a goal position in uncluttered space
    • Picking and placing items from/in cluttered shelves
    • Following paths with orientation constraints
  • Related Github issues: 2124

MoveIt 2 Tutorials

  • Prerequisites: ROS, some motion planning background
  • Programming skills: C++
  • Difficulty: Medium
  • Potential mentors: Henning Kayser, Mark Moll
  • Description: One of the reasons MoveIt is so popular is that the tutorials make it very easy to get started. MoveIt 2 has been released and the tutorials needs to be updated for this new version. This can be a project for multiple people, each taking on one or more tutorials.

Improved Integration with ROS-Controls and Controller Switching

  • Prerequisites: ROS, some background in control theory
  • Programming skills: C++
  • Difficulty: Medium
  • Potential mentors: Andy Zelenak, Robert Haschke
  • Description: Utilize low-level controller switching (position/velocity/force-torque) during execution of MoveIt plans. Remove the deprecated ROSControlInterface plugin. Improve the ability to trigger other events during trajectory execution.

Port Inverse Kinematic Solver Libraries to MoveIt 2

  • Prerequisites: ROS, basic understanding of inverse kinematics
  • Programming skills: C++
  • Difficulty: Medium
  • Potential mentors: Andy Zelenak, Henning Kayser
  • Description: There are several Inverse Kinematics libraries that need to be ported to MoveIt 2. Prime candidates are TRAC-IK.
  • This ROS2 TRAC-IK port could be linked or worked upon if it isn’t up to standards.

MoveIt Wrapper for Reinforcement Learning

  • Prerequisites: ROS, MoveIt, reinforcement learning
  • Programming skills: C++
  • Difficulty: Medium
  • Potential mentors: Andy Zelenak, Mark Moll
  • Description: Conduct a brief survey of reinforcement learning methods that could be implemented over the summer. Choose one and implement it. One possibility is described in “Operator training for preferred manipulator trajectories” by Sharp, Horn, & Pryor.

Mobile Base Integration

  • Prerequisites: ROS, some motion planning background
  • Programming skills: C++
  • Difficulty: Medium
  • Potential mentors: Mark Moll, David Lu!!
  • Description: The goal is to provide a standard way for integrating mobile base into move group that typically handles arms. While there’s a non-standard way to incorporate holonomic drive that requires modifying your robot model (example), customizing your robot package for such a common functionality is not ideal at all. We also extend to cover non-holonomic drive robots. This is an FAQ among MoveIt users. Some initial work for this is currently underway for the Hello Robot Stretch platform, but more work is needed to generalize to other types of mobile bases.