ROS Workspace
Create and manage a ROS workspaces
Names in ROS 2
Names can be:
- absolute path (begins with
/):/global/name - relative path:
relative/name - privately (begins with
~):~private/name - namespace: namespace prefix to apply to entities associated with the node (node name, topics, etc).
/namespace/name, this is very useful to group nodes and topics by “groups” in this case the “group” is the prefix namespace.
Names in ROS
External resources:
The Workspace
The concept of workspace is ROS VERSION independent, with this I mean that it doesn’t matter if you are using ROS 1 or ROS 2, both use the workspace concept.
But, what is a ROS package?… more about it later (see ROS Packages), for now just think about a box/package with some code, configs and more in it, trust me.
The workspace contains:
- Packages contains:
- Executables
- Libraries
- Message definitions
- Config files and more
- Meta-Packages (ROS 1 concept): a package containing other packages
- Metapackages ROS 1
- In ROS 2 there is no explicit type of package know as “meta-package”
Underlay
Underlay workspace.
Let’s explore our underlay workspace: /opt/ros/humble/
Important:
Keep in mind that an underlay does not necessarily have to be the main ROS 2 installation.
Overlay
Note, that for some reason unknown to me, the terms “underlay” and “overlay” are not frequently used in the ROS community. The vast majority of people when they refer to workspace it is usually the overlay workspace.
Overlay workspace.
Create a Workspace
Create a overlay workspace is simple as creating a folder using the mkdir bash command. Just keep in mind that this folder MUST contain a src folder inside. Inside the src folder your packages will live.
mkdir -p ~/ros2_ws/src cd ~/ros2_ws Building a Workspace
The build tool in ROS 2 is called colcon (collective construction). colcon is an iteration on the ROS build tools catkin_make, catkin_make_isolated, catkin_tools and ament_tools. colcon compile, test and install packages for you. colcon internally uses build systems depending on the type of package to compile or test, CMake for C++ packages and setuptools for python.
Open a new terminal and try to run the following commands:
cd ~/ros2_ws colcon build --symlink-install Failure? Why? hint: the ament_cmake is a ROS package that is currently not available.
The option --symlink-install creates a symlink to their original locations instead of copying.
This will create a three folders:
buildinstalllog
Important:
You should always run the build command from the ROOT of the workspace
External resources:
Source a Workspace (Activate it)
Workspace activation (source) is accumulative.
Don’t forget to source your underlay in EVERY terminal you open.
source /opt/ros/humble/setup.bash source install/local_setup.bash External reference on sourcing here
What is the diference on setup.bash in the underlay an local_setup.bash in the overlay?
setup.bashin the underlay under/opt/ros/<DISTO>/setup.bashenables all the packages in the underlay.local_setup.bashin the overlay under (usually)~/<YOUR WORKSPACE>/install/local_setup.bashenables the ONLY the current workspace.setup.bashin the overlay under~/<YOUR WORKSPACE>/install/setup.bashenables the current workspace as well as the underlay it was created in.
Important:
You may need to re-source the workspace after adding new packages
Sourcing Tips
If you want to automate the process of sourcing the underlaying workspace you can use the power of bash in linux:
echo 'source /opt/ros/humble/setup.bash' >> ~/.bashrc Installing Dependencies
Managing dependencies:
rosdep install -i --from-path src --rosdistro humble -y