PAL Robotics is planning to participate in the Google Summer of Code. Below is a tentative list of project ideas, the content and scope is still being discussed and updated.
Project Ideas
Payload visualization/metrics
This project aims to develop a ROS 2-based software tool that allows users to assess and visualize the useful payload a robot can handle, based on its kinematic and dynamic properties. The tool will process the robot’s URDF (Unified Robot Description Format), taking into account actuation constraints, it will provide intuitive visualizations of available payload in a specific configuration or a workspace representation of payload capabilities. Additionally, it will include functionality to extract joint requirements (torque, power, and stiffness) needed to achieve a desired payload, helping roboticists optimize robot design.
Expected Impact
This tool will benefit roboticists, engineers, and researchers working on mobile robots, manipulators, and humanoid platforms. It will provide an intuitive way to evaluate, optimize, and redesign robots based on payload requirements, making it easier to select suitable actuators during the design phase.
Mentors: Luca Marchionni
Project Size: 175 hours
Difficulty: Medium
Skills Required: C++ or Python, ROS 2 basics, experience with URDF, familiarity with RViz plugin development. Rigid Body Dynamics Libraries such as Pinnochio or RBDL
Outcome:
- A C++ or Python tool to compute and visualize payload capacity in a specific robot joint configuration or inside the robot’s workspace.
- A joint requirement estimation module that suggests required actuator capabilities for achieving a specified payload.
- Integration with ROS 2, URDF, and RViz
- A custom RViz plugin to dynamically display payload constraints and actuator requirements.
- Documentation and example cases for different robotic platforms (TIAGo Pro, TALOS and other available open source robot models).
ROS 2 Action Mux
The ROS 2 Action Muxer could be a nice middleware tool designed to manage multiple action servers with predefined priority levels. It provides a client interface to an underlying action server while exposing multiple action servers that dynamically handle goals based on priority. Higher-priority goals preempt lower-priority ones, ensuring efficient resource management in multi-program frameworks.
In robotic systems and automation frameworks, multiple programs often require access to shared resources. However, not all goals should be treated equally—some, like emergency stop actions, must take precedence over routine operations. A structured priority system is essential to ensure that critical goals are executed without disruption from lower-priority tasks.
Mentors: Sai Kishor Kothakota
Project Size: 175 hours
Difficulty: Medium/Hard
Skills Required: C++, ROS 2 Basics
Outcome:
- Develop an action multiplexer that routes requests to a single action server while managing multiple priorities that work for any type of action message types
- Implement a preemption mechanism where high-priority goals interrupt lower-priority ones.
- Provide a user-friendly client API to integrate seamlessly with existing ROS 2 systems.
- Add proper tests for the mechanism of preemption and acceptance of the goals
- Propagate the feedback of the action to the appropriate action server
RFID simulation plugin for Gazebo Harmonic
This project aims to develop an RFID simulation plugin for Gazebo Harmonic to enable the testing of RFID-based applications in a virtual environment. This plugin will simulate RFID readers and tags, allowing developers to validate systems involving object identification, inventory management, and localization.
Gazebo Classic had limited support for RFID sensors and tags, but it handled only very basic detection (binary presence/absence). However, this plugin was never ported to Gazebo Harmonic. With Gazebo Classic reaching its end-of-life in January 2025, there’s a need to re-implement RFID simulation capabilities in modern versions of Gazebo.
The proposed plugin will simulate RFID systems by modeling physical wave transmission (e.g Friis transmission equation) and incorporating noise factors to achieve realistic behavior. This includes accounting for signal attenuation, interference, and environmental conditions that affect RFID performance.
During the project, the RFID plugin will be validated making use of PAL open-source simulation packages.
Mentors: Oscar Martinez
Project Size: 175 hours
Difficulty: Medium
Skills Required: C++, ROS 2 basics, Gazebo simulation and plugin development, RFID
Outcome:
- Implementation of a physically realistic RFID sensor plugin in Gazebo Harmonic, with configurable power (0-30 dBm), antenna gain and noise parameters.
- Integration with ROS 2 by publishing rfid_msgs/Detection (suggested name) messages with timestamped RSSI and tag metadata.
- Validation Scenarios: 3 demo worlds (static tags, mobile robot, cluttered environment).
- Documentation: API reference and tutorials for plugin configuration.
ROS 2 Control Ecosystem Visualization
The ROS 2 Control Ecosystem Visualization project aims to develop a tool, either as an RQT plugin or a web-based interface, to provide an intuitive and real-time representation of the state of a ROS 2 Control ecosystem. This tool will enable users to monitor the flow of data, visualize active controllers, and gain insights into system performance.
Managing and debugging a ROS 2 Control ecosystem can be challenging due to the complexity of controllers, hardware interfaces, and data streams. Understanding how different components interact in real-time is crucial for ensuring optimal performance and troubleshooting system issues effectively. A dedicated visualization tool can bridge this gap by providing a clear and interactive overview of the control stack.
Mentors: Sai Kishor Kothakota
Project Size: 350 Hours
Difficulty: Medium/Hard
Skills Required: Qt framework, JavaScript, Proficiency in working with ROS 2 action, service, and topic communication
Outcome:
- Develop an interactive visualization tool that represents the state of the ROS 2 Control ecosystem.
- Display data flow, including active controllers, hardware states, and command execution.
- Provide an intuitive user interface that supports filtering and customizing displayed information.
- Ensure seamless integration with existing ROS 2 systems and facilitate debugging and performance analysis.
ROS2 python-launch-lsp-server
The ROS 2 launchfile system manages the launch of and configuration of one or many processes and can also start other launchfiles. Python launchfiles use launch descriptions which are made of ordered lists of actions and groups of actions. It may also contain substitutions throughout the description, which are used to add some flexibility and configuration to the descriptions in a structured way.
That high flexibility of this system comes with the downside of being hard to understand what parameters are being used by one project or what executables are being started before runtime. This is where LSP server can become handy for the development of large ros2 packages. It can help verify the proper use of arguments, use go to references when working with other files, pre-processing ros2 substitutions.
Mentors: Thomas Ung
Project Size: 175 hours
Difficulty: Medium
Skills Required: Rust, ROS 2 Basics, familiarity with LSP, AST
Outcome:
- Implement go-to-definition for going through ros2launch file
- Implement code completion for Actions and Substitutions
- Implement find references
- Implement Executable argument suggestions
- Implement syntactic error diagnostic
- Documentation on how to integrate with lsp compatible editors
PlayMotion2 plugin-based system
PlayMotion2 is a motion control package designed for robots that use ROS 2. It allows you to load a set of pre-recorded motions and execute them on robots. Currently, the framework is limited to working with JointTrajectory controllers, which are commonly used for controlling robotic joints based on pre-defined trajectories.
The primary goal of this project is to evolve PlayMotion2 into a modular, plugin-based system. This will allow for the development of specialized plugins tailored to different types of controllers, making the framework more flexible and extensible.
This project will use ROS 2 Humble Hawksbill.
Mentors: Noel Jiménez García
Project Size: 350 hours
Difficulty: Medium/Hard
Skills Required: C++, Inheritance, ROS 2, ros2_control, Gazebo simulation and plugin development.
Outcome:
- Plugin-based system for executing motions with different types of controllers
- Abstract class for plugin definition
- Plugin for JointTrajectoryController
- Plugin for other controller type (TBD)
- Documentation and tutorial for creating a controller plugin for PlayMotion2
Tips for writing a successful Google Summer of Code application
- Follow GSoC’s Writing a proposal guidelines
- Include your GitHub profile
- Point us your contributions to any open source projects
- Provide us with your contact information in order to reach out for any communication
- Specify your technical background and any courses that you have taken
- Describe your background and experience in robotics and ROS 2
- Specify the project that you are interested in and why you would like to work on it
- Tell us what you hope to get out of the Summer of Code experience.
- Feel free to reach out to the project mentors on GitHub to discuss your ideas
- For further questions, please contact Sai Kishor Kothakota
Application instructions for GSoC-2025
Students are encouraged to reach out to relevant mentors before submitting their application on the GSoC official website. All project proposals must be built from scratch, with mentors providing guidance throughout the project. Note that specific requirements are listed for each project and will be considered during the selection process. If in doubt, feel free to send an email to the mentors or at gsocATgmail.com
Join our Discord server : PAL Google Summer of Code, to discuss ideas and questions and also to connect with other peers.
Basic requirements for all the projects
- Git experience
- C++ or Python programming experience (depending on the project)
- ROS 2 Basics
- At least one contribution to the open-source projects in the last 6 months
Programming basic examples depending on the project:
Payload visualization and metrics
- Describe the step you need to have ROS 2 in your PCs. Provide a link to a video that demonstrates that you can execute talker and listener nodes in your Ubuntu PC.
- Use https://github.com/pal-robotics/tiago_robot repository and provide a link to your YouTube video showing how you would publish the robot description and visualize the robot model in RViz.
- Create and share with us a github repo which contains a ROS 2 node which subscribe to robot description and uses Pinocchio (https://github.com/stack-of-tasks/pinocchio) Rigid Body Dynamics Library. Execute some tests:
- Creates Pinocchio Model
- Perform forward kinematics and get a transform.
- Get a Jacobian at a specific frame.
- Check collisions between 2 links
ROS 2 Control Ecosystem Visualization
- Write a basic code in ROS 2 subscribing to a topic and sending a service request
- Write an RQT plugin (or) JavaScript (or) TypeScript to display a very simple directed acyclic graph
- Using TypeScript for the above programming gets extra score
- Making the graph interactive will also gets an extra score
- Showing some information of metadata of each node also gets an extra score
- You can use some existing tools such as : https://github.com/RobotWebTools/rclnodejs
- If you are planning to do with RQT, the output should be something similar to rqt_tf_tree
ROS 2 Action Mux
- Write a basic code in ROS 2 writing an action server and the action client. However, the service request is received by subscribing a topic. If the topic is published at higher rate, it should be able to abort the previous goal and send a new one. The action server should wait for 5 seconds before succeeding and any abortion within 5 seconds should be properly handled
- Write a generic subscriber that can subscribe to a topic of any message type. Write different publishers to test the code, whenever it receives a message from a topic, print also the type of message that is received
ROS2 python-launch-lsp-server
- Write a ros2 rust node publisher taking 5 different parameters and a subscriber taking 2 different parameters writing it to a file. The nodes should be started by different launch files and the entry point of the application should be 3 levels of scaffolding above the node launch file. Meaning you need to write 4 launch files in total.
- Comments should be added to the launch file on each different use cases for the lsp server that you can find. The more unique ones the better.
RFID Simulation plugin for Gazebo Harmonic
- Describe the steps needed to have Gazebo Harmonic running on your PC. Setup a demo project with a robot of your choice. Provide a running example, with all the launch files and configuration you used. Be creative, bonus points if your simulated world is related with intralogistic robots.
- Write a new Gazebo Harmonic sensor plugin called DummySensor. You should be able to add it to your demo robot and load it in the simulation. On load, the sensor should publish “Hello World” into a ROS 2 topic using gz-transport.
PlayMotion2 plugin-based system
- Execute a basic example of publish / subscribe in ROS 2 Humble.
- Create a C++ ROS 2 node that sends some trajectory for a TIAGo arm on simulation: https://github.com/pal-robotics/tiago_simulation/
- Write a basic plugin-based system in C++ that uses ROS 2 Humble and create two plugins for that system. The plugin system will interact with strings, one plugin will revert the string and the other will count the number of characters. The user should be able to select which plugin to use.
Information we’d like to know about you
After completing a basic programming example for one of the projects you’re interested in, please submit your work through this Google Form, including a link to the repository hosting your codebase along with other basic information about yourself. This may include your contact information and programming experience or more like the following:
Contact Details
- Full name
- Country
- Your Resume / CV
- Public Repository links
- Previous contributions links
- LinkedIn profile
Cover letter and Project ideas proposal
- Send us a cover letter explaining what you like about the project
- Explain your strategy or your ideas to solve the project
- Now, split your nice project idea into smaller milestones and show an estimated plan covering the GSoC period, and also include your other commitments such as exams, planned holidays, etc.
- Explain to us your serious commitment to this project and how this can contribute to your ongoing studies.
Technical and Programming background
- Experience with the tools required for the projects you’re interested in
- Technical background and current studies
- Other programming languages you’ve used and your skill level in each
- Operating systems you use regularly
GSoC Participation details
- Have you ever participated in a GSoC project?
- Have you applied to GSoC in the past but were not selected? If so, when and for what projects?
- Have you submitted proposals to other organizations for GSoC 2025?
To improve the likelihood of your selection:
- Demonstrate your skills:
A way to show us that you are the best candidate for the projects is by demonstrating that you’re familiar with the software and can at least do the basic demos requested by the respective project. Adding more features or functionality to the application gives some extra credits. You can also come up with some new ideas and demonstrate them along with your solutions. - Documentation:
Apart from writing a code that works, it is also important to see how well you document it to demonstrate to the mentor that, going through your repository, he/she should be able to reproduce it. Don’t forget to explain your approach to the solution. - Be proactive:
When you write your cover letter, describe your ideas or approach to the project and explain how you would divide the work into smaller milestones with time estimates. It’s also helpful to show what can be achieved and what future improvements or features could be added. This demonstrates to the mentor how you envision the project’s potential.