Win $1,000 Building Real AI Robots: Everything You Need to Know About the RDK Challenge

Win $1,000 Building Real AI Robots: Everything You Need to Know About the RDK Challenge

Could your next robotics project win you $1,000 — and get your hardware for free? That’s exactly what’s on the table with the Robotics Dream Keeper (RDK) Challenge, an exciting new contest in partnership between The Construct Robotics Institute and D-Robotics — two powerhouses in the robotics education and hardware spaces.

Whether you’re a curious beginner who’s never touched a robot before, or an experienced builder looking for your next challenge, this program is designed with you in mind.


What Is the RDK Challenge?

The Robotics Dream Keeper Challenge is a structured, guided competition that invites makers, students, hobbyists, and developers to build their own intelligent robots using the RDK X5 — a powerful edge AI development board created by D-Robotics.

The challenge spans roughly 35 to 45 days and is split into three progressive stages, each designed to level up your skills without overwhelming you. You won’t just be building a robot — you’ll be learning how to deploy real AI at the edge, work with ROS (Robot Operating System), and create something genuinely impressive.

This isn’t a throwaway contest. It’s a full learning journey backed by expert support, live demos, and a community of builders working alongside you.


Who’s Behind It? The Construct × D-Robotics Partnership

The RDK Challenge is the result of a collaboration between two organisations with deep roots in robotics:

  • D-Robotics is the company behind the RDK X5 development board. They build AI-native hardware designed to bring intelligent robotics to developers and makers everywhere, with a strong focus on edge computing and ROS integration.
  • The Construct Robotics Institute is a globally recognised robotics education platform based in Barcelona, renowned for its ROS courses, online robot simulations, and hands-on learning programmes. They’ve helped thousands of engineers and developers launch careers in robotics.

The Star of the Show: The RDK X5 Dev Board

At the heart of the challenge is the D-Robotics RDK X5, a compact but formidable development board built for real-world AI robotics. Here’s what makes it stand out:

  • 10 TOPS NPU powered by the Sunrise 5 intelligent computing chip — capable of running advanced AI models like Transformers, RWKV, and Stereo Perception directly on the edge, no cloud required
  • Octa-core Cortex A55 CPU for smooth, high-performance operation
  • Up to 8GB RAM with full Ubuntu support
  • Wi-Fi 6 and Bluetooth 5.4 for fast, reliable wireless connectivity
  • CAN FD interface and Power over Ethernet (PoE) for industrial-grade integration
  • Dual MIPI camera inputs for stereo vision and deep learning-based perception
  • ROS-ready out of the box, with a full-stack robot development platform included

Past RDK X5 builds have included a reinforcement-learning bipedal robot, an Arc Reactor that syncs with heartbeat data, and an interactive companion robot with vision, sound, and touch reactions — proof that the board is as creative as it is capable.


The Three-Stage Challenge Structure

The challenge unfolds over roughly 35 to 45 days, broken into three levels that progressively build your skills:

Stage 1 — Power On Your Robot’s Brain This is your starting point. You’ll unbox the RDK X5, flash the board, activate sensors, and run your first AI demo. If you’ve ever set up a Raspberry Pi, you’ll feel right at home.

Stage 2 — Build Your Intelligence With the hardware running, you’ll begin integrating AI capabilities — deploying models, enabling perception, and building the core functionality of your robot.

Stage 3 — Bring It to Life The final stage is about polish, creativity, and completion. You’ll finish your robot project, document it, and submit it for judging.

Each stage is designed to be achievable, and participants have access to a free built-in online bootcamp with official D-Robotics technical guidance throughout the process.


What Can You Win?

The prizes are seriously worth going for:

  • 🏆 $1,000 grand prize for the most outstanding completed project
  • 💰 $500 bonus for top community advocates who share their journey and inspire others
  • 🎁 Full hardware rebate — complete all three challenge stages and receive a full cash rebate on your RDK X5 purchase, meaning you essentially get the board for free

Yes, you read that right. Finish the challenge, and your development board costs you nothing.


Who Should Enter?

The RDK Challenge is explicitly designed to be newbie-friendly. You don’t need to be a robotics engineer or AI researcher. If you’re any of the following, this challenge is for you:

  • Makers and hobbyists curious about AI robotics
  • Students looking to build practical, portfolio-worthy projects
  • Developers wanting to explore edge AI and ROS
  • Experienced robotics builders looking for a structured creative challenge

How to Get Started

To join the Robotics Dream Keeper Challenge, you’ll need to purchase the RDK X5 through an official D-Robotics partner channel. Once you have your board, you register for the challenge and begin your 45-day journey.

The RDK X5 has been featured in live demos on the Make: YouTube channel, and is available through authorised resellers including DFRobot and Waveshare, among others.

For full details and to sign up, visit the GitHub contest page or the official D-Robotics RDK X5 page.
Join the RDK Challenge Discord Community: https://discord.gg/7wX9XkNKXv


Final Thoughts

The RDK Challenge is more than a competition — it’s a structured, supported pathway into the world of AI robotics. With The Construct’s educational expertise and D-Robotics’ hardware know-how behind it, participants get rare access to real guidance, real tools, and real prizes.

If you’ve been waiting for the right moment to dive into robotics, this might just be it. Your dream robot is 45 days away — and it might even pay for itself.

Are you going to take the challenge?

Isaac Sim, Isaac Lab, Isaac Gym — what are the differences?

Isaac Sim, Isaac Lab, Isaac Gym — what are the differences?

If you’re starting to explore Embodied AI or humanoid robotics, you’ll quickly encounter these tools.

They’re all part of NVIDIA’s robotics simulation ecosystem, but they serve different roles in the development pipeline.

Here’s a quick overview.

🌐 Omniverse

An open platform for building virtual worlds and digital twins.

• Built on USD (Universal Scene Description), enabling interoperability across tools like Blender and Maya
• Provides high-quality rendering and real-time physics simulation
• It serves as the foundational platform for tools like Isaac Sim, providing the underlying simulation and rendering capabilities.

🤖 Isaac Sim


A robotics simulation platform built on Omniverse for building and testing robotic systems.
• High-fidelity physics simulation (robot dynamics + sensors)
• Integration with ROS / ROS2
• Highly extensible for robotics workflows

This is where you simulate robots and their environments.

🔵 Isaac Lab


A lightweight toolkit for robot learning and AI development, built on top of Isaac Sim’s simulation capabilities. Primarily used for training robot policies. And it is open-source.

• Prebuilt robot models and task environments
• Support for Reinforcement Learning (RL) and Imitation Learning (IL)
• Works with multiple robot types (mobile robots, manipulators, humanoids)

Isaac Lab is where robot policies are trained.

🌀 Isaac Gym

A GPU-accelerated simulator designed for large-scale reinforcement learning.
• Supports algorithms like PPO and SAC
• No high-fidelity rendering
• Limited interaction modeling
It has largely been replaced by Isaac Lab and is no longer actively maintained, but remains easy to use.

If you want to accelerate your entry into Humanoid Robotics, join our intensive 3-day onsite training and go from zero setup to a working humanoid demo: https://www.theconstruct.ai/humanoid-robot-reinforcement-learning-training/.

The Best Way to Create Your Robotics Portfolio

The Best Way to Create Your Robotics Portfolio

Your robotics portfolio is where you really demonstrate your robotics level.

As we evolve, recruiters are focusing more on roboticists that show their portfolio rather than their CV.

Forget about diplomas. Forget about certificates. Show your portfolio!

What is a portfolio?

Your portfolio should be a dedicated website listing the main robotics projects you have developed. 

You can host it wherever you want: your personal website, within GitHub, inside The Construct platform… The hosting location doesn’t matter as long as it is available worldwide.

Here some advices about how to build a professional portfolio:

1. Focus on quality over quantity

Recruiters don’t have time to wade through twenty mediocre projects. Focus your efforts on 3 to 5 truly impressive, well-documented projects that show a wide range of skills.

In robotics, the kind of projects that you can show are:

Project Type What it Demonstrates Examples
Hardware Integration Ability to work with sensors, actuators, wiring, and real-world constraints. Building a custom PCB for a mobile robot, creating a PID controller for a motor or even building full robots
Complex Software/Algorithms Proficiency in high-level programming, math, and specific robotics concepts. A SLAM implementation using LIDAR data, a path planning algorithm for a drone.
Open-Source Contribution Collaboration, code review, familiarity with Git/GitHub, and industry standards. Fixing a critical bug in the ROS 2 navigation stack, adding a feature to a major robotics library.

 

Of course, you can have hybrid projects where you mix the types above demonstrating that you have a wider range of knowledge, but that is not a must. Some employers are looking for multidisciplinary engineers while others are looking for specialized ones. So, don’t worry if you don’t master all the subjects or you are too shallow on most subjects. 

2. Document everything

This is the most crucial step. A portfolio project isn’t just a GitHub link. It’s a comprehensive story that answers:

  • The Problem (The “Why”): What real-world challenge were you trying to solve? (e.g., “We needed an autonomous system to inspect agricultural fields.”)
  • The Solution (The “What”): What did you build? (e.g., “A custom-built, four-wheeled mobile robot running ROS 2 and utilizing a camera for vision.”)
  • The Technical Details (The “How”): Which tools, languages, and concepts did you use? Be specific! Mention Python, C++, ROS 2, Docker, Git, OpenCV, the specific sensors, etc.
  • (Optional) Testing Proficiency: If you used unit tests or functional tests, mention it! This shows you build robust, reliable code.
  • The Results (The “Proof”): What was the outcome? Did it work? Include performance metrics, graphs, or videos.
  • The Lessons Learned (The “Growth”): What went wrong? What would you do differently? This shows self-awareness and a learning mindset.

3. Visuals are a must

You need to prove the robot moves and the code works. For that, include the following:

  • Clear Videos: Record a short, clear video (30-60 seconds) for every project showing it in action. Upload it to YouTube and embed it directly on your project page. A working demo is 10x better than a static image.
  • Clear Images: Use clean photos of the physical hardware, diagrams of your system architecture, and screenshots of data output or simulation results (like RViz).
  • Clean Code Presentation: Link directly to the GitHub repository, and ensure the README file is professional, organized, and follows the structure outlined in point #2.

     

4. If possible, include hints to your “soft” skills

Use this opportunity to show that you have also other skills required for the job, beside the technical ones. For instance:

  • Documentation: Did you create API documentation? Did you use a project management tool? Detail your process.
  • Collaboration: For group projects, clearly define your specific role and contributions. If you worked on an open-source repo, emphasize the experience of multi-cultural, distributed teamwork.
  • Oral presentation: In case you presented your project live somewhere and happened to have it recorded, include it in the portfolio (if you did the presentation, and did not record it, why?!?!?!?).

5. Final important data to include

 Remember that your portfolio is open to the world. Then you need to include a way for visitors to know more about you and how to contact you. This can generate cold job offers for you from people visiting your page and finding your profile interesting. Never forget to include:

  • A link to your full CV (a link to your LinkedIn CV is also ok)
  • A contact method (usually the email)

Portfolio Best Practices at a Glance

 Let’s summarize the dos and don’ts:

Do This

Avoid This
Embed a video of your project running. Just linking to a GitHub repo with no context.
Use clear headings and bold important technologies (e.g., SLAM, Docker, C++). Walls of text or overly complex technical jargon.
Explain the “why” behind your design choices. Just describing “what” the robot does.
Mention tests, deployment methods (Docker), and Git flow. Forgetting to mention the tools you used.
Have a separate, dedicated page for your Open-Source Contributions. Mixing open-source work in with personal projects.

 

 

Some examples of successful portfolios

Here are a few examples of good portfolios from former students of mine:

* Peera Tienthong

https://ptientho.github.io/

* Miguel Solis Segura

https://miguelsolissegura.com/  

Conclusion

That’s it!

Now it is your time to start building your portfolio, and if you want me to review it and give you some feedback, write a comment with the address to your portfolio and I’ll take a look.

*Final recommendation: Try the automatic portfolio generation from The Construct Robotics Institute, which provides a professional portfolio page for showcasing your robotics projects.

You can edit and fill the portfolio at will, but if you enrol in the Robotics Developers Masterclass, you will be doing awesome projects with simulations and real robots, and ALL THE PROJECTS ARE AUTOMATICALLY ADDED TO YOUR PORTFOLIO, including descriptions, links to code, and images.

Try it now → https://appv3.theconstruct.ai/desktop

[ROS2 Q&A] How to follow waypoints using nav2 #232

[ROS2 Q&A] How to follow waypoints using nav2 #232

What we are going to learn

  1. How to launch a functional nav2 system
  2. How to use nav2 simple commander API
  3. How to launch nav2 waypoint follower module

List of resources used in this post

  1. Use the rosject: https://app.theconstructsim.com/l/4da61f89/
  2. The Construct: https://app.theconstructsim.com/
  3. Nav2 simple commander API: https://github.com/ros-planning/navigation2/tree/main/nav2_simple_commander
    1. https://navigation.ros.org/commander_api/index.html
  4. ROS2 Courses –▸
    1. ROS2 Basics in 5 Days Humble (Python): https://app.theconstructsim.com/Course/132
    2. ROS2 Basics in 5 Days Humble (C++): https://app.theconstructsim.com/Course/133

Overview

In this post, we’ll be learning how to use nav2 SImple Command API to write a program that makes your program follow waypoints.

What we are going to create is something like a patroling system, in which the robot patrols a given area.

ROS Inside!

ROS Inside

ROS Inside

Before anything else, if you want to use the logo above on your own robot or computer, feel free to download it and attach it to your robot. It is really free. Find it in the link below:

ROS Inside logo

Opening the rosject

In order to follow this tutorial, we need to have ROS2 installed in our system, and ideally a ros2_ws (ROS2 Workspace). To make your life easier, we have already prepared a rosject with a simulation for that: https://app.theconstructsim.com/l/4da61f89/.

You can download the rosject on your own computer if you want to work locally, but just by copying the rosject (clicking the link), you will have a setup already prepared for you.

After the rosject has been successfully copied to your own area, you should see a Run button. Just click that button to launch the rosject (below you have a rosject example).

Learn ROS2 Parameters - Run rosject

How to follow waypoints using nav2 – Run rosject (example of the RUN button)

 

After pressing the Run button, you should have the rosject loaded. Now, let’s head to the next section to get some real practice.

Launching the simulation

As you may imagine, instead of using a real robot, we are going to use a simulation. The simulation package we are using, neo_simulation2 (by Neobotix), comes along with all the new ROS 2 features.

Like its predecessor, the neo_simulation2 package is fully equipped with all the Neobotix robots that are available in the market.

 

By the way, Neobotix is a state-of-the manufacturer of mobile robots and robot systems. We offer robots and manipulators for all applications with full ROS support. Neobotix products range from small mobile robots to mobile robot arms and several omnidirectional robots. They are specialized in designing customized mobile robots to meet your unique requirements.

 

Combining the novelty of ROS 2 and the state-of-the-art Neobotix platforms would allow users to learn and develop various reliable and robust application that caters to their needs in both research and as well as in industries.

Alright, having opened the rosject and explained a little bit about Neobotix, let’s start running some commands in the terminal. For that, let’s open a terminal by clicking the Open a new terminal button.

 

Open a new Terminal

Open a new Terminal

 

Once inside the first terminal, let’s run the commands below, to launch a simulation

cd ros2_ws
source install/setup.bash
ros2 launch neo_simulation2 simulation.launch.py
There will be countless red error messages on this simulation terminal. Let’s just ignore those messages for now.
If you want to know a bit more about Neobotix robots, they offer:

ROS2 Navigation

In order to move the robot to a desired goal location, pre-defined controllers and planners are available to be readily used. Thanks to Navigation 2, the all-new ROS-2 navigation stack, provides us with localization, global planning, and local planning algorithms, that allow us to jump-start by testing our intended application on the robot real-quick.

Almost all the algorithms found in move_base (ROS-1 Navigation stack) are available in Navigation2. All the Neobotix robots in the simulation for ROS-2 are primed and ready with Navigation2.

Once the simulation is started (seen in the previous tutorial), ROS-2 navigation stack can be launched using the following command

Now, in a second terminal, we can launch the Localization Server using the following command:

ros2 launch localization_server localization.launch.py
And in a third terminal, we can launch the Path Planner Server:
ros2 launch path_planner_server pathplanner.launch.py

The commands above should have launched the simulation, Localization Server, and Path Planner server.

After some seconds, we should have Gazebo (simulation), RViz (Robot Visualization), and Teleop running now. The simulation should be similar to the following:

Simulation - How to follow waypoints using nav2

Simulation – How to follow waypoints using nav2

 

If the Gazebo simulation doesn’t pop up:

  • Please open the Gazebo from the below menu bar
  • RViz would have been loaded as well and can be found in the Graphical tools
  • Also, another terminal would have popped out in the Graphical tools for the teleoperation. Please follow the instruction given in that terminal for moving the robot.

To make sure everything is working so far, you can send a 2D NavGoal in RViz to make sure the navigation system is working.

The files used to launch the Localization Server and Path Planner are found on the following paths:

ls ~/ros2_ws/src/neobotix_mp_400_navigation/localization_server/launch/localization.launch.py
ls ~/ros2_ws/src/neobotix_mp_400_navigation/path_planner_server/launch/pathplanner.launch.py

These files can also be seen in the Code Editor:

Localization Server and Path Planner - How to follow waypoints using nav2

Localization Server and Path Planner – How to follow waypoints using nav2

 

Feel free to localize and send goals to the robot as shown in this video about ROS2 Navigation for Omnidirectional Robots:

 

Global Costmap and Local Costmap in RViz

Assuming you have RViz running, you can add Global and Local costmaps to it. For that, click the Add button on the bottom left side of RViz, then Add by Topic, then select Global Costmap:

Add by topic - Global Costmap - How to follow waypoints using nav2

Add by topic – Global Costmap – How to follow waypoints using nav2

 

To add Local Costmap, click the Add button on the bottom left side of RViz, then Add by Topic, then select the Map under Local Costmap:

Add by topic - Local Costmap - How to follow waypoints using nav2

Add by topic – Local Costmap – How to follow waypoints using nav2

 

Assuming everything went well so far, now we are going to test the waypoint follower.

Waypoint follower

If you forked the rosject (clicking on the link we provided to you earlier), you should have a package named follow_waypoints on your ros2_ws/src folder already, but for documentation purposes, and in case you want to know the baby steps, here is how we created that package.

First, in a fourth terminal we created that package:

cd ~/ros2_ws/src

ros2 pkg create --build-type ament_python follow_waypoints
By listing the content of that ~/ros2_ws/src folder, we see that the package has been created:
ls

# follow_waypoints  neo_local_planner2  neo_simulation2  neobotix_mp_400_navigation

That follow_waypoints package has a folder with the same name on it. On that folder, we created a file named follow_waypoints.py

cd ~/ros2_ws/src/follow_waypoints/follow_waypoints

touch follow_waypoints.py

chmod +x follow_waypoints.py

The touch command was used to create the file, and the chmod +x command was used to give execution permissions to that file (make it executable, basically)

We then pasted some content on the follow_waypoints.py file. You can see the content by opening that file using the Code Editor.

The content we pasted is basically a modified version of https://github.com/ros-planning/navigation2/blob/main/nav2_simple_commander/nav2_simple_commander/example_waypoint_follower.py

Inspection Route - To navigation to - How to follow waypoints using nav2

Inspection Route – To navigation to – How to follow waypoints using nav2

 

On lines 33 to 36 we define an inspection_route variable, which essentially is an array that defines the waypoints (positions in the map) that the robot has to go when patrolling.

#! /usr/bin/env python3
# Copyright 2021 Samsung Research America
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import time
from copy import deepcopy

from geometry_msgs.msg import PoseStamped
from rclpy.duration import Duration
import rclpy

from nav2_simple_commander.robot_navigator import BasicNavigator, NavigationResult


def main():
    rclpy.init()

    navigator = BasicNavigator()

    # Inspection route, probably read in from a file for a real application
    # from either a map or drive and repeat.
    inspection_route = [ # simulation points
        [5.0, 0.0],
        [-5.0, -5.0],
        [-5.0, 5.0]]


    # Set our demo's initial pose
    # initial_pose = PoseStamped()
    # initial_pose.header.frame_id = 'map'
    # initial_pose.header.stamp = navigator.get_clock().now().to_msg()
    # initial_pose.pose.position.x = 3.45
    # initial_pose.pose.position.y = 2.15
    # initial_pose.pose.orientation.z = 1.0
    # initial_pose.pose.orientation.w = 0.0
    # navigator.setInitialPose(initial_pose)

    # Wait for navigation to fully activate
    navigator.waitUntilNav2Active()

    while rclpy.ok():

        # Send our route
        inspection_points = []
        inspection_pose = PoseStamped()
        inspection_pose.header.frame_id = 'map'
        inspection_pose.header.stamp = navigator.get_clock().now().to_msg()
        inspection_pose.pose.orientation.z = 1.0
        inspection_pose.pose.orientation.w = 0.0
        for pt in inspection_route:
            inspection_pose.pose.position.x = pt[0]
            inspection_pose.pose.position.y = pt[1]
            inspection_points.append(deepcopy(inspection_pose))
        nav_start = navigator.get_clock().now()
        navigator.followWaypoints(inspection_points)

        # Do something during our route (e.x. AI to analyze stock information or upload to the cloud)
        # Simply print the current waypoint ID for the demonstation
        i = 0
        while not navigator.isNavComplete():
            i = i + 1
            feedback = navigator.getFeedback()
            if feedback and i % 5 == 0:
                print('Executing current waypoint: ' +
                    str(feedback.current_waypoint + 1) + '/' + str(len(inspection_points)))

        result = navigator.getResult()
        if result == NavigationResult.SUCCEEDED:
            print('Inspection of shelves complete! Returning to start...')
        elif result == NavigationResult.CANCELED:
            print('Inspection of shelving was canceled. Returning to start...')
            exit(1)
        elif result == NavigationResult.FAILED:
            print('Inspection of shelving failed! Returning to start...')

        # go back to start
        # initial_pose.header.stamp = navigator.get_clock().now().to_msg()
        # navigator.goToPose(initial_pose)
        while not navigator.isNavComplete:
            pass


if __name__ == '__main__':
    main()


 

In addition to that follow_waypoints.py file, we also had to create the ~/ros2_ws/src/follow_waypoints/config/follow_waypoints.yaml and ~/ros2_ws/src/follow_waypoints/setup.py files.

  • Please check that files. If you want a deeper explanation about those files, please check the video available at the end of this post.

 

Alright, after having created that package and the required configuration files, the next was was compiling the package:

cd ~/ros2_ws

colcon build; source install/setup.bash

 

Then, to see the robot following the waypoints, we can run:

cd ~/ros2_ws

source install/setup.bash

ros2 run follow_waypoints follow_waypoints_exe

 

Looking at the simulation and at RViz, you should be able to see the robot moving.

Congratulations. You just learned how to make a robot follow waypoints using nav2 (the official ROS 2 Navigation package)

We hope this post was really helpful to you. If you want a live version of this post with more details, please check the video in the next section.

Youtube video

So this is the post for today. Remember that we have the live version of this post on YouTube. If you liked the content, please consider subscribing to our youtube channel. We are publishing new content ~every day.

Keep pushing your ROS Learning.

Related Courses & Training

If you want to learn more about ROS and ROS2, we recommend the following courses:

How to easily contribute to ROS2 documentation

How to easily contribute to ROS2 documentation

What we are going to learn

  1. How to find issues to work on
  2. How to clone tutorial packages into a rosject
  3. How to create pull requests

List of resources used in this post

  1. Use the rosject: https://app.theconstructsim.com/l/56492ac1/
  2. The Construct: https://app.theconstructsim.com/
  3. ROS2 Courses –▸
    1. ROS2 Basics in 5 Days Humble (Python): https://app.theconstructsim.com/Course/132
    2. ROS2 Basics in 5 Days Humble (C++): https://app.theconstructsim.com/Course/133
  4. https://navigation.ros.org/plugin_tutorials/docs/writing_new_nav2planner_plugin.html

Overview

ROS2 is an open-source software framework for robotics that provides libraries and tools to help developers create robot applications.

Documentation is an essential part of any software project, and ROS2 welcomes contributions from anyone who wants to improve it.

In this video, we will show you how to find issues to work on, clone tutorial packages into a rosject, and create pull requests. By the end of this video, you will be able to make your first contribution to ROS2 documentation and become part of the ROS2 community.

ROS Inside!

ROS Inside

ROS Inside

Before anything else, if you want to use the logo above on your own robot or computer, feel free to download it and attach it to your robot. It is really free. Find it in the link below:

ROS Inside logo

Opening the rosject

In order to follow this tutorial, we need to have ROS2 installed in our system, and ideally a ros2_ws (ROS2 Workspace). To make your life easier, we have already prepared a rosject with a simulation for that: https://app.theconstructsim.com/l/56492ac1/.

You can download the rosject on your own computer if you want to work locally, but just by copying the rosject (clicking the link), you will have a setup already prepared for you.

After the rosject has been successfully copied to your own area, you should see a Run button. Just click that button to launch the rosject (below you have a rosject example).

Learn ROS2 Parameters - Run rosject

How to release a ROS 2 binary package – Part 3 – Run rosject (example of the RUN button)

 

After pressing the Run button, you should have the rosject loaded. Now, let’s head to the next section to get some real practice.

 

Starting the simulation

After having opened the rosject, let’s start a simulation following the ROS Nav2 documentation to move the robot around. For that, let’s open a terminal by clicking the Open a new terminal button.

Open a new Terminal

Open a new Terminal

 

Let’s run the following commands in the first terminal in order to launch the simulation:

source ~/ros2_ws/install/setup.bash

export GAZEBO_MODEL_PATH=/home/user/ros2_ws/src/neobotix_ros2/neo_simulation2/models:/home/user/ros2_ws/src:/home/user/ros2_ws/src/neobotix_ros2

ros2 launch neo_simulation2 simulation_basics.launch.py

 

Now, in a second terminal, let’s launch the Localization Server using the following command:

ros2 launch localization_server localization.launch.py

 

Then, in a third terminal, let’s launch the Path Planner using the following command:

ros2 launch path_planner_server pathplanner.launch.py

 

If everything went ok, you should have something like we have in the image below, where we have a simulation (on the left side), and the RViz (Robot Visualization) window (on the right side)

Neo robot simulation - setting a pose goal on Nav2

Neo robot simulation – setting a pose goal on Nav2

 

If we just try to set a 2D Pose Goal for the robot to move around, by clicking on 2D Pose Goal on RViz, and then set the goal as we can see in the blue arrow in the image above, the robot should move without any problems (because the rosject is fixed).

Reproducing a problem found in the nav2 documentation

In order to move a robot around in ROS 2, we use the Nav2 package. There is a nav2 documentation in the following link, that we are interested in, for the purpose of this video:

https://navigation.ros.org/plugin_tutorials/docs/writing_new_nav2planner_plugin.html

At the end of the page on the link aforementioned, you will find a code that contains the “planner_server” term.

When this post was created, the code was indented more or less like what we see below (planner_server and ros__parameters have the same indentation):

How to easily contribute to ROS2 documentation - Indentation

How to easily contribute to ROS2 documentation – Indentation

 

The instructions in the linked aforementioned say that we could paste that content in the nav2_params.yaml file.  .

If you want to find that file on the rosject, you first have to open the Code Editor:

Open the IDE - Code Editor

Open the IDE – Code Editor


The nav2 tutorial mentions nav2_params.yaml, but in the specific rosject shared at the beginning of this post, the file used is planner_server.yaml

Once the Code Editor is open, you can find the nav2_params.yaml file at the following path: ~/ros2_ws/src/neobotix_ros2/path_planner_server/config/planner_server.yaml.

nav2_params.yaml - How to easily contribute to ROS2 documentation

nav2_params.yaml – How to easily contribute to ROS2 documentation

 

You don’t have to, but if you replace the first 10 lines of planner_server.yaml with the non-indented code that was provided on the nav2 tutorial when this post was created, you would replace the first 10 lines with the following content:

planner_server:
ros__parameters:
  plugins: ["GridBased"]
  use_sim_time: True
  GridBased:
    plugin: "nav2_straightline_planner/StraightLine"
    interpolation_resolution: 0.1

 

If you had pasted the content above (as I said earlier, you don’t have to), you would have to kill the programs launched in the 3 terminals by pressing CTRL+C,

After that, you would have to recompile the ros2_ws using the following commands on the first terminal:

 

cd ~/ros2_ws

colcon build

 

After that, you could try to launch the simulation just like we did earlier:

In the first terminal, the simulation would be launched:

source ~/ros2_ws/install/setup.bash

export GAZEBO_MODEL_PATH=/home/user/ros2_ws/src/neobotix_ros2/neo_simulation2/models:/home/user/ros2_ws/src:/home/user/ros2_ws/src/neobotix_ros2

ros2 launch neo_simulation2 simulation_basics.launch.py

 

In the second terminal, the Localization Server would be launched:

ros2 launch localization_server localization.launch.py

 

Then, in a third terminal, the Path Planner would be launched:

ros2 launch path_planner_server pathplanner.launch.py

 

But, when launching the Path Planner, you would have the following error:

[planner_server-3] [ERROR] [1678443929.379055702] [rcl]: Failed to parse global arguments
[planner_server-3] terminate called after throwing an instance of 'rclcpp::exceptions::RCLInvalidROSArgsError
[planner_server-3]   what():  failed to initialize rcl: Couldn't parse params file: 
'--params-file /home/user/ros2_ws/install/path_planner_server/share/path_planner_server/config/planner_server.yaml'. 
Error: Cannot have a value before ros__parameters at line 12, 
at /tmp/binarydeb/ros-galactic-rcl-yaml-param-parser-3.1.3/src/parse.c:793,
at /tmp/binarydeb/ros-galactic-rcl-3.1.3/src/rcl/arguments.c:406

 

The error message shows that there is a problem when trying to parse the file. The problem is mainly an indentation problem.

Now, since the problem was found in the nav2 tutorial itself, how to contribute to this fix get resolved?

Contributing to the documentation – Creating a Pull Request

At the top of the https://navigation.ros.org/plugin_tutorials/docs/writing_new_nav2planner_plugin.html page, we have an Edit button.

Edit documentation - How to easily contribute to ROS2 documentation

Edit documentation – How to easily contribute to ROS2 documentation

 

By  clicking on that button, we will be sent to the ROS Navigation repository available at https://github.com/ros-planning/navigation.ros.org

The correct path for the file that generates the Nav2 Planner Plugin is https://github.com/ros-planning/navigation.ros.org/blob/master/plugin_tutorials/docs/writing_new_nav2planner_plugin.rst

By opening this last link, you will see at the top right corner a button that allows you to edit that file. You just have to click that link.

You can then make your changes, and create a commit. After that, you can just create a Pull Request:

Pull Request - fix nav2 documentation

Pull Request – fix nav2 documentation

 

And that is it.

The repository maintainers will review your changes, and if everything is ok, they will approve it. If not ok, they will suggest some changes. If they suggest changes, you just make the changes as requested.

Congratulations. You just learned how to contribute to the ROS Documentation.

We hope this post was really helpful to you. If you want a live version of this post with more details, please check the video in the next section.

Youtube video

So this is the post for today. Remember that we have the live version of this post on YouTube. If you liked the content, please consider subscribing to our youtube channel. We are publishing new content ~every day.

Keep pushing your ROS Learning.

Related Courses & Training

If you want to learn more about ROS and ROS2, we recommend the following courses:

Get ROS2 Industrial Ready- Hands-On Training by The Construct cover.png

Get ROS2 Industrial Ready- Hands-On Training by The Construct cover.png

How to Publish and Subscribe to a topic from a launch file

How to Publish and Subscribe to a topic from a launch file

In this post, you will learn how to publish and subscribe to a topic from a launch file. This post is a response to this question posted on Gazebo Answers.

Step 1: Fire up a system with ROS installation

“Hey, do you mean I have to install ROS first?” Absolutely not! Just log in to The Construct to get access to virtual machines pre-installed with ROS.

Once logged in, click on My Rosjects, then Create a New Rosject, supply the information as shown in the image below, and click Create. Then RUN the rosject.

Create a new Rosject

You might also want to try this on a local PC if you have ROS installed. However, please note that we don’t support local PCs and you will have to fix any errors you run into on your own. The rest of the instruction assumes that you are working on The Construct; please adapt them to your local PC and ROS installation.

PS: we are using ROS Noetic. You should be able to replicate the same on any ROS 1 distro.

Step 2: Create a package to demonstrate how to publish and subscribe to a topic from a launch file

Open Code Editor
Open a web shell

Open a web shell and run the following commands to create the package.

cd catkin_ws/src
source /opt/ros/noetic/setup.bash
catkin_create_pkg test_rostopic

Next, we create the launch directory and the launch files.

cd test_rostopic
mkdir launch
cd launch
touch test_pub.launch
touch test_echo.launch

Nice done! Now head over to the Code Editor to make changes to the launch files. Check the image below for how to open the Code Editor.

Open the Code Editor

Locate the launch folder in the code editor: catkin_ws > src > test_rostopic > launch and open the two launch files.

Paste the following lines into the test_pub.launch file. This is equivalent to rostopic pub /test_topic std_msgs/String "data: 'Hello there!'"

<launch>
    <arg name="topic_name" default="/test_topic" />
    <arg name="message" default="Hello there!" />
    <node pkg="rostopic" type="rostopic" name="rostopic_pub_node" output="screen" args="pub $(arg topic_name) std_msgs/String 'data: $(arg message)'" />
</launch>

Next, your test_echo.launch should be made up of the following lines. This is equivalent to rostopic echo /test_topic.

<launch>
    <arg name="topic_name" default="/test_topic" />
    <node pkg="rostopic" type="rostopic" name="rostopic_echo_node" output="screen" args="echo $(arg topic_name)" />
</launch>

Fantastic! Now, let’s compile the package.

cd ~/catkin_ws
catkin_make
source devel/setup.bash

Success! We’ll test it in the next step.

PS: if your code did not compile correctly, please go over the instructions and ensure you have created the files in the exact locations specified.

Step 3: Test the package to demonstrate how to publish and subscribe to a topic from a launch file

Start the test_pub.launch file in the current terminal.

roslaunch test_rostopic test_pub.launch

When done, open another terminal and run the test_echo.launch file.

roslaunch test_rostopic test_echo.launch

Now you should see something similar to the following on the terminal where test_echo.launch is running:

process[rostopic_echo_node-1]: started with pid [xxxx]
data: "Hello there!"
---

Sweet! So we are able to publish with one launch file and echo what we publish in another launch file. And…we are done here, congrats!

Take home: try combining both into a single launch file. After trying, check the solution in this gist.

Step 4: Check your learning

Do you understand how to publish and subscribe to a topic from a launch file? If you don’t know it yet, please go over the post again, more carefully this time.

(Extra) Step 5: Watch the video to understand how to publish and subscribe to a topic from a launch file

Here you go:

Feedback

Did you like this post? Do you have any questions about how to publish and subscribe to a topic from a launch file? Please leave a comment in the comments section below, so we can interact and learn from each other.

If you want to learn about other ROS topics, please let us know in the comments area and we will do a video or post about it.

Pin It on Pinterest