Internship Summary

The internship is officially finished. The work is finished too. I am so proud of it!

First of all, I have written a lot about the lessons and you can see the result on now! There are two simulation sections: “Learning with the TurtleBot in Simulation” and “Challenge in Simulation”. It is important that you can start learning robotics without a real robot. I hope you will enjoy it!

Here is a video about TurtleBot User Experience project.

In addition you can read the post about the project on Open Source Robotics Foundation site.

I am happy that I have participated in the Outreachy program! I liked my project. It was very interesting to work with robots. I like my mentor Tully Foote. He is very responsible. He was able to find right words to support. He inspired me to do new things. Moreover he is very patient! My English is not very good, he wrote some tips in meeting notes and repeated twice if I was confused. The language practice is very important for me too! During the internship I wrote lessons, weekly posts and discussed the results and the goals.

To sum up, I had an amazing experience working with open source project, met new people and practiced my English!



Week 13

The plan for this week was reviewing the challenge section. It was very surprising for me but on this stage I learned one very important thing about ros packages. I used a modification of packages in the tutorial. Previously I used several workspaces: one workspace for each package. Tully Foote said that it is a good practice to use one workspace for all packages which you want to use. It is so simple! I changed some instructions in the lesson. I also added some comments. It is so important to review the text in some time. The pull request to the original repository was created. I think it will take some time to merge it.

The next task was preparing a video with the results. It should be only two minutes in full length and contain introduction, overview of the project and goals and results of the internship. This video contains audio and it is more difficult to create than tutorial video. It is important to prepare a script for the video because it is quite short and it is important to represent all information without long pauses and duplicated information. Tully Foote sent me a template which shows what blocks the video should contain. We also have discussed the script. You will see the result soon :).

It is so strange that the internship is close to the end. From the beginning the more I learned the more interesting tasks were. I like learning new things, I like moments when I understand something more deeply, I like creating lessons and thinking about new topics. There are some more tasks to do and I can do the conclusion of the internship.

Week 12

This phase is “reviewing + testing”.


I had to test all instructions and commands. It means, that you can install something on your computer and forget to mention about this package in the lesson. In another case, you can skip some steps. I used different laptop for independent testing. I installed ubuntu on that laptop. Then I went step by step through tutorial. Firstly, I installed ros-indigo, then packages for TurtleBot. I finished all lessons without any problems.


I finished reviewing the main simulation track this week. I added some comments, fixed some spelling errors and updated some links. Also I reviewed all youtube videos. The video style has changed since the beginning. I wanted to have the same style in all tutorial videos so I modified some annotations.

I have to learn some new features of git: “Rewriting history”. I have just started and this topic looks very complicated.

Wait for the posts next week . There will be two posts: week post and internship summary :).

Note for new Outreachy applicants

When I learned about an Outreachy program I started reading blogs of previous participants. I was not sure if it is a good program and if I am able to do it? I read different blogs. Women participated in various projects. Blogs motivated me to start searching for a project and making an initial contribution. Here is all information about the upcoming Outreachy round. Outreachy program is a great opportunity to work with amazing people on awesome projects! outreachy-poster-2016-May-August

If you are a student you can also participate in Google Summer of Code.

Week 11

This week was really interesting. I have created two lessons. I wanted to make my lessons understandable and explained every steps: not only “do these instructions”, but added a reason for every step. It is a nontrivial thing because we use rocon (multi-master ros). Rocon project has basic definitions and ideas which were not covered in the simulation tutorial. You can find links to the original tutorial in these lessons. Moreover, there are some other difficult topics: running several overlaying packages simultaneously, modifying launch files, using code from github repository.

Also I have changed the example application. Firstly, I thought that basic application it is the best solution. Then, I decided that using TurtleBot follower application is more interesting.

As I mentioned before the idea is to create comfortable tool for interaction between robot and user. There is such a tool in rocon project. There are some modifications: you can launch it on your computer or on your android device. When you launch this tool you can see the role chooser window.


You can be an admin or a user. Then you can see the list of applications that you can run.



Of course, the roles and applications list depends on developer and customer fantasy :).

The process of creating application which you can see in this list consists of two, or even three parts. First, writing the  code of your application. Second, writing all information about how to launch this file, what parameters to use and other settings. This is the functional part of your application. The third part is called “creating interaction”. You have to write all information that you want to show user in this list: icon, name and description of the application, etc.

For better understanding watch this video :).

My internship will come to the end soon, but I have to do a lot of work before. The new phase is coming :).

Week 10

This week was very productive!

I have finished “TurtleBot follower” lesson. Here is my video with TurtleBots. I am driving the first TurtleBot using joystick and the second one is following it.


Also we decided continue work with rocon (multi-master ros). There is a lesson named “Writing your first rocon application” (in progress). The second lesson will be
“Writing your first interaction”. The idea is that the user does not want to know all details of your application. User interacts with robot via gui. You can change the logic, the sequences of launches inside your application and the user always has working program.

In addition, this week I gave help on ros answers, and my suggestions worked :).

I have not mentioned yet that the midpoint of internship has been successfully reached! I want to tell you about teleworking. I think it is very difficult and some people are not well suited to work at home. It has advantages and disadvantages. Before the internship I thought it is not for me, but now I am not sure :).

You should control yourself: set goals, track progress, stay in touch with your mentor. Every participant has to blog about internship every two weeks. My mentor, Tully Foote, said I have to write about the results every week. It means that I will satisfy the requirements and it will be a report about my work. I think it is an excellent idea. I see the results from the start and moreover every week I have some finished tasks.

It saves your money and time. You do not spend time on the road (at least one-hour in the city) and money on your car or transport, lunch at the office. Also you have more flexibility.

I have not got any problems with my equipment or workspace. I am working at my room where I have a computer. I do not need a lot of space because I work with robots in simulation :). I have quite good Internet connection: I can find all information I need and discuss everything with Tully Foote via hangout.

To sum up, working at home is not bad. If you have an offer and the main problem is this is a remote job, try to do it maybe you will like it!

Week 9

I think this week was one of the most difficult weeks in my internship. The idea to launch two TurtleBots in one simulation world is not random. We want to demonstrate following behavior. I can drive the first TurtleBot and the second will follow it. There is a follower package which works in real world. For instance, TurtleBot can follow a person or another robot. The package has not supported simulation. The script is the same for real and simulation world, but you can encountered some problems with launch parameters, settings and features which work only with real robot.

You should understand the structure of ros to find a problem. I will try to explain you idea. Firstly, you launch roscore. Roscore is the center of your system. It consists of three components: rosout, parameter server and master. Rosout is a standard output. Parameter server saves parameters. You can modify them.

You can visualize your system, find information about nodes and connections between them. Imagine that your system is a graph. Each node of this graph has logic and functionality. The edges connect nodes which can communicate. The master knows all information about this graph.

Here is a graph of default system. It is quite big, but it is not complicated to understand.

Selection_025.pngHere is a zoom of one part of this graph. If you select a node (node is an oval) then this node will be highlighted. There is a node named /mobile_base_nodelet_manager. Also there are inner and outer edges. Inner edges mean that the node subscribes to these topics. These topics are blue. Outer edges mean the node publishers data to these topics. These topics are green.  There is a cyan topic. The node subscribes and publishers to this topic. More complicated system will have more nodes.


The better you know the system, the faster you find a problem. It takes a lot of time to find a problem. Now the follower demo works! I have to record video and write a new lesson. Then we will discuss a new challenge for the TurtleBot tutorial!

Django Girls Moscow

This weekend I participated in Django Girls event as a coach! Django Girls is a free one-day workshop for beginners, where everybody can learn how to build a website using Django and Python. Honestly, when I saw that event I wanted to apply. Then I found the tutorial and started to do it. It was very interesting. I decided to finish the tutorial and got prepared to be a coach. I met a lot of amazing people at the event. The girls in my team were very positive and eager for knowledge! I enjoyed this event!

I recommend you to participate in this event. You can be an attendee or a coach or even an organizer.

  • If you want to be an attendee check the upcoming event list. You do not have to know Python or Django. Workshop is for people who are new to programming. If you are a woman and have a laptop — you can apply! At the event do not be shy and ask any questions you have! The tutorial is excellent and I am sure you will like it too.
  • If you want to be a coach you should not be an expert in Python. You should have a desire and some time to go through the tutorial before the event.
  • If you want to be an organizer you can find an organizer manual on the site. I do not know a lot about this role.

You can find all information on the official site. Moreover you can contribute to this project in other way (for instance, translate the tutorial in your language). Check “contribute” section on the site.


Learn new things and do not be afraid to ask questions!

Week 8


This week I want to tell you about contribution to open source project. There are a lot of different tips “how to start contributing”, “how  to find a project”, “how to install git (or other version control system)”. Here are some tips from my experience:

  1. The most important thing is to be interested in the project. You should want to improve it. For instance, you use some program. It is very useful. Then you want to upgrade it for your needs. If it is a useful feature you can share your changes with other users. There is another example: you want to learn some tools. You go through the tutorial step by step. You have a problem with a step and you understand that the author has skipped something or information is outdated. You spent a lot of time to find an answer. You can update this step (or even a line) and the next user won’t have the same problem. These are only two examples and your goal can be different.
  2. You should create an account on github or bitbucket, or anything else where the project is situated.
  3. You should search carefully for the instructions how to contribute to this project. It can save your time and time of other contributors. For instance, in gazebo tutorial you can find “Development” section. There are three lessons: “Add/Modify tutorials”,  “Contribute code”, “Development process”. You can find rules there.
  4. The most common method is to fork the repository and then work with it. After finishing work you can create a pull request. Don’t worry if you change something wrong! Firstly, you can revert the changes. Secondly, your changes are available only for you. The pull request has to be approved before other users will be able to see your changes. Of course, check your changes twice before uploading them :).
  5. You can edit a file online. It is very comfortable when you want to edit articles. You can find instructions how to use this feature in bitbucket help page. You can edit the files on github in the similar way.

This week I have also learned how to launch robots (not TurtleBot) in gazebo world, how to move them. I have used the code from tutorial and I have had a problem: “the cube does not move linearly”. You can see it in this video:

Then my mentor and I discussed it. He advised to change the gravity in the world. The cube starts moving as I wanted. You can see it in this video:

I have not understood that physic rules really work in gazebo before this case. Then I have encountered with differential drive in code. And now I understand how it is realized!

I think that it is interesting to have two TurtleBots in one gazebo world. It takes some time to understand how simulation works. Now I am learning more complicated features of using gazebo.

Week 7


I was writing python code all this week. I was rewriting files again and again. It is a very important role to write a tutorial with code examples. When I did homework at university I wanted to have a working file. I often wrote it without comments! But now these files can be used as an example. Users can modify it, add new features but the base will be the same. I want to have clear and readable code.

Firstly I have written a working example. It had the logic that I wanted. Then I understood that I can do it simpler. I have rewritten it. Then I discussed the logic with my mentor and we decided to change something. I have rewritten it again. In the next tutorial I can use this file but I should modify it. What do you think? Yes, I have rewritten it again. At the end my mentor approved it, but mentioned that I can update it later :).

Also I have changed one existing file and created one more. I have realized that python it is a very convenient language for parsing file. I have an yaml file with input data.  Yaml format is a standard format for saving settings. My yaml file looks like this:

- {filename: 'table.png', position: { x: 1, y: 2}, quaternion: {r1: 0, r2: 0, r3: -0.628, r4: 0.778}}
- {filename: 'bookshelf.png', position: { x: -3, y: 1}, quaternion: {r1: 0, r2: 0, r3: 0.936, r4: 0.353}}

It has a good structure. User can easily read and modify it. You can find more information and yaml examples here.

You can read data from yaml in python with two lines:

with open("route.yaml", 'r') as stream:
   dataMap = yaml.load(stream)

Previously I worked only with C++ language. I used python only in my private goal (to do something quickly). Now I think that it is interesting to write in python too.

Week 6

This week I have learned several new things in different areas.

I have written my own python script which takes a photo. I have written three lessons in tutorial: “Taking a photo”, “Taking a photo using code” and “Recording a video”. When I were studying these areas I have encountered some problems and I have found the same problems on ros answers. Ros answers is an open source question and answer forum. I hope that after publishing this tutorial such problems will not appear. Here is a video from TurtleBot camera:

I have learned some information about licensing of using videos, pictures and source code. These licenses are different.

Firstly, about video. It is the simplest one in my case. You can use youtube video as embedded video on your blog and on your site (at least on non-commercial).

You can not use picture without a link to source, if it is not a picture from public database or your own. Even if you have included this link the owner can send an email with complaint. I have read the advice that the best way is to ask a permission to use the photo. Unfortunately when I asked a permission to use a photo from newspaper with a link to its site they said that can not help me. During searching for information about this problem I have seen different situations. I can give you one advice: be careful using photos from different sources.

Using source code. It’s a misthought that you can use code without license, because there is the default license that this code belongs to the author. There are different licenses of using code. The code in the tutorial is under 3-BSD license. You can read about BSD-license here.

You should be very attentive when you use third-party resources in your project especially if it is commercial.