Robô Bombeiro 2013

Recently some colleagues and I participated in the Robô Bombeiro 2013 (Firefighter Robot) competition, which has been organized by the Guarda Polytechnic Institute for 11 consecutive years. The objective of the competition is to build a robot that is able to navigate in a maze-like environment, find a fire (which is represented by a candle), and extinguish it. Participants are free to choose whatever design they want for their robot, and how they want to extinguish the flame. The environment has 4 rooms which are connected by corridors. In the entrance of a room there is always a white line that the robot can detect. The configuration of the environment can change, for instance, certain doors might be placed in a different location and an obstacle (represented by a sheep) can block a corridor in one of three places.

Robô Bombeiro 2013 Guarda

There are several different modes that a team can choose to participate in for extra points. In one of the modes, for instance, the robot must start its mission after it detects a sound with a certain frequency, instead of waiting for the push of a button. In a different mode, the robot must start and end in a random room, instead of the the regular white circle. The competition had 22 teams in the high school league and 24 in the university league. Our robot, IEEE Firefighter, competed in the university league, and our team was composed of seven BSc, MSc and PhD students. It was our first robotics competition and we had only one month to prepare. Due to the lack of time, we took the easiest route: we built our robot using the Lego Mindstorms NXT. Our robot was equipped with a rotating turret that enabled it to quickly scan a room for a candle with two infrared/flame sensors, three sonars for obstacle avoidance, a color sensor to detect the lines at the entrance of the rooms, and a fan to put out the fire. Due to the NXT’s limited sensor and actuator ports, we added an Arduino with a Bluetooth module, which controlled the two flame sensors, a microphone, a couple of buttons and the fan.

IEEE Firefighter

Things started going badly as soon as we got to the venue. The conditions we tested our robot in proved to be quite different from the real thing. The environment’s floor gave us some headaches because of our robot’s tracks, and the 35º Celsius in the gym were messing with the infrared sensors. We also had to tweak our algorithm because of the “sheep” obstacle, since we kept knocking it down. After spending the whole morning changing things, we had to hand in our robot to the judges.

There were a total of three rounds, and every robot had to be tested. This translated to roughly 90 minutes per round. I wasn’t expecting it to be such an intense experience! Waiting for your team’s name to be called out, and then hoping that both your algorithm and hardware work perfectly is totally nerve-wracking. Usually in other types of competition, such as sports, you are in direct control of your actions and you can affect the outcome of a match. In this case, we simply had to observe as our little robot did what we programmed it to do.

In the first round we were able to quickly put out the fire and ended up in a surprising first place. In the second round, we were successful at putting out the fire but unable to return to the starting position. This placed us in the 2nd overall position. The third and final round was a disaster for us. Our robot crashed on its way to the candle and it kicked us all the way back to 7th place. We were a bit sad at first, but we quickly bounced back – it was a great result for our first try. Next year we’ll try to enter the competition again, but with a few kinks ironed out. A huge thanks to the team! Here’s a group photo – Adriano, Paulo, moi, Mário, Tiago, Carlos and Vasco. See you next year, Guarda!

IMG_0360

Europass LaTeX package (europecv) with a webpage field in the personal information section

This version of TeX’s europecv package adds support for a website in the personal information section of the CV. europecv is a TeX style for the Europass Curriculum Vitae, which was published by Nicola Vitacolonna in 2006. Since Nicola is no longer supporting the package, I added the website field and a default translation of the field for every language (“Website”). Feel free to add a more correct translation for your language. In order to use the new field, just add \ecvhomepage{\url{http://yourhomepage.com}} to the personal information section.

You can find the new package at github in the following URL: https://github.com/miguelduarte42/europecv

Bluetooth communication between Arduino and Lego NXT using leJOS

The Lego NXT is a robotics platform that makes it easy to start creating robots with standard Lego pieces, an “intelligent brick” and a wide variety of sensors and actuators. One of the problems of the NXT is that it only has 3 motor ports and 4 sensor ports. If you want to extend the amount of sensors and actuators that the NXT can have access to, a solution is to use an Arduino with a Bluetooth module. In our case, we used the leJOS firmware for the NXT, which allows us to write the code for the robot in Java.

The first step is to pair both devices, which you can do by going to the Bluetooth menu  on the NXT. Afterwards, you can access the Arduino through its Bluetooth ID via the Java code:

It is VERY important that you use the RAW mode (NXTConnection.RAW) when connecting to a Bluetooth device other than another NXT brick. By default leJOS sends some extra bytes with every communication, which can mess up your data transmission. After the connection is established, you can open the input and/or output streams and start sending data:

Make sure that you read data from the stream on a different thread if you don’t want your robot to block while waiting for data. In our case, the NXT brick was communicating with an Arduino. Here’s an example of how that looks like:

Something that gave us some headaches was the difference between Serial.print() and Serial.write(). The value that you pass to Serial.print(), even if it’s an int, gets converted to its corresponding character. For instance, Serial.print(5) will send the character ‘5’, which corresponds to the ASCII value of 53. If you want to send the integer 5, use Serial.write(5).

Why should you become an IEEE volunteer?

IEEE logo

If you’re in the technology field, you have probably heard of IEEE before. It is the largest professional organization in the world, with over 400.000 members in more than 160 countries. IEEE is associated to over 1000 scientific conferences annually, and publishes over 100 peer-reviewed journals. However, IEEE can do much more for students than providing scientific knowledge. This post is aimed at students, both graduate and undergraduate, and tries to explain how IEEE can have a major contribution to your personal and professional development.

Student Branches (SB)

The easiest way to get started in IEEE is to join the local Student Branch in your university. The SB is the way that students can get support from IEEE and participate in all the activities. Many universities already have an IEEE SB, but if yours doesn’t, try to contact someone from a nearby university and they should be able to help you start one.

One you have signed up for a membership, and associated yourself with a Student Branch, it’s time to get busy. In a Student Branch, you’ll probably find like-minded people. From my experience, it is the best way to find pro-active people with similar interests in an academic environment. Each SB must have a small management team (chair, vice-chair, and a few other people), but this is just a small part of the Student Branch’s activities Most of the SB’s members’ energy will go towards creating cool activities and disseminating knowledge. Our SB at ISCTE-IUL has only been created around one year ago, but we have been fairly active. Here are some examples of activities you can participate in and organize.

Workshops

IEEE ISCTE-IUL python workshop

Workshops are the easiest events to organize. You probably have lots of talented people in your SB. Is anyone a master in Python? Maybe someone is a web design expert, or has lots of experience with node.js. Open a “call for workshops”, and let your members submit ideas. It’s a win-win situation: the speaker gains some presentation skills, and the audience learns about a new subject. Two key issues when organizing a workshop are marketing and logistics. It’s important that you announce the workshop in advance using both physical (posters, flyers) and virtual channels (facebook, twitter, e-mail). In terms of logistics, don’t forget basic things such as making sure you have a big enough room, having a place to sit for every participant,  and power and internet connection if you’re hosting a technical workshops.

An interesting idea is to borrow a workshop from a different SB. In our case, we invited members from the University of Porto’s IEEE SB to host a Python workshop at our university, and it was a total success. We are also taking one of our members to Greece for a big bootcamp on web development at the IEEE University of Central Greece SB.

Societies and Chapters

Societies are special-interest groups, such as Robotics and Automation, Power and Energy, or Computer Society, and there are dozens of different Societies in IEEE.  A Chapter is the embodiment of a Society in a local community, such as a Student Branch. A few of your members can join up and start a Chapter within your SB and have access to finantial support for activities, expert knowledge, competitions, grants, and special events.

Student Branch Congresses

IEEE Student Branch Congress Porto 2013

One of the most rewarding things about being an IEEE volunteer is to be able to meet like-minded individuals and work together towards ambitious goals. One of the ways of fostering networking are Student Branch Congresses. There are national and regional Congresses, and usually some members of each SB receive financial support for travel expenses. Our SB has been present at several congresses, such as the Iberian Student Branch Congress in Oporto, the Portuguese Student Branch Congress in Guimarães, and the Region 8 Student Branch Congress in Madrid.

Grants and Competitions

IEEE strives to support its members through the awarding of grants and scholarships, or by fostering competitions. There are many grants up for grabs, and some are not even listed on the main page. Sometimes it is necessary to browse the website of each Society to find some grant opportunities. In terms of competitions, there are also plenty available. There are challenges for everyone, from the Student Paper Contest, to the Best Student Branch Website, and the famous IEEE Xtreme Programming (a 24h programming marathon).

Improving Yourself

If you’re not an IEEE volunteer, you’re missing out on an amazing way of getting the tools that will help you achieve your goals. At the end of the day, being an IEEE volunteer is all about improving your soft and hard skills, getting involved in cool projects, meeting awesome people, and making stuff happen. Check if your university has an active Student Branch and join up. Otherwise, just get a bunch of friends and start your own SB!  It’ll be one of the most important decisions in your academic life. I’ll leave you with a video from our friends at the IST Student Branch.

Coming soon: Google DevFest Portugal

Google DevFest Portugal

Ladies and gentlemen, if you live in Portugal, love technology and haven’t signed up for Google DevFest, my question for you is: what the hell are you waiting for? Google DevFest will take place in ISCTE-IUL on the 1st and 2nd of March. We will have a 24h hour hackathon, lots of workshops related to Google technologies (Maps, Earth, Android, etc), food to keep you going and prizes for the best hacks.

Keep in mind that the signups end soon and that we are limited to 200 participants. Make sure you put an effort on your personal pitch, because that’s the only way we can pick people out of the crowd. You can learn more at our official blog. Hope to see you there!