To complete this workshop please arrive with:
- A basic understanding of Ubuntu Linux
- A basic understanding of Python and C++
- A laptop running either:
- Ubuntu 18.04 and ROS Melodic or
- Ubuntu 20.04 and ROS Noetic
- Please follow the installation instructions here
- Ask a mentor if you get stuck, and we'll be happy to help
- Access to the Internet (you'll need to download 1-2 GB)
- Ask a mentor for Wi-Fi access details
- Access to this GitHub repository (consider adding a SSH key)
Note: While any development environment can be used for this course, for beginners we recommend the free VSCode source code editor.
This course material has been developed in our spare time. As you work through the workshop, please consider contributing any suggestions or edits back -- it's easy! Please fork the repository you want to update and do a “pull request“ (PR) when you're ready for us to review. For the full process, read up on “Git Flow” here.
Review the Presentation Notes
Topics:
- Filesystem Architecture
- Computational Graph
- Community
- References
Complete the ROS Beginners Tutorials
Topics:
- Directory structures for Catkin workspaces
- Creating packages
- Nodes and topics
- Bag files
- Viewing
rqt_graph
- About
tf
andtf trees
- Parameters and services
- Writing a publisher and subscriber nodes
- Publishing and subscribing in the same node
- Using
rviz
- Using
roslaunch
Complete the ROS Intermediate Tutorials
Topics:
- Creating a new package by hand
- Managing dependencies
- Running ROS across multiple machines
- Writing launch files for large projects
- Creating a URDF
- Visualising a robot in
rviz
- Visualising a robot in Gazebo
Make sure you can answer these questions before proceeding:
- What's a
node
and atopic
? - Have you recorded a bag file, and what does the
rosbag play --clock
parameter do? - Have you used
rqt_graph
to check what topics a node is subscribed to? - Do you know what a URDF is?
- What's the "tf tree" and have you used
rqt_tf_tree
for introspection? - How would you check how many messages a node is sending per second?
- How to create custom messages using ROS message description language?
- How to add external packages' nodes in a launch file?
- How to edit your package's
CMakeLists.txt
file to add the source of ROS nodes, messages, services, etc. for compilation? - How do you remap a topic name when starting a node in a lanch file?
- What is an workspace "overlay" in Catkin?
- What is the difference between a ROS package and a Debian (Ubuntu) package?
Click for answers!
- A node is an executable that uses ROS to communicate with other nodes. Nodes can publish messages to a topic as well as subscribe to a topic to receive messages
- If you are playing back a bag file with
rosbag play
, using the--clock
option will run a Clock Server while the bag file is being played - Well, have you?
- The Unified Robot Description Format (URDF) is an XML specification to describe a robot. URDF is an XML format that describes a robot, its parts, joints, dimensions and properties
- tf is a package that lets the user keep track of multiple coordinate frames over time. tf maintains the relationship between coordinate frames in a tree structure buffered in time, and lets the user transform points, vectors, etc between any two coordinate frames at any desired point in time
rostopic hz [topic]
- Simply place a
.msg
file inside the msg directory in a package. More information found here include file="$(find ros_package_name)/path_to_launch.launch"
- Information can be found here
- The remap tag allows you to pass in name remapping arguments to the ROS node that you are launching in a more structured manner than setting the args attribute of a node directly. The remap tag applies to all subsequent declarations in its scope (launch, node or group)
- Overlaying refers to building and using a ROS package from source on top of an existing version of that same package. In this way your new or modified version of the package "overlays" the installed one
-
- ROS Package: A ROS package might contain ROS nodes, a ROS library, datasets, configuration files, third-party software, or anything else that logically constitutes a useful module. The goal of a ROS package is to provide functionality in an easy-to-consume manner that is reusable. In general, ROS packages follow a "Goldilocks" principle: enough functionality to be useful, but not too much that the package is heavyweight and difficult to use from other software.
- Debian Package: A Debian/Ubuntu package is a
.deb
file that allows for applications or libraries to be distributed via theapt
package management system. Packaging allows automated installation, upgrading, configuring, and removing computer programs for Debian/Ubuntu in a consistent manner. One or more Debian packages can be built from a single source package. A single Debian package can contain multiple ROS packages. Debian Policy requires that each.deb
file is built with a particular structure and format but there are many methods of arriving at these files.
- Whenever you open a new terminal window remember to run
source devel/setup.bash
from theworkspace/src
directory - After you have changed a file within a package you need to run
catkin build
from theworkspace/src
directory - Often packages cannot be installed with
sudo apt-get install
as they might not have arosdep
key! If this is the case, clone the package manually and build within your workspace - If
rosrun
does not find your package, use--force-discover
The second part of this workshop consists of four application areas that are worked on over four days. The workshop material is cloned from these repositories:
- Monday: Sensor Integration and URDFs
- Tuesday: SLAM & Navigation
- Wednesday: Perception
- Thursday: Manipulation
The fifth day (Friday) integrates these application areas to build a simulated robot that can navigate its environment, finding and picking up cubes:
- Friday: Mobility Plus Manipulation
Across these five days, you will incrementally build a catkin
workspace called workshop_ws
. Each day will build on the previous, so make sure you end each day with a working solution!
Try to figure out how to create a `catkin` workspace yourself, otherwise, click here to for answer!
mkdir -p ~/workshop_ws/src # Creates a workspace directory named workshop_ws.
cd ~/workshop_ws/src
For each day, clone the repository linked below into the
src/
directory of the workspace workshop_ws
.
Try to figure this out yourself first, otherwise, click here to for answer!
E.g. for the sensor-integration repository, you'd type:
cd ~/workshop_ws/src
git clone https://github.com/ros-workshop/sensor-integration.git
Or if you are using SSH keys:
cd ~/workshop_ws/src
git clone git@github.com:ros-workshop/sensor-integration.git
Build and then source the workspace.
Try to figure this out yourself first, otherwise, click here to for answer!
-
Note: If this command fails, install catkin tools following the instructions here.
-
Tip: Source any workspaces you want to extend before running
catkin build
.
cd ~/workshop_ws
catkin build
source devel/setup.bash
Monday: Sensor Integration and URDFs
Topics:
- Creating a URDF
- Visualising your robot
- Fixing a broken URDF
- Adding a sensor to a robot
- Controlling a simulated robot
- Detecting an obstacle and stopping the robot
Tuesday: SLAM & Navigation
Topics:
- Creating a map using a lidar
- Simultaneous Localisation and Mapping (SLAM)
- Using move_base for navigation
- Finding an object by navigating around a map
Wednesday: Perception
Topics:
- Using a camera to detect Apriltags
- Using a real camera with ROS
- Camera calibration
- Fusing lidar and camera/DNN data for person detection and localisation
Thursday: Manipulation
Topics:
- Creating a Moveit configuration package
- Moving Your robot in
rviz
- Using the Moveit class in a node
- Creating a OctoMap using a depth camera
Friday: Mobility Plus Manipulation
Topics:
- How to integrate multiple ROS nodes together
- How to create a robot in a Gazebo world that finds and picks up as many cubes as it can