# pubsub - ROS2 Package Python Library for ROS2 Topic Publisher & Subscriber, Service Host & Client, Actions Server & Client. Disclaimer: ``` Created for University Course "Roverentwicklung für Explorationsaufgaben" Institute for Space Systems University of Stuttgart. Created by Patrick Winterhalder, Institute of Space Systems, University of Stuttgart (2020), Edited by Christopher Herr (2023) ``` ## Workshop Prerequisites In order to run ROS2 you must install **Ubuntu 20.04 LTS** on a capable machine (preferrably desktop/laptop). * Install [Ubuntu 20.04](https://help.ubuntu.com/lts/installation-guide/index.html) For a successful workshop you must conduct [this installation on your desktop machine](https://egit.irs.uni-stuttgart.de/RoverLehre/ROS2_pubsub/src/branch/master/non-ros-files/workshopinstall.sh) or [this installation on your Raspberry Pi](https://egit.irs.uni-stuttgart.de/RoverLehre/ROS2_pubsub/src/branch/master/non-ros-files/rpi_install.bash). Go through the commands of these *.bash file line by line and check if every commands finishes without errors! Following these .bash files should do the following: * Install Visual Studio Code using the [Ubuntu Software Installer](https://wiki.ubuntuusers.de/Ubuntu_Software/) * Install [Git](https://linuxconfig.org/how-to-install-git-on-ubuntu-20-04-lts-focal-fossa-linux) (no account required yet) * Install [ROS2](https://index.ros.org/doc/ros2/Installation/Foxy/Linux-Install-Debians/) (choose "desktop" on PC or "base" on Raspberry Pi, this eliminates all GUI tools from the installation, e.g. rviz and rqt). * Also install _argcomplete_ * No need for _ROS 1 bridge_ or _RMW implementations_ * Install and update _rosdep_ After successfully installing ROS2 you should get to know it by working through the ["Beginner: CLI Tools"](https://index.ros.org/doc/ros2/Tutorials/) tutorial. This will teach you how to [configure your ROS 2 environment](https://index.ros.org/doc/ros2/Tutorials/Configuring-ROS2-Environment/) and you will learn about: * Source setup files (understand **Underlay** & **Overlay**) * How to configure the .bashrc file (shell startup script), a good example is [here](https://egit.irs.uni-stuttgart.de/RoverLehre/ROS2_pubsub/src/branch/master/non-ros-files/bashrc_overlay.bash)) * Add all _colcon_ workspaces to the shell startup script * Check environment variables (check for correct installation) * Configure *ROS_DOMAIN_ID* (DDS Network Number) * Work through the tutorials covering _turtlesim, rqt, topics, services, actions_ ## Install Instructions The following steps describe how you can create a local copy of this repository containing ROS2 publisher and subscriber class templates. * Move to your colcon workspace `cd ` (eg. `cd ~/colcon_ws`) * Clone this repository: `git clone https://egit.irs.uni-stuttgart.de/RoverLehre/ROS2_pubsub.git .` (include `.` at the end of the command in oder to copy everything to this locations!) * Build workspace: `colcon build` , __Note:__ Only the files inside _/src/_ are of importance. * Remember to run `source ~//install/local_setup.sh` after every build. In order to avoid this repetitive command, add line 23-27 from [_.bashrc_](https://egit.irs.uni-stuttgart.de/RoverLehre/ROS2_pubsub/src/branch/master/non-ros-files/bashrc_overlay.bash) to your shell startup script for every overlay you want to source. This script runs everytime you start a new console, thus loading your overlays automatically. This is very handy if you are working with multiple _colcon_ workspaces (overlays) simultaneously. ## Deprecation Error when building Solution: * https://answers.ros.org/question/386341/ros2-userwarning-usage-of-dash-separated-install-scripts-will-not-be-supported-in-future-versions-please-use-the-underscore-name-install_scripts/ * https://answers.ros.org/question/396439/setuptoolsdeprecationwarning-setuppy-install-is-deprecated-use-build-and-pip-and-other-standards-based-tools/ ```$ pip install setuptools==58.2.0``` ## Workshop Content In this workshop you will: * Create a new _colcon_ workspace * Create a new package inside your newly created _colcon_ workspace * `ros2 pkg create --build-type [ament_cmake, ament-python] ` * Build your _colcon_ workspace, this means making it a functional ROS2 workspace from which you can start nodes: * First move to your workspace root: `cd ~/` * Run `colcon build --symlink-install` * Add your workspace overlay to the shell startup script for sourcing everytime you open a new console: * Add [this](https://egit.irs.uni-stuttgart.de/RoverLehre/ROS2_pubsub/src/branch/master/non-ros-files/bashrc_overlay.bash) to the end of .bashrc (`sudo nano .bashrc`) * In [this template](https://egit.irs.uni-stuttgart.de/RoverLehre/ROS2_pubsub/src/branch/master/non-ros-files/bashrc_overlay.bash) find all instances of "`~/ws_overlay_foxy`" and replace it with the path to your own _colcon_ workspace (replace `~/` with `$HOME` for representing the home directory variable in bash scripts) * Create custom message (*.msg) or service (*.srv) files in order to create custom interfaces to exchange information between nodes. For this you can use the pre-made `/custom_interface` package and add your own *.msg and/or *.srv files using this [instruction document](https://egit.irs.uni-stuttgart.de/RoverLehre/ROS2_pubsub/src/branch/srv_tests/src/custom_interfaces/Readme.md) (__easy__), or you can start from scratch by following [these instructions](https://egit.irs.uni-stuttgart.de/RoverLehre/ROS2_pubsub/src/branch/master/non-ros-files/instructions_custom_topics.md) (__hard__). ## Rules and Standard In order for your code to work and to prevent major problems please read through [this document](https://egit.irs.uni-stuttgart.de/RoverLehre/ROS2_pubsub/src/branch/master/non-ros-files/Programming_Rules.md). This will give you a brief oversight over how to develop a ROS2 package using Python. ## Presentation The workshop's content is covered in [this presentation](https://egit.irs.uni-stuttgart.de/RoverLehre/ROS2_pubsub/src/branch/master/non-ros-files/ws-05-ros-workshop%20%281%29.pdf). ## Further Documentation: * `pubsub/pubsub/` [Readme.md](None): Information on the example files and libraries to create communication interfaces between ROS nodes. * `custom_interface/` [Readme.md](None): Instructions on how to create additional custom interfaces using this pre-made ROS package.