Greetings!

If any of the info on this website was useful for your projects or made your head spin with creative ideas, and you would like to share a token of your appreciation- a donation would be massively appreciated!

Your donation will go to my Robotics Fund, straight towards more sensors, actuators, books, and journeys. It takes a lot to continue building these robots, and I’m really thankful of everyone who helps encourage me along the way.


USD


CAD

“A wise robot once said to me through Serial.println- that robots teach us about ourselves.”

All posts tagged cloud robotics

Cloud Robotics Hackathon!

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!

Cloud Robotics Hackathon - TEAM LIGHTNINGBOTS!

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.

Cloud Robotics Hackathon - TEAM LIGHTNINGBOTS!

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.

You can grab their code on Github here!

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:
(correct/tries)+enthusiasm+(100*levelnumber)

Cloud Robotics Hackathon - TEAM LIGHTNINGBOTS!

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.

You can grab the code for the Processing sketch on Github here.

Cloud Robotics Hackathon - TEAM LIGHTNINGBOTS!

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!

Cloud Robotics Hackathon - TEAM LIGHTNINGBOTS!

Cloud Robotics Hackathon - TEAM LIGHTNINGBOTS!

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
3. MyRobots

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!

RoboBrrd Mesh Network- Pulse Sensor and HAPPY BIRTHDAY!

HAPPY BIRTHDAY ROBOBRRD!


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.

Check out RoboBrrd with the Robotics badge! Woootooo!

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!

Reading Data from MyRobots / ThingSpeak

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.

channel
- created_at (str)
- description (str)
- field1…8 (str)
- id (int)
- last_entry_id (int)
- name (str)
- updated_at (str)

feeds
- (your entry int here)
– created_at (str)
– entry_id (int)
– field1…8 (str)

So for the accessing entire feed, you can use these functions:

  1. Object getChannelValue(String valueName)
  2. Object getFeedValue(String valueName, int feedEntry)
  3. int getFeedLength()

Here’s a very basic example of how to use these functions:

  1. // example, get random stuffs, print it out
  2.   String robotName = (String)getChannelValue("name");
  3.   String creationDate = (String)getChannelValue("created_at");
  4.   int lastEntry = ((Integer)getChannelValue("last_entry_id")).intValue();
  5.   int feedsNum = getFeedLength();
  6.   String lastField1 = (String)getFeedValue("field1", (feedsNum-1));
  7.  
  8.   println("\nHey! Did you know that " + robotName + ", aka coolest robot in the world was created on MyRobots on " + creationDate + "?");
  9.   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:

  1. Object getSpecificFeedValue(String fieldName, String valueName, int feedEntry)

For the last entry, you can use this function:

  1. Object getLastEntryValue(String valueName)

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!