How to develop robotics software?


Robotics is increasingly integration into daily life. The size of business gets bigger with the growth of AI/ML. When you search “how to become a robotic engineer”, the programming skills are highlighted but it mainly includes Python, C++ and ROS. If you work as a software engineer or a firmware engineer, you already know that Python and C++ are highly desired programming languages. However, have you heard of ROS?
ROS stands for Robot Operating System. However, it is not actually OS but the framework providing libraries, tools and conventions for building robot applications. ROS is open-source project like Linux. Generally, ROS2 has been released the new version every year. The latest ROS2 is Kilted Kaiju which was released on May 2025.
It could be confused where one of the desired skills for a robotic engineer mentions ROS not ROS2. Are they different? ROS2 is evolved from ROS. The initial release of ROS was 2007. Imagine what kind of phone we were using in that year. iPhone first generation was released on June 29, 2007. At this time, there was no Apple Maps in App Store. Initial release date of Apple Maps is September 19, 2012. Furthermore, the most widely used wireless protocol BLE was released in 2009 as part of Bluetooth 4.0.
When ROS1 was launched, one robot can do only few things and the robot does not need to communicate with other robots. However, nowadays, one robot can do many things and also co-operate with other robots which require to communicate each other. ROS is optimized for fulfilling its given requirements that time. ROS1 relies on a centralized master node and can only have one node per process. However, the multiple node can discover others in ROS2 and one process can have multiple nodes as well. For example, one robot can have computer vision node and controls node and AI/ML node. Then, each node can communicate via topics and messages.
Understanding the lifecycle of node and communication protocol are crucial to develop robotics software. There are three types of messaging between process.
Topic (Publisher/Subscriber)
Service (Client/Server)
Action (Client/Server)
Topics are the communication channels in ROS. Each topic has a unique name and type. Publisher is the node that send messages to a topic. Subscriber is the node that receive messages from a topic. Even though node is publishing or subscribing the message, that messages are not visible if the node is not in Active state. The node can be at 4 primary states.
Unconfigured
Inactive
Active
Finalized
The FSM can be found here. The node state can be found by a single command.
ros2 lifecycle get <node_name>
All current active topics can be found by a single command.
ros2 topic list
The difference between Service and Actions is the length of given task. Service is for relatively quick task. For example, a client requests one message and a server also response one message and done. The example of Action is when a client request one message and a server response multiple series of messages.
Even though the node is in Active state, the messages cannot be visible if publisher and subscriber QoS(Quality of Service) policy is not compatible each other. ROS2 provides QoS(Quality of Service) policies to help tuning communications between nodes. There are many types of compatibility policies in ROS2.
Compatibility of reliability QoS policies
Compatibility of durability QoS policies
Compatibility of deadline QoS policies
Compatibility of liveliness QoS policies
Compatibility of lease duration QoS policies
Other than understanding ROS2, why C++ and python are important for robotics development. When we develop the ROS2 applications, typically, the client libraries are used. The client library for C++ is rclcpp, and Python is rclpy. They are the only client libraries which maintained by the core ROS2 team. However, there are community-maintained ones out there including Rust.
How to develop robotics software? The core skills are understanding ROS2 and C++/Python. Other skills are required by what kind of area you want to work on. The modern robot’s complexity is too high to develop by a single developer. To build a robot, the collaboration is required by a multiple specialists such as control system engineer, embedded system engineer, algorithm software engineer, devops engineer and more.
Subscribe to my newsletter
Read articles from Hyunwoo Choi directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
