Skip to content
Marc Hanheide edited this page Mar 2, 2022 · 22 revisions

Week 2: First steps with ROS Programming

Preparation

On the simulated robot (gazebo)

  • maybe run sudo apt update && sudo apt upgrade to ensure you have got the latest software available. Also, to ensure you have all relevant packages installed run sudo apt install ros-melodic-uol-cmp3103m (again). If you have not yet installed everything you need for the workshops on your own computer, make sure you follow the steps in Home Installation. Or, if you are using Splashtop to remotely access a lab computer, read Splashtop.
  • To work in simulation, start the simulator, see last week's tutorial at first-turtlebot-tutorial.

Mini Tasks of week 2:

Task 1: Make your robot move using the command line:

  1. Run rostopic list and consider what you see. Also, try rostopic echo /odom and move in simulation using the keyop from last week. What do you see? (This is more exciting on the real robot, you probably have already done it in simulation last week)

  2. use rostopic pub to make the robot move! Try to develop the following command using the Tab key for auto-completion (do not directly copy this, as it will not work):

    rostopic pub /mobile_base/commands/velocity geometry_msgs/Twist "
    linear:
      x: 0.0
      y: 0.0
      z: 0.0
    angular:
      x: 0.0
      y: 0.0
      z: 0.5" -r 1 
    

    (You can stop this command by hitting [Ctrl]-C on your keyboard!)

  3. Watch your turtlebot move. Reflect what is happening. Try to make it go around in a circle (with about 0.5m radius) smoothly by modifying the above command.

  4. Optional, but very relevant: run roslaunch uol_turtlebot_simulator turtlebot-rviz.launch again (you did last week?!) and in particular inspect the output of the robot's sensors! Find out how to display different sensory information of the robots: Pointcloud, "laserscans" (discuss what this actually is, as there is no laser sensor on the robot!), and images.

Task 2: Python programming

  1. Read this tutorial on how to create a publisher in python. Remember that we want to publish a geometry_msgs/Twist to /mobile_base/commands/velocity! Make sure you look back at the code that has been developed live in the lecture as a good example.
  2. To create a workspace and package and start VS Code correctly, please have a look at First Turtlebot coding
  3. Time to code our first Python program using ROS: The goal is (again) to have the turtlebot first go around in a circle of about 0.5m radius, this time from the Python program!
  • In the simulation, you just run the simulation as before, and then your code in VS Code or from the command line.
  1. Now consider how you could implement a behaviour that takes the robot forward if the is more than 50cm space in front of it but make it turn to the left, if there isn’t enough space. This requires you to interpret the data from, e.g., the laser scanner and modify the Twist you publish depending on the data in the Laser scan.
  2. Optional: When you have accomplished this, the next challenge for you is to make it go in the shape of a square of 1m length each side.

Task 3 (optional): Try the above on the real robot

Read Turtlebots! Best course of action:

  1. Connect to the robot: https://github.com/LCAS/teaching/wiki/Turtlebots#connecting-to-the-robot-from-your-browser
  2. start the ROS drivers: https://github.com/LCAS/teaching/wiki/Turtlebots#starting-the-hardware-drivers-tmule-control
  3. We recommend to focus on using the Jupyter Setup, rather than the VPN setup which will only be available if you can setup a VPN on your computer. So, focus on the Jupyter way!

Task 4 (optional): Upload your source code to github (or another online repository)

Read Git and GitHub

Background that may help you

What to send to the robot?*

A Twist message has two parts that are important:

  • Twist.linear: this has x,y,z components for which you can specify the speed in m/s. Please don't go beyond 0.6

  • Twist.angular: this also has x,y,z components and determines how quick the robot should rotate around one of the axes in radians/s. Please don't go beyond PI. To determine which axis you want to move along and turn around, please have a look at the picture below:

    Turtlebot axes

Red: x, green: y, blue: z

Clone this wiki locally