Skip to content
Carlos Agüero edited this page Jan 17, 2020 · 1 revision

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, docker
  • Description of programming skills: python (medium-high level)
  • 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, knowledge of robotics concepts

  • Description of programming skills: HTML/CSS/Javascript, 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.

Actor support on Ignition

  • List of prerequisites: Experience with Linux and version control
  • Description of programming skills: C++, computer graphics
  • Difficulty level: Medium
  • List of potential mentors: Louise Poubel
  • Detailed description: Gazebo is being migrated to Ignition Robotics, which is a refactor of Gazebo's source code, breaking it into smaller reusable libraries and making them more powerful and flexible in the process. This project is about migrating skeleton animation, i.e. actors, so they can be loaded into Ignition Gazebo. The work will involve making sure that Collada skins and animations, as well as BVH animations, are loaded and animated correctly using SDFormat, Ignition Rendering and Ignition Common.

MoveIt! Projects

Collision Detection Improvements and Optimization

  • List of prerequisities: ROS

  • Description of programming skills: C++

  • Difficulty level: Medium-high

  • List of potential mentors: Felix von Drigalski, Bryce Willey

  • Detailed Description: Collision detection in MoveIt is lacking many useful and necessary features for many robotic applications including:

    • the ability to dynamically change the large parts of the kinematics of the world (i.e. picking up a tray with many items would attach all of those items to the robot, not just the tray).
    • optimizations to the collision checking process itself to improve performance (cache/scene reconstruction improvements, convex-convex collisions, continuous collision detection)
    • Integration with different collision checking libraries, such as Bullet

    Many of these improvements exist in the tesseract library, and can be ported to MoveIt.

Adding More Motion Planning Libraries

  • List of prerequisites: ROS, some motion planning background
  • Description of programming skills: C++
  • Difficulty level: Medium
  • List of potential mentors: Bryce Willey
  • Detailed Description: MoveIt was designed to be highly plugin-based and is able to support many different planing libraries, as seen with last year's GSOC addition of STOMP and CHOMP. A next good candidate to be added to MoveIt is the TrajOpt planner. The changes made in the collision checking project (see above) would allow the TrajOpt planner to be added to MoveIt.
    • Assist with TrajOpt critical features in collision checking, including convex-convex collisions and continuous collision detection.
    • Add TrajOpt as a library to be used in MoveIt.
    • Add adapters that allow TrajOpt to post-process paths produced by other planners.
    • Add TrajOpt to the Moveit tutorials

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:

  • Sending an email to: gsoc@osrfoundation.org , with the subject line: GSoC Application, and
  • Submit your application through the Google GSoC web site Your application should include the following information:

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.