Software Challenge

Welcome to Snowbots
Let's get you started

Introduction to the Challenge

What we're looking for with this challenge

The most important thing for becoming a new member on this team isn't prior ability.
You don't have to have to be a coding wizard!
You just have to be willing to pick up the skills necessary when presented with a problem.

The challenges have been created accordingly.
With enough perserverance, you should be able to complete them with only basic programming experience.

Who's this challenge for?

This challenge is for people who'd like to join our software team.

Check here to see if we are recruiting. Our team generally recruits at the beginning of school terms. If you feel that you may have missed the recruitment, feel free to send us an email to see when we will reopen recruitment!

Challenge 1: Getting Set Up

All of our development is done on Linux, more specifically Ubuntu. So, your first challenge is to get Ubuntu and our software stack up and running.
We've written some instructions to help you along, which can be found in our github repository.

Note: If you can complete the challenges through something other then a native Ubuntu install, such as through a VM or other Linux distro, that's fine too, but we're not going to offer any help getting non-native Ubuntu setup's running

Challenge 2: TurtleSim Sine Wave

OK, for this challenge, you'll need some pretty advanced mathematical skills. We're talking basic knowledge of what a sine function is... and that's about it.
Seriously though, you don't need to know any advanced maths to join this team.
Like I said in the intro, we're looking for people willing to learn.

As such, your challange is to have turtlesim draw out a sine wave.
Since the build system for ROS can be kinda complicated, we've provided you most of the framework for what you'll need.

In ~/IGVC-2017/src/challenge/src/solution.cpp you'll find a skeleton project, with a main function and a while loop, alongside a bunch of resources down below. You don't have to use this skeleton project, but we'd recommend it. You should be aiming for a final result that looks something like this:

Note: Please don't just use the keyboard controls to draw this. Yes. We thought of that. As pretty as I'm sure yours is, we're more concerned with your code!

You can also write your solution in python get started here, but the resources below are C++ focused, and that's the language we'd prefer you use

We'd suggest you start by understanding how ROS works here, then walking through the ROS Tutorials (at least all of section 1.1)

We've done a lot of this stuff already, but it's important that you at least understand it. In particular, #5-6, #11, and #13 are important for this challenge. After that, you should be pretty much ready to start! To run the skeleton project we've provided, first source the project by running:

$ cd ~/IGVC-2017 && source devel/
then run
$ rosrun challenge solution.

While you're working, we'd suggest you have the turtlesim reference open (mostly for 2.1.1 and 2.1.2). It also contains some video tutorials, which may be of use. Make sure to take a look at the references for:

geometry_msgs/Twist (The command you send to the turtlebot)
turtlesim/Pose (what the turtlebot is sending you).

You might however, not have to use the turtlesim/Pose, as there are several ways to solve this problem.

Bonus: Make The Turtle Do Something Else

The title sums this one up pretty nicely. You don't have to do this challenge, if you've gotten to this point, you've already done pretty well.
But we encourage people to try things out and bring it to the interview, it helps us know how familiar you are with our system.

Super Bonus: Testing

This one's a fair bit harder, than the previous ones, so don't worry if you don't get it.
For this, we want you to re-write the Challenge package into the non-simple configuration specified in the README (the one with testing) and write (and run) some unit tests for your solution!

References and Resources

C++ Resources

TutorialsPoint C++

Resource better meant for beginners.Best for learning all the basics of C++ step by step

C++ Reference

Documentation for the C++ language, best used as a reference manual after learning the basics

ROS Resources

ROS Overview

Learning the basics of what ROS is

ROS Basics

Tutorials for learning the basic features and functions of ROS

TurtleSim Reference

Turtle things


Great! If you've already booked an interview, bring your solution for us to see, if not, please check this page to see if we're currently recruiting for software, or send us an email to see when recruitment will reopen!