Even if we would like to, engineering students do not receive proper ROS training during their undergraduate period.
This is a problem when students get engaged in the development of the Msc Thesis inside one of the labs of the University, or want to start their PhD. The students must dedicate a long time to get up to speed in ROS, before they can really use the code that is there already.
Typical option for the lab is to provide to the student with a computer, and a link to the ROS Wiki tutorials. Hence the student will pass the days and weeks trying to get the most of it.
Here we propose a smooth learning path for your interns in order to maximize their learning speed. This path is inspired by the book The first 20 hours, and basically consists of four steps:
1. Deconstruct ROS
Deconstructing ROS means to identify the different parts that compose ROS. This work has to be done by somebody that already knows ROS. We have done that work and identified the following main parts:
- Installation and setup
- Basic organization of the development environment with ROS (catkin workspaces, compilers issues, CMakeLists, IDE configuration)
- Basic subjects: packages, roscore, rosparam server
- Topics: publishers, subscribers, messages, how to create your own messages
- Services: clients, servers, service messages, how to create your own service messages
- Actions: clients, servers, service messages, how to create your own action messages
- Debugging tools: rviz, rqt_console, rqt_graph, rosbags
- How to make a robot navigate: mapping, localization, path planning and obstacle avoidance
- How to make a robot perceive: blob detection with OpenCV, object recognition, point cloud usage, people detection and recognition
- Gazebo simulations
- URDF robot creation
- Robot Control
- How to make a robot manipulate objects: MoveIt! usage, combining perception with manipulation, grasping
The previous points cover a global knowledge of ROS. This does not mean that your students will have to learn it all. Those points just express the most common subjects required for the creation of an autonomous robot (like for example the ones used in the Robocup@home competition).
2. Remove stuff
That is, we eliminate as many things as possible, things that are not really necessary right now. The idea is to get the 80% of the results with the 20% of the effort.
C++ or Python?
For the moment, we eliminate the necessity to use C++ for ROS. Using C++ in ROS introduces three problems:
- First, the C++ version of ROS includes a lot more of concepts, like the node_handle, the callback_queue or having to deal with the threads of each callback (if you want them in parallel). Python handles all that by itself.
- Second, by using Python, the student will have to know just the minimum of CMake handling. Making the proper CMakeLists.txt in C++ is a nightmare. Instead, in Python you almos no need to touch the default one.
- Using C++ for ANYTHING, makes the development a lot harder and by hence slower. And here speed is the key. The faster you can close the loop of doing something and experiencing the result, the faster the brain of the student will make the connection that makes him learn the concept. With C++, compilation problems are of the first order.
I know you must be thinking: but C++ is our development language!! They need to learn in that language.
However, starting their development in C++ is a bad idea, because it makes the pill to swallow a lot bigger. Even if you need the student to use ROS with C+, I recommend you to start with Python (even if the student doesn’t know about Python!!!)
Unless the student is a master of C++, the following path:
Learning Python -> Learning ROS with Python -> Learning ROS with C++
is faster than the path:
Learning ROS with C++
Even if the student already know C++, the additional amount of knowledge required to get ROS using that language makes the evolution very slow.
The student doesn’t need to know about how to install. Starting with the installation is a waste of time, since at that point the student knows nothing about ROS and may have trouble about the installation. ROS installation is a stupid step, that has nothing to do with ROS or intelligence or knowledge. It is just an experience, that the student will be able to do faster when he already knows ROS.
So we suggest you avoid that step to your students.
How to create a catkin_ws
Again, this is a concept that is difficult to grasp if you don’t know ROS and understand the problems of programming with it. Trying to make the student understand why he has to create a catkin_ws, how to do it and where, is a waste of time. The student will not understand and keep coming to this point once and every time, slowing the progress speed.
Other points to remove
Other points to avoid are, configuring IDEs for programming with ROS (you must provide it done), what is ROS (who cares), how to setup Gazebo (provide it). Basically, you have to remove barriers, physical, emotional and mental, that make the work of learning ROS a lot harder.
So in this point what we propose is that you have a system already set up and working for the student, and that he concentrates on learning ROS for Python.
3. Learn ROS
Here is were the student has to dedicate the time to learn. But the learning has to be done intelligently, that means, following a proper order and with the option of self-correcting at each step. The faster the self correction is produced, the faster the learning will be.
We propose you to provide to your students with the following sequence of tutorials of ROS (from wiki.ros.org), which we have found to be optimal for faster learning:
- Creating a ROS package
- Understanding rosnodes
- Understanding topics
- Writing a publisher and a subscriber
- Using rqt_console and roslaunch
- Understanding services and parameters
- Writing a service and a client
- Creating ROS msg and srv
- Writing a simple action client
- Writing a simple action server
- Defining custom messages
- Recording and playing back data
- Visualization tutorials
- ROS control
- ROS Navigation
- PCL with ROS
4. Practice (a lot)
In order to learn fast, the student has to practice. Copy + paste of the code of the wiki does not count as practice. Practice means, providing the student with exercises to be solved (without solution provided). The exercises have to be tied to a simulation, so the student can see the results of his efforts quickly and with a meaning. Providing just a number example, for example a topic publishing a text, is not good enough to get the student engaged. And engagement here is key if we want the student to learn quickly. The student will be a lot more motivated if he can see the result of his efforts in a robot. We recommend to provide simulated robots, since they provide the possibility of testing quickly.
Practice should include an exam, if possible. Students learn the most under the stress situation of an evaluation. Sorry, but it works like that (I did not make the rules).
Super important: in order to apply the method and speed up learning, the student has to be practicing at least 20 hours in a row. Dedicating 20 hour focused in the important points will create a momentum that will increase the speed of learning.
So how can you have your students up to speed with ROS fast? This is a summary of what we have said above:
- Provide a fully setup environment. Complete ROS + Gazebo + development IDE installed computer.
- Provide the student with the optimal list of tutorials to follow (either the one above of your own), but do not just point the student to the ROS wiki.
- Provide a full list of exercises that the student has to solve, without providing the solution.
I know that all that is a lot of work but if you want to invest on that once, you will speed up the process of integration of new students in your lab, and your results will raise.
Another option that you have is to use the services of Robot Ignite Academy. In our academy we provide everything already done for your student, organised in the proposed manner, including development environments, robot simulations, exercises and exams. Everything already working, and requiring only a web browser. No installation required, any computer will work. Give it a try!