Carlos Agüero edited this page Jan 2, 2019 · 38 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.

Umbrella Organizations

OSRF is an umbrella for the following organizations:

ROS-Industrial

ROS, an open-source project, provides a common framework for robotics applications. ROS is heavily utilized by the research community for service robotics applications, but its technology can be applied to other application areas, including industrial robotics. ROS capabilities, such as advanced perception and path/grasp planning, can enable industrial robotic applications that were previously technically infeasible or cost prohibitive.

The ROS-Industrial program:

  • Is supported by a community of industrial robotics researchers and professionals.
  • Provides a one-stop location for industry-related ROS software.
  • Possesses software robustness and reliability that meets the needs of industrial applications.
  • Does not replace any one technology entirely, rather it combines the relative strengths of ROS and existing technology, combining ROS high-level functionality with the low-level reliability and safety of an industrial robot controller.
  • Stimulates the development of hardware-agnostic software by standardizing interfaces.
  • Provides an "easy" path to apply cutting-edge research to industrial applications by using a common ROS architecture.
  • Provides simple, easy-to-use, well-documented application programming interfaces.

ROS2

ROS2 is the next generation of ROS, intended to improve on ROS1 while adding better support for autonomous vehicles, multi-robot configurations, inconsistent network connections, and many more things. ROS2 put out the first stable release in December 2017, and is now looking to expand the community and software ported to it.

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 plugin for RobotX competition

  • List of prerequisites: Linux, mercurial
  • Description of programming skills: C++
  • Difficulty level: Medium
  • List of potential mentors: Carlos Agüero
  • Detailed description: This project involves implementing a GUI plugin for the VMRC (Virtual Maritime RobotX Challenge) 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 in WebGL

  • List of prerequisites: Linux, mercurial, basic computer graphics knowledge
  • Description of programming skills: C++, Javascript
  • Difficulty level: Medium
  • List of potential mentors: Ian Chen
  • Detailed description: Gazebo has a WebGL-based client named gzweb that provides visualization of the simulation server in a browser. The project will require extending gzweb to provide basic visualization of sensor data using threejs, starting with camera and ray sensor data. The student will need to look into efficient methods for streaming data generated by the simulation server (C++) to the web.

Graphical interface for primitive collision shape generation

  • List of prerequisites: Linux, mercurial, 3D graphics

  • Description of programming skills: C++, Qt, Ogre

  • Difficulty level: Medium

  • List of potential mentors: Louise Poubel

  • Detailed description: Gazebo computes collisions between objects in a scene hundreds of times per second, and simulation performance is directly impacted by the complexity and number of collision shapes in the world. For that reason, it is good practice to use geometry primitives (box, cylinder and sphere) instead of complex triangle meshes for collision objects, and leave complex meshes for visualization purposes. However, defining primitives which nicely fit a complex shape can be a a tedious task to perform manually, and there isn't currently a widely available tool to help with this task.

    The goal of this project is to add a graphical interface to Gazebo's model editor where users can automatically generate primitive collisions that are a good approximation of a given complex mesh and then can manually tweak and refine remaining details. The student will come up with the user interface and implement it using Qt for the GUI and Ogre for the 3D interactions, as well as the algorithms for calculation of shapes based on triangle meshes.

    Here are some beginner issues which could help getting your feet wet:

ROS-Industrial Projects

MoveIt! Continous Collision Checking

  • List of prerequisites: ROS, experience with MoveIt!
  • Description of programming skills: C++
  • Difficulty level: Medium
  • List of potential mentors: Levi Armstrong
  • Detailed description: MoveIt! currently only checks for collisions at discrete steps in a planned trajectory. This has the downside that if the discretization is too large, then potential collisions may be missed when planning in tight or constrained environments. This project involves using the flexible-collision-library (FCL) to add continuous collision checking to mitigate collisions in constrained spaces.

Robot Work Cell Discovery

  • List of prerequisites: ROS
  • Description of programming skills: C++
  • Difficulty level: Medium
  • List of potential mentors: Alex Goins
  • Detailed description: Setting up a robot work cell often involves creating a URDF model of the environment in order to perform collision avoidance detection. This project will create a method for a robot to “discover” its work environment by using a 3D sensor attached to the end-effector. The robot should be able to intelligently explore and map its work environment to create a model of the world in order to operate in a collision free manner. This tool can be developed either using a simulation (like Gazebo) to provide simulated sensor data, or with a real robot if available, to test and prove the method's abilities and robustness.

Noether Path Planning Library Improvements

  • List of prerequisites: ROS, VTK
  • Description of programming skills: C++
  • Difficulty level: Medium
  • List of potential mentors: Alex Goins
  • Detailed description: The Noether tool path planning library currently has only one path planner and one sequence planner implemented. This project involves either modifying or adding additional planners which will improve the performance in terms of surface coverage and cycle time.

Reuleaux Library Improvements

  • List of prerequisites: ROS
  • Description of programming skills: C++
  • Difficulty level: High
  • List of potential mentors: Alex Goins
  • Detailed description: The Reuleaux library is designed to find the optimal base placement of a robot given several task pose constraints. The tool uses the number of IK solutions found in order to choose the best possible location. This project involves modifying the tool to add inclusion/exclusion zones, as well as adding a new optimization algorithm which will consider distance to joint limits, distance to singularities, and manipulability for selecting the optimal base pose.

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.

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 2018, 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.
Press h to open a hovercard with more details.