Welcome to Synthiam!

Program robots using technologies created from industry experts. ARC is our free-to-use robot programming software that makes features like vision recognition, navigation and artificial intelligence easy.

Get Started
Asked — Edited

My New Project?

I'd like to ask the group for some input on what my next software project should be. Here is my list of software project currently:

1.) Automated learning for EZ-Face (to make it easier to train faces during run time)
2.) An Instant Message type chat interface to ARC (this would allow you to chat with ARC and your robot through text chat rather than speech. I invision this used more for children or adults with disabilities.)
3.) A KITT Knight Rider voice screen and data display for ARC (this would display the text-to-speech in a graphic display)
4.) An IronMan Jarvis voice and data display interface for ARC (this would provide a sort of Jarvis themed front end for EZ-Builder)
5.) An Email interface for ARC (so ARC can send and recieve emails with text messages and file attachments)
6.) Weather interface for ARC (so ARC can pull weather data and report on condition)
7.) An Amber Alert feed for ARC (not very practicle, but it might be cool to feed in Amber Alert (A US based child in danager alert system) data to ARC with a possible integration with EZ-Face that on the off chance that your robot spots a missing child, it would recognize them based on the Amber Alert)
8.) Roborealm interface with ARC (Roborealm for $50 really does a lot of neat video processing and hopefully they will integrate an interface for EZ-Robot, but I'd like to make my own until they do because the features in Roborealm I really like are locating a laser, finding the floor, path finding and most importantly Object Recogntion!)

As I work on these, I plan to integrate them with ARC just like I did for EZ-Face and I plan to make them open source, just like EZ-Face.

I would like your input on which ones you'd like to see first and would want to use with your robot.

Thanks! :)

AI Support Bot
Related Content
United Kingdom
I'm just learning C# so using Jarvis as the examples. I wont claim to be anything more than just a beginner at this stage. I have used other software (vox commando, event ghost) for a few years to run Jarvis with the Wunder API plugins.

At this stage I'm just studying other peoples code or modifying it to suit my needs and get familiar with C#. Heres some, slightly modified code for a quick wunder api app.


// Example Wunderground API test code for C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Xml;
using System.IO;

namespace Wunderground_API_Test
class Program
static void Main(string[] args)
//Start program
Console.WriteLine("Starting Weather Undeground Web API Test...");
string wunderground_key = "XXXXXXXXXXXXXX"; // You'll need to goto http://www.wunderground.com/weather/api/, and get a key to use the API.

parse("http://api.wunderground.com/api/"; + wunderground_key + "/conditions/q/UK/Cheltenham.xml");

// End.
Console.WriteLine("Press any key to exit.");

//Takes a url request to wunderground, parses it, and displays the data.
private static void parse(string input_xml)
string place = "";
string obs_time = "";
string weather1 = "";
string temperature_string = "";
string relative_humidity = "";
string wind_string = "";
string pressure_mb = "";
string dewpoint_string = "";
string visibility_km = "";
string latitude = "";
string longitude = "";
string feelslike = "";

var cli = new WebClient();
string weather = cli.DownloadString(input_xml);

using (XmlReader reader = XmlReader.Create(new StringReader(weather)))
// Parse the file and display each of the nodes.
while (reader.Read())
switch (reader.NodeType)
case XmlNodeType.Element:
if (reader.Name.Equals("full"))
place = reader.Value;
else if (reader.Name.Equals("observation_time"))
obs_time = reader.Value;
else if (reader.Name.Equals("weather"))
weather1 = reader.Value;
else if (reader.Name.Equals("temp_c"))
temperature_string = reader.Value;
else if (reader.Name.Equals("relative_humidity"))
relative_humidity = reader.Value;
else if (reader.Name.Equals("wind_string"))
wind_string = reader.Value;
else if (reader.Name.Equals("pressure_mb"))
pressure_mb = reader.Value;
else if (reader.Name.Equals("dewpoint_string"))
dewpoint_string = reader.Value;
else if (reader.Name.Equals("visibility_km"))
visibility_km = reader.Value;
else if (reader.Name.Equals("latitude"))
latitude = reader.Value;
else if (reader.Name.Equals("longitude"))
longitude = reader.Value;
else if (reader.Name.Equals("feelslike_c"))
feelslike = reader.Value;


Console.WriteLine("Place: " + place);
Console.WriteLine("Observation Time: " + obs_time);
Console.WriteLine("Weather: " + weather1);
Console.WriteLine("Temperature: " + temperature_string + "°C");
Console.WriteLine("Feels Like: " + feelslike + "°C");
Console.WriteLine("Relative Humidity: " + relative_humidity);
Console.WriteLine("Wind: " + wind_string);
Console.WriteLine("Pressure (mb): " + pressure_mb);
Console.WriteLine("Dewpoint: " + dewpoint_string);
Console.WriteLine("Visibility (km): " + visibility_km);
Console.WriteLine("Location: " + longitude + ", " + latitude);


I'm sure that would be very simple to pass the details through to ARC.

Basically, it just needs something to parse the XML. Here is an example XML of the weather report I just asked for;


<title>Weather Underground</title>
<full>Cheltenham, United Kingdom</full>
<state_name>United Kingdom</state_name>
<full>Lansdown - G4GVZ, Cheltenham, GLOUCESTERSHIRE</full>
<city>Lansdown - G4GVZ, Cheltenham</city>
<country>UNITED KINGDOM</country>
<elevation>243 ft</elevation>
<observation_time>Last Updated on March 19, 10:25 PM GMT</observation_time>
<observation_time_rfc822>Wed, 19 Mar 2014 22:25:20 +0000</observation_time_rfc822>
<local_time_rfc822>Wed, 19 Mar 2014 22:25:36 +0000</local_time_rfc822>
<weather>Scattered Clouds</weather>
<temperature_string>47.5 F (8.6 C)</temperature_string>
<dewpoint_string>45 F (7 C)</dewpoint_string>
<windchill_string>48 F (9 C)</windchill_string>
<feelslike_string>48 F (9 C)</feelslike_string>
<precip_1hr_string>0.00 in ( 0 mm)</precip_1hr_string>
<precip_today_string>0.00 in (0 mm)</precip_today_string>
I vote for 1.) Automated learning for EZ-Face (to make it easier to train faces during run time)
Steve can you tell me more about your thoughts of what you think would be cool for the iRobot Create. I don't have any hands on experience with them. As I understand it you can send commands to drive you Create but you can't currently take advantage of any of it's built in sensors? As long as the new EZ-B4 can recieve serial data I don't think it'll be too hard to read that sensor data into ARC. I took a peek at the Create documentation, the serial protocal looks straight forward. :)
I think learning/training faces in real time would build on what you have already developed and seems very popular....and item 8 Object Identification! " The screwdriver you are using seems to be the wrong one for its intended purpose" :)
@irobot58 I've been experimenting for a while with object recogntion, shape matching, and optical charactor recognition and all the examples I have seen and used have been horriable. Roborealm blew me away with its object recognition. I'm going to work on an interface between ARC and Roborealm for sure, because if we had an easy to use interface and like DJ Sures pointed out in another post if there were some real world examples that made it easier to integrate (like ARC is) the functionality of Roborealm would really open up some new doors for our robots...for one thing, our robots would know what a door looks like! :)

I think my new top 3 projects are now:
1.) EZ-Face updates - working towards automated faces learning
2.) ARC to Roborealm interface
3.) Visual interface to make Jarvis, KITT, and other robotics type faces/animations integrate with ARC
Having a virtual home base in a corner, then sending the robot to a specific location, on a 2D MAP.
Create does great on hard surface floors sending it to certain distances and angles. IT is fairly accurate performing 90 degree angles left and right returning to center.
Here are a couple of similar links. One using a square bumper to realign Create to it's home base to correct any drift. Maybe the bumper triggers right and left bumper sensors giving movement adjustment to the virtual grid?
The first link is the Groma Create Robot from RobotShop, the video will explain more.

Groma mapping


I agree adding features to EZ FACE would be great.
Thank you for asking for input from users.
Steve S
I love your 3 choices! Perfect! Not knowing anything about the recognition software, it seems weird that recognizing something as complex as a face is easier then a rectangle door! or a round ball etc... *confused*
United Kingdom
Well since the weather one isn't in your top 3 I'm very tempted to make that my first C# project that'll run as an ARC module. Maybe... If I can wrap my head around C#:)
United Kingdom
Hey Justin,

EZ-Face looks totally awesome - can't wait to start using it when my kit arrrives :D:D

I hadn't heard of Roborealm before, but it looks like an incredibly powerful tool - so I would welcome anything that you could do to open it up to EZ users!

Take care and keep up the great work!

EZ- Object_Recognition and mapping:)

I posted a few interesting videos on mapping in another thread.

Rich, weather is up there...it might end up being one of the first ones I complete. I tend to switch between projects and using the Google weather service looks pretty straight forward. I'm drawn towards the Google api because I don't think there is any license (free or paid).

I'm open to collaboration on the weather app or any others. We could always end up with two weather apps because I think the one you are using is a little fancier then the Google offering.
United Kingdom
Well to be honest, I know extremely little about C#... Like nothing lol.

Wunderground API, while it needs an account and is limited to a certain number of calls per day, is free and the number of calls is higher than I've ever needed (and my heating system calls for the external temperature, wind speed and wind direction every minute, so 1440 calls per day... I think)

I will admit I am a bit of a Wunderground fanboy since I've used it for as long as I can remember to be honest. I've not looked in to any others (if it aint broke don't fix it).

I'll be largely basing my code on that I posted last night, which could very likely be altered for any other API. Depending on my progress with C# I may even add in options for a selection of APIs to use (Wunderground, Google, Yahoo, Met office, etc. etc. etc.)

We shall see:)

If you do the roborealm integration you should be able to use the roborealm AVM navigator plugin.

It does object recognition and path navigation.


Also take a look there are C# examples for parsing the roborealm API XML and using example 52 of the SDK you can get the values of variables into ARC and vice versa.

For example you can use the sendcommand method from example 52 in the EZ-SDK combined with the getvariable method from the roborealm API C# examples

While you would need more code than whats shown below I used these methods from the roborealm examples and EZ-SDK example 52 to pass values to ARC.

SendCommand code snippet:


/// <summary>
/// Send command string to the ARC connection.
/// The input buffer will be cleared, then it will send the command, finally it reads the response.
/// There is always a response from the ARC Script Interface:
/// - If you are expecting to receive data, the response will be the received data.
/// - If you are not expecting to receive data, the response will be "OK"
/// </summary>
private void sendCommand(string cmd)


Log("Sending: {0}", cmd);


_tcpClient.Client.Send(System.Text.Encoding.ASCII.GetBytes(cmd + Environment.NewLine));

catch (Exception ex)

Log("Command Error: {0}", ex);


getVariable code snippet:


public String getVariable(String name)
if (!connected) return null;
if ((name == null) || (name.Length == 0)) return null;

if (send("<request><get_variable>" + escape(name) + "</get_variable></request>"))
// read in variable length
String buffer;
if ((buffer = readMessage()) != null)
if (xml.parse(buffer))
return xml.getFirst();

return null;

Both method being use in a forms button:


private void button1_Click(object sender, EventArgs e)
string myParam;

// The NV_OBJECTS_TOTAL is a variable inside AVM plugin
myParam = getVariable("NV_OBJECTS_TOTAL");

\\ Sets the $x variable inside ARC to the NV_OBJECTS_TOTAL value.
sendCommand(string.Format("$x = {0}", myParam));

Justin, you've got a Great program there.
South Africa
for better object recognition use a kinect and to give something mapping capabilaties you can use a laptop like this robot Loki but is made buy ardiuno


he uses a laptop and kinect for most of his projects here is loki


Click To Watch Video

he told me try out ez robot for a simple way of programming
The easiest and most robust vision processing software I have found is RoboRealm. You can even connect a Kinect for use with, rather than using the API's to make your own program. I'm still working on a bridge application between ARC and RoboRealm.

I have not been programing or working on robots much. I've been dealing with a sick doggy. My American Bulldog is having heart issues. For my fellow dog owners on the forum I'm sure you can relate - a sick doggy makes for bad times.

The bridge app is still on my radar though. :-)
Justin, good luck with your sick doggy. I just lost a Boston terrier to cancer last year so I can sync with your issue.
So sad to hear about your pup. I just lost my cataholua this past Thanksgiving to brain cancer. It was a nightmare. I truly hope you can get your dog through this.

A robot that reads my emails and reports weather sounds very very cool. I like the added functionality. It takes them beyond mere toys.