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 ARC) 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! :)


ARC Pro

Upgrade to ARC Pro

Don't limit your robot's potential – subscribe to ARC Pro and transform it into a dynamic, intelligent machine.

#1  

@JustinRatliff I like the weather interface idea, roborealm interface and the Ironman Jarvis voice, or maybe even a female robotic voice of some kind. Looks like you got your work cut out for you on all the things you want to do :-}

#2  

For most of us iRobot (Create, Roomba) owners, I would think a room mapping application would be really nice.

#3  

Justin, I like the automated learning idea for EZ Face. Great program, any improvement features would be an added plus. I frequently use the RSS feed from RICH. A weather interface would also be useful and practical. An Ironman or Woman voice and data display sounds interesting. I would use the female voice. Not sure if you mean like an A.I.? I agree with Robot-Doc, any navigation system for IRobot Create and Roomba users would be nice. The EZB4 will have send and receive serial commands. I currently can send serial commands to Create having it move calculating angles and distance in realtime, but I will need help with an interface that can translate data from the Create with the new EZB4. There was also talk about an EZ Robot navigation system. An interface program that could fully communicate with these Irobot platforms would be very welcomed and a users dream. Thank you, Steve S

United Kingdom
#4  

I got to Weather Interface and just wanted to say that I have already successfully added weather to my Jarvis/ARC using Weather Underground's API. While I don't currently use ARC for this as my "other software" handles this better (better parsing of the information) I have got a script (somewhere) where it requests the info and speaks it. I'll see if I can dig out the info on it to help you with yours.

Here's Jarvis dynamically responding to me telling him I'm going out, based on the weather report (using Weather Underground's API)

And here's Jarvis giving the weather report (visually and verbally)

If I have time later I'll dig out my notes on the api etc. In my opinion, weather underground is the best of the weather report apis out there. It's also what I use on a few other things (such as my heating control which compensates for the weather conditions so in reality I need it to be fairly accurate)

#5  

I'm all for the room mapping and the Jarvis Front end.

Im actually using a jarvis application i helped develop for the AI core of my bot. it's kinda similar to rich's. With it i can carry on conversations, check internet sites, run searches, and control different appliances and lighting in my apartment through a z-wave system i have set up. it doesn't integrate directly with ARC though which would be an awesome feature.

#6  

Rich, the Weather Underground's API looks interesting. Are you building your custom Jarvis app in .Net or something else? I was learning towards using Google weather call function. I was going to use Google's email interface as well for sending and recieving email. I know EZ-Robot has a Twitter interface, but I thought an email interface would be more private. I think it would be cool for people to have their robot email them on condition around the house or if it needs help. Likewise you could send your robot an email to issue it a command. And I know there are several other ways to do that, I just really like the idea of an email interface.

Our robots could email eachother too, LOL. :D

United Kingdom
#7  

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.");
            Console.ReadKey();
        }

        //Takes a url request to wunderground, parses it, and displays the data.
        private static void parse(string input_xml)
        {
            //Variables
            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"))
                            {
                                reader.Read();
                                place = reader.Value;
                            }
                            else if (reader.Name.Equals("observation_time"))
                            {
                                reader.Read();
                                obs_time = reader.Value;
                            }
                            else if (reader.Name.Equals("weather"))
                            {
                                reader.Read();
                                weather1 = reader.Value;
                            }
                            else if (reader.Name.Equals("temp_c"))
                            {
                                reader.Read();
                                temperature_string = reader.Value;
                            }
                            else if (reader.Name.Equals("relative_humidity"))
                            {
                                reader.Read();
                                relative_humidity = reader.Value;
                            }
                            else if (reader.Name.Equals("wind_string"))
                            {
                                reader.Read();
                                wind_string = reader.Value;
                            }
                            else if (reader.Name.Equals("pressure_mb"))
                            {
                                reader.Read();
                                pressure_mb = reader.Value;
                            }
                            else if (reader.Name.Equals("dewpoint_string"))
                            {
                                reader.Read();
                                dewpoint_string = reader.Value;
                            }
                            else if (reader.Name.Equals("visibility_km"))
                            {
                                reader.Read();
                                visibility_km = reader.Value;
                            }
                            else if (reader.Name.Equals("latitude"))
                            {
                                reader.Read();
                                latitude = reader.Value;
                            }
                            else if (reader.Name.Equals("longitude"))
                            {
                                reader.Read();
                                longitude = reader.Value;
                            }
                            else if (reader.Name.Equals("feelslike_c"))
                            {
                                reader.Read();
                                feelslike = reader.Value;
                            }

                            break;
                    }
                }
            }

            Console.WriteLine("********************");
            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;

Quote:

<response> <version>0.1</version> <termsofService> http://www.wunderground.com/weather/api/d/terms.html </termsofService> <features> <feature>conditions</feature> </features> <current_observation> <image> <url> http://icons-ak.wxug.com/graphics/wu2/logo_130x80.png </url> <title>Weather Underground</title> <link>http://www.wunderground.com</link>; </image> <display_location> <full>Cheltenham, United Kingdom</full> <city>Cheltenham</city> <state/> <state_name>United Kingdom</state_name> <country>UK</country> <country_iso3166>GB</country_iso3166> <zip>00000</zip> <magic>7</magic> <wmo>03633</wmo> <latitude>51.90000153</latitude> <longitude>-2.08333302</longitude> <elevation>62.00000000</elevation> </display_location> <observation_location> <full>Lansdown - G4GVZ, Cheltenham, GLOUCESTERSHIRE</full> <city>Lansdown - G4GVZ, Cheltenham</city> <state>GLOUCESTERSHIRE</state> <country>UNITED KINGDOM</country> <country_iso3166>GB</country_iso3166> <latitude>51.894821</latitude> <longitude>-2.089248</longitude> <elevation>243 ft</elevation> </observation_location> <estimated></estimated> <station_id>IGLOUCES14</station_id> <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> <observation_epoch>1395267920</observation_epoch> <local_time_rfc822>Wed, 19 Mar 2014 22:25:36 +0000</local_time_rfc822> <local_epoch>1395267936</local_epoch> <local_tz_short>GMT</local_tz_short> <local_tz_long>Europe/London</local_tz_long> <local_tz_offset>+0000</local_tz_offset> <weather>Scattered Clouds</weather> <temperature_string>47.5 F (8.6 C)</temperature_string> <temp_f>47.5</temp_f> <temp_c>8.6</temp_c> <relative_humidity>91%</relative_humidity> <wind_string>Calm</wind_string> <wind_dir>WSW</wind_dir> <wind_degrees>247</wind_degrees> <wind_mph>0.0</wind_mph> <wind_gust_mph>17.0</wind_gust_mph> <wind_kph>0.0</wind_kph> <wind_gust_kph>27.4</wind_gust_kph> <pressure_mb>1019</pressure_mb> <pressure_in>30.09</pressure_in> <pressure_trend>+</pressure_trend> <dewpoint_string>45 F (7 C)</dewpoint_string> <dewpoint_f>45</dewpoint_f> <dewpoint_c>7</dewpoint_c> <heat_index_string>NA</heat_index_string> <heat_index_f>NA</heat_index_f> <heat_index_c>NA</heat_index_c> <windchill_string>48 F (9 C)</windchill_string> <windchill_f>48</windchill_f> <windchill_c>9</windchill_c> <feelslike_string>48 F (9 C)</feelslike_string> <feelslike_f>48</feelslike_f> <feelslike_c>9</feelslike_c> <visibility_mi>6.2</visibility_mi> <visibility_km>10.0</visibility_km> <solarradiation/> <UV>0</UV> <precip_1hr_string>0.00 in ( 0 mm)</precip_1hr_string> <precip_1hr_in>0.00</precip_1hr_in> <precip_1hr_metric>0</precip_1hr_metric> <precip_today_string>0.00 in (0 mm)</precip_today_string> <precip_today_in>0.00</precip_today_in> <precip_today_metric>0</precip_today_metric> <icon>partlycloudy</icon> <icon_url>http://icons-ak.wxug.com/i/c/k/nt_partlycloudy.gif</icon_url>; <forecast_url> http://www.wunderground.com/global/stations/03633.html </forecast_url> <history_url> http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IGLOUCES14 </history_url> <ob_url> http://www.wunderground.com/cgi-bin/findweather/getForecast?query=51.894821,-2.089248 </ob_url> </current_observation> </response>

#8  

I vote for 1.) Automated learning for EZ-Face (to make it easier to train faces during run time)

#9  

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. :)

#10  

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" :)

#11  

@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

#12  

Justin, 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

sites.google.com/site/irobotcreate2/create.exesourcecode

I agree adding features to EZ FACE would be great. Thank you for asking for input from users. Steve S

#13  

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
#14  

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
#15  

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!

Jay

Australia
#16  

EZ- Object_Recognition and mapping:)

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

Hais.

#17  

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
#18  

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:)

#19  

@JustinRatliff

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

It does object recognition and path navigation.

http://www.roborealm.com/help/AVM_Navigator.php

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:

/// &lt;summary&gt;
        /// 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 &quot;OK&quot;
        /// &lt;/summary&gt;
        private void sendCommand(string cmd)
        {

            try
            {

                Log(&quot;Sending: {0}&quot;, cmd);

                clearInputBuffer();

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

                Log(readResponseLine());
            }
            catch (Exception ex)
            {

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

                disconnect();
            }
        }

getVariable code snippet:


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

                if (send(&quot;&lt;request&gt;&lt;get_variable&gt;&quot; + escape(name) + &quot;&lt;/get_variable&gt;&lt;/request&gt;&quot;))
                {
                    // 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(&quot;NV_OBJECTS_TOTAL&quot;);

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

#20  

Justin, you've got a Great program there.

South Africa
#21  

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

website

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

Loki

Click To Watch Video he told me try out ez robot for a simple way of programming

#22  

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. :-)

#23  

Justin, good luck with your sick doggy. I just lost a Boston terrier to cancer last year so I can sync with your issue.

#24  

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.

#26  

:0{

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