Monday, March 28, 2011

Autonomous Robotic Vehicles

Interesting stuff, I have to say that the 'mind control' tag line is a bit misleading.  Maybe this is more like 'hands free driving'... ;-)

Robots Podcast #74 (25Mar2011): Mind Control

Slide for 2011Mar25 Robots Podcast, Episode 74: Mind Control


Raul Rojas, who was also featured in Robots Podcast Episode 64: Autonomous Vehicles, returns to discuss the work being done at AutoNOMOS Labs to develop an interface that allows a person to direct a largely autonomous vehicle with their thoughts. He is followed by Geoff Mackellar, CTO and Research Manager of Emotiv, developers of the EPOC neuroheadset used by AutoNOMOS Labs. Finally, the web page for this episode links to a TED talk given by Tan Le of Emotiv.

Thursday, March 24, 2011

LabVIEW RESTful Web Services

Here are some notes about another LabVIEW example that I thought was really good:

Weather Station Monitor Example

1)  Deploy weather data.lvlib
2)  Run Update Weather Data VI
3)  Open the Tools>>Options dialog. Click on the Configure Web Application Server button and ensure that the Application Web Server is enabled.
4)  Click OK and save changes.
5)  Build and Deploy the Weather Monitor RESTful Web Service from the Build Specifications item in the project.
6)  Open a web browser on the local PC and browse to the following URL:  http://localhost:8080/weather/station/2507987

NOTE: The default port that the NI Application Web Server listens on is 8080. If this port has been modified, the above URLs need to change to use that port.

I hope to see more work in the next few years solving problems with distributed robots that are Internet connected, here is how easy it was to make this example work:

1. OK.

2. This VI is generated the simulated weather data (obviously this gets really cool if there are sensor networks deployed that are reporting real data).



3. OK.  Small note, I had to install Silverlight to get the web configuration tool.

Here is the first screen:



Here is the web configuration tool:


4. OK. - not too much to say on this one.

5. OK - not too much to say on this one, either.

6. OK.
Here is what the page looks like:


Here is what the source of the page looks like:

<html><body><h1>URL: /weather/</h1><h2>Output Terminals</h2><table  border=1.0><tr><th>Terminal Name</th><th>Terminal Value</th></tr><tr><td>Pressure</td><td>1004.651939</td></tr><tr><td>Temperature</td><td>27.198859</td></tr><tr><td>Wind Speed</td><td>2.933509</td></tr><tr><td>Station ID</td><td>2507987</td></tr><tr><td>Wind Direction</td><td>257.230547</td></tr></table></body></html>

So, the example is pretty easy.  Building an application like this from scratch with real sensors would obviously not be quite as simple as the few clinks that it took to make this work.  However, it seems clear that some really powerful applications can be built with this technology.  All I need to do now is learn more LabVIEW!

Wednesday, March 23, 2011

Saturday, March 19, 2011

Publications by Googlers in Artificial Intelligence and Data Mining

There is a ton here that is very interesting stuff:

http://research.google.com/pubs/ArtificialIntelligenceandDataMining.html

Additionally, there is a category for machine learning here:

http://research.google.com/pubs/MachineLearning.html

These appear to be the two categories most interesting to me, but there are many others as well.

On a side note, technically speaking I think that it is correct to consider Data Mining and Machine Learning both as sub disciplines of Artificial Intelligence.

This is supported by the following capabilities as described from Artificial Intelligence: A Modern Approach 2nd Edition (I have not yet updated to the 3rd Edition):
  • natural language processing
  • knowledge representation
  • automated reasoning
  • machine learning
  • computer vision
  • robotics
From which it seems that one could argue that data mining is possibly a sub discipline of any/all of the items highlighted in blue.

I guess that Google has divided up the way that they did based on the volume of research and the groupings that made the most sense to them.  Not really a big deal, but I find it interesting.  Also, note that the disciplines identified above are focused on an AI approach of 'acting humanly'.  This is one of the four generally acknowledged approaches of modelling AI (possibly for consideration at some later time):
  • acting humanly
  • thinking humanly
  • thinking rationally
  • acting rationally
It is interesting to me that even though AI is over 50 years old, there is still some amount of inconsistency in terminology (and I am intentionally avoiding all of the philosophical arguments between weak AI, strong AI, and all the various shades therein).

Wednesday, March 16, 2011

LabVIEW NXT Module Examples

OK, so I know that this is pretty simple... but I have been working with this module off and on for a while and have managed to overlook these:

From the main screen, select 'find examples' then expand 'toolkits and modules'... voila! Tons of great examples to get you going with your NXT.


I will be picking a few of my favorites and showing demos of them in future posts.

Tuesday, March 15, 2011

Japanese Quake and Tsunami Ultimate Test for Rescue Robots

Here is another good article about rescue robots in Japan: 

http://robots.net/article/3122.html

IRSI Rescue Robots & Systems, extracted by johnorado, on Flickr
As observed on RobotLand, shortly after the earthquake and tsunami in Japan, Rescue robots help relief efforts in the aftermath of earthquakes and other disasters by navigating through wreckage that is too dangerous for people to enter and by gathering information on missing persons and the surrounding conditions. Small unmanned marine vehicles, both surface (boats) and ROVs (underwater), can be of assistance in inspecting bridges for underwater damage or debris posed to crash into the substructure and damage the bridge. Recent years have seen rapid advances in the development of these robots, and Japan is a global leader in the field. Between the advanced state of robotics in Japan, the extent of the damage, and the likelihood that the wreckage continues to conceal living persons, the current situation presents an unprecedented, pressing opportunity to put the whole range of rescue robots to the test. Ironically, as reported by the Center for Robot-Assisted Search and Rescue, the leading researchers from Japan in rescue robotics were in the U.S. for the CRASAR-organized JST-RESPONDR exercise and workshop, although they returned to Japan immediately. Robin Murphy of CRASAR has been mentioned here repeatedly in connection with rescue robots. POPSCI.com was also quick to publish an article about (primarily Japanese) rescue robots, including photos, and PHYSORG.com has video.

Japan: Robotic snakes to the rescue

Thanks to Rob for sharing this link from here:
http://www.boingboing.net

A summary of the content below.  Hopefully the technology can help save people.


CNET: "Rescue robots are making their way to parts of Japan affected by the massive earthquake and tsunamis that devastated coastal areas Friday and in the days following, leaving nearly 6,000 people dead or missing. A team from Tohoku University led by Satoshi Tadokoro is apparently en route to Sendai with a snakelike robot that can wriggle into debris to hunt for people."

Matrix Fundamentals in LabVIEW

Here is another good example: 

The following example shows the fundamental behavior and functionality of the matrix data type. While the test is running, you can change the matrix inputs or select built-in or user-defined numeric operations. Change the operation mode between matrix and array versions of the operations to see the difference in results.

The front panel:


The block diagram:

Friday, March 11, 2011

Simple Command-Line Lucene Demo

The following demo is based on the demo located here:
http://lucene.apache.org/java/3_0_3/demo.html

First, create three one line text files to index and search.  The image below shows the files and contents that I used for this demo.


Now index the files by typing 'java org.apache.lucene.demo.IndexFiles' followed by the files that you want to index.  In the image below you see that I indexed the directory ./testDocs/:


Finally, here are some example searches against the index that show one, two, or no results based the query that was issued.  To issue a query type 'java org.apache.lucene.demo.SearchFiles' and then enter what you want to search for.

Wednesday, March 9, 2011

Lucene

http://lucene.apache.org/java/docs/index.html

"Apache Lucene(TM) is a high-performance, full-featured text search engine library written entirely in Java. It is a technology suitable for nearly any application that requires full-text search, especially cross-platform."

I am beginning to consider software agents as in play for deeper discussion, and suspect that discussion of text mining is relevant to the general intent of this blog.

Look for some more posts in coming days focused on this topic.

Monday, March 7, 2011

Thursday, March 3, 2011

LabVIEW Robotics Module - Single Control Loop

Here is another example from the LabVIEW Robotics Module.  I like this one for a few reasons:
  • It is relatively simple
  • It generates and processes simulated data (so you can play with it without hardware)
  • It has worked cleanly and easily the first time
<<
This Single Control Loop example is useful for robots that do relatively simple, repetitive algorithms. Insert code for acquiring and processing sensor data and controlling the robot inside this Timed Loop.  The Functions>>Robotics palette contains useful robotics-related VIs and functions.

This Timed Loop controls timing and is configured to run at 10 Hz. However, all processing must execute fast enough to keep up with this loop rate.  The Previous Iteration Finished Late? Boolean returns TRUE if the contents of the loop does not finish fast enough for the current configuration of the Timed Loop.  If this occurs, consider slowing the loop rate or optimizing the contents of the loop.

If you do not need a fixed loop rate and want this loop to run as fast as possible, right-click the loop border and select Replace with While Loop.
>>

The Block Diagram:


The Project Explorer:

Tuesday, March 1, 2011

The Rise of Worse is Better

In many ways it is hard to believe that it took this long for a post about (or at least related to) Lisp. Last month, I started off with a post about The Manifesto for Agile Software Development.  Not sure if this is going to be a pattern, but I thought that this month I would start off with another software engineering type of a post.

The following is taken from here:
http://dreamsongs.com/WIB.html

The Rise of Worse is Better

I and just about every designer of Common Lisp and CLOS has had extreme exposure to the MIT/Stanford style of design. The essence of this style can be captured by the phrase the right thing. To such a designer it is important to get all of the following characteristics right:
  • Simplicity -- the design must be simple, both in implementation and interface. It is more important for the interface to be simple than the implementation.
  • Correctness -- the design must be correct in all observable aspects. Incorrectness is simply not allowed.
  • Consistency -- the design must not be inconsistent. A design is allowed to be slightly less simple and less complete to avoid inconsistency. Consistency is as important as correctness.
  • Completeness -- the design must cover as many important situations as is practical. All reasonably expected cases must be covered. Simplicity is not allowed to overly reduce completeness.
I believe most people would agree that these are good characteristics. I will call the use of this philosophy of design the MIT approach Common Lisp (with CLOS) and Scheme represent the MIT approach to design and implementation.
The worse-is-better philosophy is only slightly different:
  • Simplicity -- the design must be simple, both in implementation and interface. It is more important for the implementation to be simple than the interface. Simplicity is the most important consideration in a design.
  • Correctness -- the design must be correct in all observable aspects. It is slightly better to be simple than correct.
  • Consistency -- the design must not be overly inconsistent. Consistency can be sacrificed for simplicity in some cases, but it is better to drop those parts of the design that deal with less common circumstances than to introduce either implementational complexity or inconsistency.
  • Completeness -- the design must cover as many important situations as is practical. All reasonably expected cases should be covered. Completeness can be sacrificed in favor of any other quality. In fact, completeness must sacrificed whenever implementation simplicity is jeopardized. Consistency can be sacrificed to achieve completeness if simplicity is retained; especially worthless is consistency of interface.
Early Unix and C are examples of the use of this school of design, and I will call the use of this design strategy the New Jersey approach I have intentionally caricatured the worse-is-better philosophy to convince you that it is obviously a bad philosophy and that the New Jersey approach is a bad approach.
However, I believe that worse-is-better, even in its strawman form, has better survival characteristics than the-right-thing, and that the New Jersey approach when used for software is a better approach than the MIT approach.