As an author, I am supposed to say few words about how wonderful
and interesting ROS2 is, how robotics takes over the world and so on...
Nope.
ROS2 is around for many years yet it is still poorly documented.
When you look at forums, you may notice that to find answers people
sometimes have to go through ROS2 source code!
And I do realize that a single person can not change that.
Or can I?
As I study ROS2, I am going to document my "discoveries" here, trying to make it as readable as possible. The complete code will always be provided, I am going to make sure it works before making it available, and so on.
That said, ROS2 keeps changing, so code that works on a current version (I use Foxy) might not work on the next version. This is beyond my control.
And yes, it is ROS2, and always ROS2. A huge problem with ROS(2) tutorials
is that people write "ROS" instead, Google has no idea how to index it, and
when you do search, you get mixed ROS/ROS2 results. Then you read half of a post
just to discover that it was for a previous version, not for ROS2.
I know it is hard to type an extra character, but I am going to do my best. ROS2.
Here. See?
The reason for choosing ROS2 is purely practical. At some point, ROS will be no longer supported, so to build your career, you have to learn ROS2. Yes, it is buggy, poorly documentsd and keeps changing. But learning it now in a slow way is better, than to have to switch to it in a hurry, five years from now.
Unrelated note: in sections below, I provide directory structures for packages I created. Additionally, all those packages refer to an outside folder src/worlds that contains "worlds" - as the models of the "worlds" are common, there is no need to duplicate them in each package.
├── worlds
│ ├── empty.world
│ ├── maze.sdf
│ └── shapes.sdf
The archive for worlds files is available here.
ROS 2 packages for working with Gazebo are located in a meta package named gazebo_ros_pkgs. The packages support ROS 2 Crystal and later and Gazebo 9 and later; they can be installed from debian packages or from source.
It means that gazebo_ros_pkgs comes as part of Ubuntu repos, and we don't have to
take extra steps to save it.
Additionally, we may need core tools (repos again).
Make sure you install packages below. Also keep in mind that this is
one of the main sources of confusion: when something "just does not work"
in ROS2, often it is because you don't have one of those packages
(and I can not promise that I have provided a complete list!)
Once again. Imagine: something doesn't work. No meaningful error
messages, mixed and confusing info on forums. And chances are,
you simply haven't installed something.
Galactic (Ubuntu 20
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
sudo apt upgrade
sudo apt install ros-galactic-desktop
sudo apt install ros-galactic-ros-base
sudo apt install ros-dev-tools
sudo apt install ros-galactic-ros2-control ros-galactic-ros2-controllers ros-galactic-gazebo-ros2-control
sudo apt install ros-galactic-gazebo-ros-pkgs
sudo apt install ros-galactic-ros-core ros-galactic-geometry2
sudo pip3 install setuptools
sudo apt-get install ros-galactic-joint-state-publisher-gui ros-galactic-xacro
sudo apt install ros-galactic-navigation2
sudo apt install ros-galactic-nav2-bringup
sudo apt install ros-galactic-slam-toolbox
sudo apt install ros-galactic-robot-localization
sudo apt install ros-galactic-robot-state-publisher
sudo apt install ros-galactic-rviz2
# sudo apt install ros-galactic-teleop-twist-keyboard
sudo rosdep init
rosdep update
# src like ~/SnowCron/ros_projects/harsh
rosdep install --from-paths src --ignore-src --rosdistro galactic -y
sudo apt install python3-colcon-common-extensions
# Note: changed API after this version
pip install opencv-contrib-python==4.6.0.66
sudo apt install ros-galactic-aruco
# Robotic arm
sudo apt install python3-vcstool
sudo apt install ros-galactic-test-msgs
sudo apt install ros-galactic-control-toolbox
sudo apt install ros-galactic-gazebo-ros-pkgs
sudo apt install ros-galactic-xacro
sudo apt install ros-galactic-joint-state-publisher-gui
pip install tinyik
pip install pyproj
pip install geopy
# With the visualization feature:
pip install tinyik[viz]
# Transformations tree tool
sudo apt-get install -y ros-galactic-rqt-tf-tree
rosdep install --from-paths ./ -i -y --rosdistro galactic --ignore-src
sudo apt-get install ros-galactic-ros2-control ros-galactic-ros2-controllers
sudo apt update && sudo apt install blender
sudo apt install ros-galactic-gazebo-ros-pkgs
source /opt/ros/galactic/setup.bash
#pip install trimesh
#pip install pymesh
#pip install pydae
#pip install pymeshfix
pip install open3d
#pip install vtk
python3 -m pip install scipy
or
sudo apt-get install python3-scipy
pip3 install filterpy
#pip3 install tensorflow
pip install rtree
pip install "pyglet<2"
sudo apt install ros-galactic-tf-transformations
sudo pip3 install transforms3d
pip install customtkinter
Humble (Ubuntu 22
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
sudo apt upgrade
sudo apt install ros-humble-desktop
sudo apt install ros-humble-ros-base
sudo apt install ros-dev-tools
sudo apt install ros-humble-ros2-control ros-humble-ros2-controllers ros-humble-gazebo-ros2-control
sudo apt install ros-humble-gazebo-ros-pkgs
sudo apt install ros-humble-ros-core ros-humble-geometry2
sudo pip3 install setuptools
sudo apt-get install ros-humble-joint-state-publisher-gui ros-humble-xacro
sudo apt install ros-humble-navigation2
sudo apt install ros-humble-nav2-bringup
sudo apt install ros-humble-slam-toolbox
sudo apt install ros-humble-robot-localization
sudo apt install ros-humble-robot-state-publisher
sudo apt install ros-humble-rviz2
# sudo apt install ros-humble-teleop-twist-keyboard
sudo rosdep init
rosdep update
# src like ~/SnowCron/ros_projects/harsh
rosdep install --from-paths src --ignore-src --rosdistro humble -y
sudo apt install python3-colcon-common-extensions
# Note: changed API after this version
pip install opencv-contrib-python==4.6.0.66
sudo apt install ros-humble-aruco
# Robotic arm
sudo apt install python3-vcstool
sudo apt install ros-humble-test-msgs
sudo apt install ros-humble-control-toolbox
sudo apt install ros-humble-gazebo-ros-pkgs
sudo apt install ros-humble-xacro
sudo apt install ros-humble-joint-state-publisher-gui
pip install tinyik
pip install pyproj
pip install geopy
# With the visualization feature:
pip install tinyik[viz]
# Transformations tree tool
sudo apt-get install -y ros-humble-rqt-tf-tree
rosdep install --from-paths ./ -i -y --rosdistro humble --ignore-src
sudo apt-get install ros-humble-ros2-control ros-humble-ros2-controllers
sudo apt update && sudo apt install blender
sudo apt install ros-humble-gazebo-ros-pkgs
source /opt/ros/humble/setup.bash
#pip install trimesh
#pip install pymesh
#pip install pydae
#pip install pymeshfix
pip install open3d
#pip install vtk
python3 -m pip install scipy
# or
sudo apt-get install python3-scipy
pip3 install filterpy
#pip3 install tensorflow
pip install rtree
pip install "pyglet<2"
sudo apt install ros-humble-tf-transformations
sudo pip3 install transforms3d
pip install customtkinter
pip uninstall numpy
pip install numpy==1.23.5 # A version known to work with OpenCV 4.6.0.66
pip install opencv-contrib-python==4.6.0.66
$ sudo apt-get remove gazebo-*
$ sudo apt remove ~nros-galactic-* && sudo apt autoremove
$ sudo rm /etc/apt/sources.list.d/ros2.list
$ sudo apt update
$ sudo apt autoremove
# Consider upgrading for packages previously shadowed.
$ sudo apt upgrade