Posts Tagged ‘cloud robotics’
I was at the Cloud Robotics Hackathon this weekend in Montreal and it was a BLAST! There were tons of teams participating, learning about robotics, programming with Arduino, and there was a MakerBot, some Naos, and a Darwin-OP there! Holy macaroni!
My favourite part at the end was listening to the experiences that people had programming their robot. There were lots of new people to robotics, so it was great.
I worked with Marek over the weekend! He is a super web dev guru, and was also on the Edubotics team at Startup Weekend Montreal. We came up with a pretty crazy project, under the team name of TEAM LIGHTNINGBOTS, because lightning comes from the cloud!
We ended up winning the Montreal part of the Cloud Robotics hackathon! Here is our project’s video!
As a quick summary, we made a network of cheerleading robots for an educational math game that can post the scores on MyRobots, then display them on a robotic scoreboard. Let’s take a look at this in more detail!
Here is the basic setup. There is the math game on the iPad. This app is actually a web app with a very thin native client layer to send data to the robot. It works by sending HTTP callbacks, which the app parses, then sends a packet through the Redpark Serial Cable, which Learning Pet (blue RoboBrrd) receives, parses, then does an action. You can input two digit numbers into the app because there is a specially-tuned delay to do so. You get an unlimited number of tries for answering, and no hints, since this is a basic version of it (proof of concept). The green dots below are showing the number of questions completed and needed to level up. The game repeats once you level up. The game is functional in any modern web browser, so you can check it out HERE! Marek was the one who coded this, and it was developed beforehand at Startup Weekend, so nothing new here.
Now for the new part: when Learning Pet (blue RoboBrrd) receives the data from the app, it also broadcasts the message out through its Xbee to the other two robots. We use the XBee Network Protocol for this, developed by Kris Kortright, but we use my uno-compatible fork of it.
Both Impy (orange RoboBrrd) and MANOI receive this data through their XBees, and are able to act out the actions as well. When you get the answer right, they do a little action of encouragement (MANOI swings its arms, RoboBrrds flap their wings, and Impy changes its eyes green too). When you get the answer wrong, they shake their heads- MANOI looks really scary doing this so you don’t want to get the answer wrong. When you level up, they all do a crazy dance celebration.
Now for the next new part: when Impy (orange RoboBrrd) receives the data from the mesh, it communicates with the computer which is running a Processing application. In the application, it creates a tally of the questions answered, and the number correct, the enthusiasm value (which is just how drastic changes in RoboBrrd’s sensors were), and the “brain power”.
The brain power is determined by the function:
This data is then uploaded to MyRobots every 15 seconds and then cleared out for the next upload batch.
One of the tricky parts was figuring out how to optimize the sending and receiving of packets on Impy (orange RoboBrrds) end. It turned out that we had to listen before we send, or something like that, just to make it work a bit more reliably.
Here’s the next new part: To have the results of the game displayed on a live scoreboard, we used the DFRobot RobotShop rover as a scoreboard. I attached it to the bottom of a soapdish, which gave the treads enough clearance, and some popsicle sticks for support. Marek added the numbers and faceplate to it, and coded it up in Python. The code pulled the live “correct” number score from MyRobots and then called the Arduino to update the motors accordingly. It was pretty sweet!
All in all, the whole system worked great. It’s truly the ultimate social robot network, because we were able to combine so many robots together!
There was a lot of stuff that we developed that we didn’t use or mention though. For instance, Marek created this web nodejs application that can show the same webpage to all clients, and also send tcp messages to everyone connected. CHECK IT OUT HERE! We were going to use this originally as a sort of orchestra or central command console for the robots. He also made a Twitter analyzing program that looks for happy faces or sad faces in the streaming Twitter firehose. The data is being plotted on his MyRobots page for it, which is really cool.
On the first day I worked on getting Learning Pet (blue RoboBrrd) going with the ADK. For some reason it would work fine, I would get up for a break, and then not work. So that night was the turning point in the hackathon when we went with the idea we have now.
The idea we implemented is pretty cool though, since it both sends data to MyRobots and it uses it. We also are using basically 3 clouds in the 1 project, being:
1. The math game web app
2. The local mesh network
All in all, it was a blast! Huge thanks to Marek for his web skills!
I’m definitely looking forward to volunteering at this hackathon next year. Thanks to the organizers for making such an awesome event. SEE YOU IN THE CLOUD!
HAPPY BIRTHDAY ROBOBRRD!
Today is a SUPER day and here are some treats that you and RoboBrrd can enjoy! Or maybe just RoboBrrd will enjoy it, but anyway here they are!
Here is the video about the RoboBrrd Mesh Network: Pulse sensor! This was shown a while ago on the Adafruit Ask an Engineer Show n Tell Google+ Hangout (that’s AAAESNTGH for short)! It’s a little long, but if you can bear with my umm’s and uhh’s, it’s a pretty cool demo. Watch it on YouTube!
The pulse sensor sends data to both RoboBrrds, and the orange RoboBrrd (Impy) sends what hat it is wearing to blue RoboBrrd (Learning Pet). You can look at the code on Github here, and check out the XBee Network Protocol here!
NEXT UP is this really cool new web badges portal by Adafruit. The aim is that their badges and online portal will become ‘Scouts 2.0′, giving out badges to kids for accomplishing electronic goals! They let me beta test it early, so RoboBrrd is up there with it’s Robot Badge!
It’s going to be really interesting to use the API for stuff. For example, one day in the future, when you first load your code onto your RoboBrrd and connect it to the ‘Hello Brrd World’ Processing sketch, then DING it will use the API and contact the adafruit badge servers, and you’ll instantly be awarded a Robot badge! Maybe there will even be a RoboBrrd badge! I dunno how they’re going to handle the authentication for the API keys, but that will be interesting to see.
Today is the kickoff day for the Cloud Robotics Hackathon! I’m really looking forward to working together with my team. There’s going to be a little bit of everything in our project, and you can listen for quick updates @RobotGrrl! The hashtags are going to be #roboticshackathon, #cloudrobot, #cloudrobotMTL. There will be a special Robot Party on Saturday at 8PM ET! See you then!
That just about wraps up the birthday post for RoboBrrd! It has been a BLAST! And the next 100 years are going to be even BETTER! Thanks to all the friends who enjoy keeping up with RoboBrrd’s progress! HIP HIP HOORAY!
Last post I showed some code and a guide on how to connect your robot to MyRobots/ThingSpeak! Now let’s look at how we can read the data from MyRobots. This part will be pretty cool, because you can read other robots data, and have your robot react to it!
I haven’t written up a MAKE Project guide for this yet, but wanted to show it anyway. Here you can get the SimpleThingSpeak_Parse code on Github!
We will be using the JSON Processing library to get and parse the data.
There are three main parts to this code:
1. Reading the entire feed
2. Specific feed field
3. Last entry in the robot feed
Here’s what the basic field structure looks like. The channel data is the info about your robot, and the feeds is an array, with each element being the specific datapoint.
- created_at (str)
- description (str)
- field1…8 (str)
- id (int)
- last_entry_id (int)
- name (str)
- updated_at (str)
- (your entry int here)
– created_at (str)
– entry_id (int)
– field1…8 (str)
So for the accessing entire feed, you can use these functions:
Here’s a very basic example of how to use these functions:
// example, get random stuffs, print it out
int lastEntry = ((Integer)getChannelValue("last_entry_id")).intValue();
int feedsNum = getFeedLength();
println("\nHey! Did you know that " + robotName + ", aka coolest robot in the world was created on MyRobots on " + creationDate + "?");
println("It’s last field1 value that it sent (entry #" + lastEntry + " by the way) was: " + lastField1 + ". Cool!\n");
For the field feed, you can use this function:
For the last entry, you can use this function:
And that is it! You can use the data from the functions and connect it up to your robot. Try it out, get the code from Github!
Send your robot into the cloud with a simple Processing sketch to upload its data to MyRobots or ThingSpeak!
Don’t forget to star/+1/tweet/comment the guide!
If you just want to jump to the code, here is the bare-bones Processing sketch: SimpleThingSpeak!
Be sure to give RoboBrrd some +1′s and friendship requests on MyRobots here!
This guide is a part of the adventure to answer the question “How many MAKE: Projects will it take to get to Maker Faire?”. If you really enjoyed this guide, you can donate towards my Maker Faire travel expenses