Skip to content
Carlos Agüero edited this page Mar 18, 2019 · 50 revisions

Overview

This document describes a list of potential ideas created for the 2019 Google Summer of Code. However, the ideas are open to everyone with interest on collaborating, and OSRF is open to new ideas. Feel free to use our application template below to request your interest in some of the projects. If you would like to suggest new projects please message @HelloWorld at Gazebo Community.

The following list shows a set of ideas that can extend the functionality of some of the open source projects led by OSRF. The ideas are organized into three main projects: Gazebo, ROS and MoveIt!.

Gazebo is a multi-robot simulator for outdoor environments. It is capable of simulating a population of robots, sensors and objects, but does so in a three-dimensional world. It generates both realistic sensor feedback and interactions between physically plausible objects.

ROS (Robot Operating System) provides libraries and tools to help software developers create robot applications. It provides hardware abstraction, device drivers, libraries, visualizers, message-passing, package management, and more.

MoveIt! is state of the art software for mobile manipulation, incorporating the latest advances in motion planning, manipulation, 3D perception, kinematics, control and navigation. It provides an easy-to-use platform for developing advanced robotics applications, evaluating new robot designs and building integrated robotics products for industrial, commercial, R&D and other domains.

The link between all projects is their open source nature and its relationship with robotics. Browse through the list and do not hesitate to contact us if you wish to participate in any of the projects. Share with us your thoughts and ideas on any future improvement or project you may have.

Gazebo projects list

For a general introduction on how to start contributing to Gazebo, check out the guided tutorials! If you have any technical questions feel free to ask them at Gazebo Answers or message @HelloWorld at Gazebo Community.

Gazebo visual plugin for RobotX competition

  • List of prerequisites: Linux, mercurial
  • Description of programming skills: C++
  • Difficulty level: Medium
  • List of potential mentors: Brian Bingham, Carlos Agüero
  • Detailed description: This project involves implementing a GUI plugin for the VRX (Virtual RobotX) project. The GUI plugin will overlay over the Gazebo rendering window and will show interesting details of the current mission. Example of these details could be the current task, number of points, penalties, as well as other visual details useful for debugging.

Gazebo Developers Tool

  • List of prerequisites: Linux, mercurial, software design
  • Description of programming skills: python
  • Difficulty level: Medium
  • List of potential mentors: Jose Luis Rivero
  • Detailed description: The project consists on the creation of a command line utility that allows Gazebo/Developers and users and easy access to a working environment for developing Gazebo (a complex application with many dependencies, different supported versions in different platforms, interactions with other frameworks, use of GPU, ...). The idea would be to use virtualization (docker) to provide to the user a ready to go environment for developing or testing.

The big gazebo documentation index

  • List of prerequisites: mercurial, basic robotics concepts

  • Description of programming skills: HTML/CSS, web frameworks

  • List of potential mentors: José Luis Rivero

  • Detailed Description: the gazebo project has a good documentation section which includes dedicated tutorials to cover specific user actions and Guided tutorials for beginner or intermediate users. Gazebo also has a QA site which is used by the community to document specific issues or ask for help. When users look for specific topics in search engines links can lead to gazebo tutorials, gazebo tutorials specific section, gazebo answers, ros answers, github sites, doxygen documentations, external blogs, etc.

    The idea of the project is to create a big documentation index that can be use as main reference to look for all gazebo specific topics and find quick links to different places where the relevant information is hosted. This does not try to replace our categorize or guided tutorials indexes but give another way to quickly access to documentation, specially generating pages that can be search using browser quicksearch mechanism. The community should have an easy way to edit or propose changes or new links to the site leading to a collaborative maintenance.

    There is a minimal web stub implementing part of the idea.

Sensor data visualization

  • List of prerequisites: Linux, mercurial, basic computer graphics knowledge
  • Description of programming skills: C++
  • Difficulty level: Medium
  • List of potential mentors: Ian Chen
  • Detailed description: The rendering component of Gazebo has been moved to its own library, Ignition Rendering, and is now part of the Ignition Robotics project. The works involves porting a list of sensor visualization features from Gazebo to Ignition Rendering. These include laser, sonar, wrench, contact visuals and more. The student will create these visuals in Ignition Rendering as loadable plugins, implement any features needed to create these visualizations, and demonstrate the results using simulated sensor data generated by Ignition Sensors.

Add support for loading more mesh formats in Gazebo

  • List of prerequisites: Linux, mercurial
  • Description of programming skills: C++
  • Difficulty level: Medium
  • List of potential mentors: Ian Chen
  • Detailed description: Gazebo currently supports loading collada, obj, and stl mesh files. The goal of this project is to scope of this project is to extend the mesh loader to support other popular mesh formats like glTF2 and FBX. The scope includes first evaluating alternative open source mesh loading libraries out there (e.g. assimp), and determining the best path forward to adding the new mesh loading capability into Gazebo. The student will write unit and integration tests for the new features added, and create a sample world demonstrating loading of various mesh formats.

Migrating Gazebo plugins to ROS2

  • List of prerequisites: Experience with Linux and Git, interest in robotics
  • Description of programming skills: C++, ROS 2, Gazebo's API
  • Difficulty level: Medium
  • List of potential mentors: Louise Poubel
  • Detailed description: Gazebo ROS packages (gazebo_ros_pkgs) provides a ROS interface to Gazebo simulations, so developers can test their ROS code in a virtual simulation instead of a physical robot. The main packages have been migrated to ROS 2, but there are several plugins which still need to be ported. An ideal candidate would be willing to get up to speed with the basics of ROS 2 and Gazebo and the functionality offered by gazebo_ros_pkgs for ROS 1. The ROS 2 migration contribution guide provides guidelines specific for contributing with this project.

MoveIt! Projects

Improved Integration with ROS-Controls and Controller Switching

  • List of prerequisites: ROS, some control theory background
  • Description of programming skills: C++
  • Difficulty level: Medium
  • List of potential mentors: Dave Coleman, Michael Görner
  • Detailed description: Utilize low-level controller switching (position/velocity/force-torque) during execution of MoveIt! plans. Create new window on MoveIt! Setup Assistant for automatically generating interfaces to low level controllers from MoveIt!. Improve the ROSControlInterface plugin. Documentation on how to combine the components.

MoveIt! Setup Assistant 2.0

  • List of prerequisites: ROS
  • Description of programming skills: C++
  • Difficulty level: Medium
  • List of potential mentors: Dave Coleman, Michael Görner
  • Detailed description: The Setup Assistant is a quick-start wizard for taking an arbitrary robot and configuring it to work with MoveIt! for motion planning. A new version of this assistant would include:
    • New grasping screen for setting up end effectors: align axis with z-direction, open/close parameters, etc
    • New perception screen for using laser scanner point clouds: ability to easily configure a XBox Kinetic, etc for use with a robot planning scene, possibly including calibration
    • More GUIs for saving and loading various settings that are currently hidden in text files
    • Parse existing text files (launch/config/package.xml) files and handle user-edits of these files as diffs

Perception Pipeline Improvements

  • List of prerequisites: ROS, some robotic perception background such as OpenCV or PCL

  • Description of programming skills: C++

  • Difficulty level: Medium

  • List of potential mentors: Dave Coleman, Michael Görner

  • Detailed description: MoveIt! is not a perception library, but does come with support for using octomaps with point clouds. This functionality has not been well maintained and needs extensive improvements:

    • Improve speed of plugins, fix locking issues
    • Create tutorials and documentation for using this functionality
    • Add support for object segmentation, table detection, etc
    • Possible integration of Neural Networks for image recognition

Create Default Grasping Library

  • List of prerequisites: ROS

  • Description of programming skills: C++

  • Difficulty level: Medium

  • List of potential mentors: Dave Coleman, Michael Görner

  • Detailed description: MoveIt! severely lacks a good grasping library for generating candidate object grasps during manipulation. The old GraspIt solution is deprecated and nearly impossible to use. Currently MoveIt! users create their own, or hard code simple heuristics. This task could include:

    • Investigating available grasp planners and choosing the best one to support out of the box for MoveIt!
    • Possibly use the machine-learning-based grasp generator Agile Grasps
    • Improve tutorials and documentation for grasping in MoveIt!

Add More Motion Planning Libraries

  • List of prerequisites: ROS, some motion planning background

  • Description of programming skills: C++

  • Difficulty level: Medium

  • List of potential mentors: Dave Coleman, Mark Moll

  • Detailed description: MoveIt! was designed to be highly plugin-based and originally supported 3 planning libraries. Today that number has shrunk to basically 1. There are many good alternative motion planning libraries that could be (re)added to MoveIt!, including:

Improve Warehouse Support

  • List of prerequisites: ROS

  • Description of programming skills: C++

  • Difficulty level: Medium

  • List of potential mentors: Michael Görner, Dave Coleman

  • Detailed description: MoveIt supports storing Constraints, PlanningScenes and RobotStates in a database, termed "warehouse" within MoveIt. This interface was recently changed to support plugins, but currently there are no plugins available that compile/work with a standard linux distribution out of the box.

    • Implementation of a warehouse-plugin that works with a standard database system that is supported in major Linux distributions
    • Create tutorials and example code that demonstrates how to use the warehouse interface

MoveIt-OMPL Planning Interface

  • List of prerequisites: ROS, some motion planning background

  • Description of programming skills: C++

  • Difficulty level: Medium

  • List of potential mentors: Dave Coleman, Mark Moll, Michael Görner

  • Detailed description: Currently, MoveIt supports the OMPL planning library via a C++ based binding system in the package ompl_interface. This should be deprecated in favor of a plugin-based system, that eases configuration of different planners within OMPL. In effect, the plugin allows new planning algorithms derived from the abstract Planner API in OMPL to be loaded via a yaml file. It also allows users to easily create new planning configurations for existing planning algorithms in OMPL via such a yaml. Most of the work for this is already done and has been used extensively in ROS Indigo. This is a great project for someone who wants to better understand the connection between MoveIt! And OMPL.

    • More information can be found here
    • The new system needs to be documented in tutorials
    • It would be nice if, as a proof of concept, some additional basic planning algorithms could be implemented as a plugin. Ideally, this would include at least one algorithm that is not sampling-based, just to demonstrate that this can be done

Improved MoveIt! Gazebo Integration

  • List of prerequisites: ROS, Qt

  • Programming skills: C++

  • Difficulty level: Medium

  • List of potential mentors: Dave Coleman, Nate Koenig,

  • Detailed description: A common desire of MoveIt! users is to easily connect their arm motion planning robot to Gazebo, and vice versa. Currently this setup is time consuming and overly complicated. The primary integration path is through a previous intern effort using the ROS Control layer, but automating this setup could greatly increase user adoption. A user interface has already been developed for MoveIt! that allows beginners to quickly get started. Adding new functionality to that UI to auto-generate the necessary configuration would greatly improve the usability of MoveIt!, ROS Control, and Gazebo together. The intern responsible for this project will learn a great deal about robotic simulation, motion planning, and control. They will become familiar with state of the art open source robotics software while making a huge contribution back into the Robotic Operating Ecosystem.

  • More Information: MoveIt! is state of the art software for mobile manipulation, incorporating the latest advances in motion planning, manipulation, 3D perception, kinematics, and control. It provides an easy-to-use platform for developing advanced robotics applications, evaluating new robot designs, and building integrated robotics products for industrial, commercial, R&D and other domains. MoveIt! is the third most popular package in the Robotic Operating System (ROS) and is the most widely used open-source software for manipulation. MoveIt! has been successfully integrated with over 65 robots including the PR2, Robonaut, and DARPA's Atlas robot. Gazebo is a 3D dynamic simulator with the ability to accurately and efficiently simulate populations of robots in complex indoor and outdoor environments. While similar to game engines, Gazebo offers physics simulation at a much higher degree of fidelity, a suite of sensors, and interfaces for both users and programs. Typical uses of Gazebo include: testing robotics algorithms, designing robots, performing regression testing with realistic scenarios.

ROS 2 Projects

Support creating Windows packages for ROS 2 / ament in Bloom

  • List of prerequisites: CMake, Windows
  • Description of programming skills: Python
  • Difficulty level: Medium
  • List of potential mentors: Scott Logan, Steven! Ragnarök
  • Detailed description: Bloom is the release creation tool for the ROS ecosystem. From a standard package manifest format bloom can generate debian or rpm metadata for building binary packages on different Linux distributions. In order to bring support for modular binary packages Windows and possible future target platforms (Formulae for Homebrew, PKGBUILDs for Arch Linux, etc) we've come up with a refactoring plan for Bloom which the participant will be implementing and iterating on. The project will be carried out in three phases:
    • Create a proof of concept generating Vcpkg ports or Chocolatey packages for ROS 2, borrowing code from the existing support for Debian.
    • Refactor Bloom internals to re-use distribution agnostic functionality between all distribution generators.
    • Integrate the proof of concept work into the refactored mainline.
    • If time allows, implement generators for additional platforms.

Integrating Bloom and Superflore

  • List of prerequisites: Familiarity with ROS rosdep and rosdistro databases. Some experience with OpenEmbedded, Gentoo, or Debian packaging for validating results.
  • Description of programming skills: Python
  • Difficulty level: Novice
  • List of potential mentors: Scott Logan, Steven! Ragnarök, Tully Foote
  • Detailed description: Bloom is the release creation tool for the ROS ecosystem and Superflore is a tool which creates release data for platforms without official bloom support. Although they share responsibilities there is currently no code shared between the two projects. A participant in this project would migrate the individual template generation code for superflore's supported platforms to Bloom, and then extend bloom so that it's template generation is accessible via an ergonomic Python API which can be used from Superflore. At the end of the project both Bloom and Superflore will support creating releases for the union of platforms previously supported by each tool individually while sharing much of the functionality.

Configuration management / scripted provisioning of MacOS and Windows hosts for ROS 2 infrastructure

  • List of prerequisites: Experience administering Mac or Windows computers
  • Description of programming skills: Chef or Ruby
  • Difficulty level: Novice
  • List of potential mentors: Steven! Ragnarök
  • Detailed description: The ROS 2 team utilizes continuous integration to ensure we maintain compatibility on our supported platforms Ubuntu Linux, macOS, and Windows. Our Linux hosts make heavy use of containers to test different releases in isolation but for other platforms new machines are provisioned by hand. Which makes both re-imaging and updating machines a laborious process. A participant in this project will work on creating Chef recipes to automate the configuration of fresh macOS and Windows machines to comply with our ROS 2 Developer source installation instructions and Jenkins agent configuration. This is an excellent project for any candidate who has an interest in system operations, DevOps, or infrastructure development.

Relevant resources

Gazebo

Gazebo web page

Gazebo tutorials

Gazebo Q&A

Gazebo mailing list

Bitbucket (code and issue tracker)

ROS

ROS web page

ROS tutorials

ROS Q&A

ROS mailing list

List of code repositories

MoveIt!

MoveIt! web page

MoveIt! tutorial

MoveIt! support

Github (code and issues)

Application template for students

If you meet the general requirements and are interested in working on one of the OSRF projects during the Google Summer of Code, you can apply by:

Contact information

  • Your name
  • A phone number
  • An email address where we can reach you for daily communication

Coursework

Please list relevant technical courses you have taken. In particular, we are interested in your background in:

  • Robotics
  • Software engineering
  • Computer graphics
  • Physics simulation

Experience

Please list any experience you’ve had in software development, including relevant class projects, internships, undergraduate or graduate research, and/or contributions to open source projects. For each example, please include a brief description of the overall project along with the specific contributions you made and when you made them.

In addition to the above information, we are interested in concrete examples of your work, which may include:

  • Sample code: please send an example of code you have written that you are proud of; be prepared to answer questions about it.
  • Publications: if you have participated in undergraduate or graduate research, please include a copy of any relevant publications.
  • Specialized skills: if you have experience/skills in particular areas that you believe would be useful to one of our projects, please let us know.
  • Personal website: if you have a website that discusses your research or other projects, please include a link.
  • References: names and contact information for people you have worked with who can recommend you.

Statement of intent

In a paragraph or two, describe your interests and background. Please tell us which of the project ideas you are interested in and why you’d like to work on it. If you have a proposal for a project not included on our list, please describe the idea clearly and provide a motivation for the work and a timeline for how you plan to accomplish it.

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.