
Explore the fundamentals of the robot operating system ros, including nodes, topics, messages, and parameters, and learn to build multi-node simulations with Gazebo, sensors, and obstacle-avoidance navigation.
Install terminator with
sudo apt install terminator
In this example we will explore the world of ROS using a simple example. You will build a complete ROS package to calculate the Area and Volume of a Cylinder.
Note:
In the video we did not mention a very important step: when we are sourcing .bashrc, we assume that you have added your development environment to the file, as
source ~/catkin_ws/devel/setup.bash
You can add those lines either by editing the file (with vim or nano for example) or by:
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
In this way, every time you source ~./bashrc you make sure that the development environment is sourced correctly.
If you miss this step you won't be able to see your package among the list of available packages
Also: make sure you apply chmod to your file! That is the second most forgotten command in ROS, after sourcing the environment ;-)
The name of the package is different from our ROS-101 repository because you are meant to create the package and write the code by yourself
This video shows how to approach a ROS architecture: you want to find a good balance between modularity and complexity: you decide the best architecture that does the job at the minimum cost.
Python: is a master on none. It does all well, but does not excel in anything. It's extremely user friendly and forgiving, but at the cost of a slower runtime.
For the sake of our course and many application in real life, the advantage of a compiled language like C++ are negligible (in the milliseconds), so unless you are not creating real-time sensitive applications, you are fine with Python. Furthermore, many libraries, like cv2, are wrappers of C-compiled code, and run very fast, even in a Python project
This is the first time we are creating a Custom message. Custom messages are powerful but try and use already available messages because it will
save you time and
make you compatible with other people's work
In this course we will use
Standard messages http://wiki.ros.org/std_msgs
Common messages and in particular, geometry messages: http://wiki.ros.org/common_msgs?distro=noetic#geometry_msgs
Sensor messages: http://docs.ros.org/en/noetic/api/sensor_msgs/html/index-msg.html
Create a Python ROS node that subscribes to radius, radius squared, and height, then publishes a cylinder message with volume and surface area when all values arrive.
Connect and run a multi-node ROS pipeline to compute a cylinder’s volume from radius and height, using radius squared and publishers and subscribers, then package it with a launch file.
Create and run a ros launch file to start roscore, launch radius squared and cylinder calc nodes, and establish publisher and subscriber topics to compute volume and surface area.
The project is available on our repo at https://github.com/school-of-ros/ROS-101/tree/main/ros_101_tutorial_cylinder
Logging in ROS with Python: http://wiki.ros.org/rospy/Overview/Logging
rqt tools: http://wiki.ros.org/rqt
When we talk about pose, in robotics we mean the 6DOF position and orientation of a system. With this information you can reconstruct the state of your system for monitoring or feedback purposes.
As we will see in further video, you need to read your robot position when you want to navigate to a waypoint.
In this lesson you will be introduced to the basic math and coding necessary to perform autonomous navigation of a 2D robot
Explore creating a wheeled robot description with xacro, definition base footprint and base link, fixed joints, and reusable wheel macros with inertia, visual, and collision geometry.
Learn to set up a robot simulation with a launch file: define robot_description from robot tutorial, start robot_state_publisher and joint_state_publisher, launch gazebo, and spawn the robot tutorial model.
Explore how coordinate frames and transformations organize a robot’s world, mapping frames like odom and map, and using the tf library to convert coordinates between frames.
Learn to obtain the robot's position and orientation by using a tf transform listener to get the transform from odom to base_footprint and convert quaternions to Euler angles.
Learn to add a range finder to a robot using xacro to generate URDF, set its base offset, and visualize it in Gazebo with proper collision, visual, and inertial properties.
If you want to be more conservative with your sensor's reading, You can modify the code and simulate the sonar as the minimum value received rather than the average.
Launch the node in Gazebo and rviz to visualize the sonar range as the robot approaches a cube. Observe the four-degree cone and note false values near the minimum distance.
The "Zero to ROS" course will take you quickly into ROS. You will learn all the essential concepts through hands on examples and assignments. Learn at your own pace: no schedule!
Course Curriculum
Environment setup and Hello World: Setup your work environment with ROS Noetic and write your first Hello World project
Your first ROS Package: Learn the basics of ROS hands on, with a practical example. This section will guide you through the creation of a ROS package, ROS messages and launch files.
Robot Simulation: We will use the popular turtlesim package, a simple 2D robot simulator, to explain the basics of robotic simulation in ROS. You will learn hands on how to deal with transformations, how to control your robot and navigate to a waypoint
Introduction to Gazebo and Rviz: Gazebo is the popular physics simulator, compatible with ROS. Rviz is the popular visualization tool where you can display your robot position as well as sensors readings, planning... Learn how to build and visualize your robot and sensors using Xacro and Urdf
Perception: Gazebo is the popular physics simulator, compatible with ROS. Rviz is the popular visualization tool where you can display your robot position as well as sensor readings, planning, etc. Learn how to build and visualize your robot and sensors using Xacro and Urdf
Obstacle Avoidance: Put everything together and use the available sensors to avoid surrounding obstacles. You will learn to think like a robotic engineer with real world challenges
Final certificate
You will get your Master Certificate if you complete all your assignments: you can learn only with practice.
There will be 5 assignments in the course, each with an increasing level of difficulty.
But don't worry: we are here to help! Assignments are not mandatory to complete the course, but are required to get your certificate
Direct support through Discord
Connect to our Discord server and join our community. Ask questions and submit your assignments. We are here to help!