The problems with Bayesian translators

So I was translating the lyrics of the German-dubbed Lion king songs (which is a normal thing that people do in their spare time :) ) and I ran into an interesting phenomenon:

So Google believes the phrase means “sounds sordid”, but the actual words mean “stupid critters”
A fairly big mistake.

As it turns out, those are the words _at that point_ in the English version:

Be Prepared” – Original English

Seid Bereit” – German dubbed

Translated German ->English

Hyena: And where do we feature? Und was springt für uns raus? And what is in it for us?
Scar: Just listen to teacher. Ich lass’ euch schon nicht aus I won’t forget about you
I know it sounds sordid, Ihr dämlichen Viecher you stupid critters
but you’ll be rewarded Der Lohn ist euch sicher your wage is safe

So pretty clearly, Google is messing up the translation because people keep “translating it wrong” in the internet, and the translator does not know any better.  Google is upfront about how their translate works:
” By detecting patterns in documents that have already been translated by human translators, Google Translate can make intelligent guesses as to what an appropriate translation should be.”
- from “http://translate.google.com/about”

To get this result, a number of factors seem to have conspired to produce this result:

  1. dämlichen Viecherdoes not appear much on the internet, except in context of the Lion King:

    Query

    “dämlichen Viecher”

    “dämlichen Viecher” -Lohn

    # of results

    5,400

    2,490

  2. There are few (if any) positive examples of this phrase used in a site that contains the translation.  For an unknown reason, although other Lion King songs are translated in the German->English fashion, Seit Bereit never seems to be translated.  At least not in text; there are a number of videos that contain a correct-ish translation on youtube, (with German and translated English subtitles) but alas El Goog has not managed to pull text from videos (yet).
  3. The sites that do have dämlichen Viecher along with a lot of English text (thus getting flagged as a site that may have translations) are highly correlated.  There are a ton of sites that list (in a very unhelpful manner) the lyrics to these songs in different languages, but only in the language that they are dubbed in.  This promotes the statistical translator’s confidence that it has found the correct match.

The reason I actually took the time to investigate and post about this phenomenon is that it tells us a lot about the underlying algorithms at work in the translator. It tells us:

  1. The way Google finds pages that it should use as translations
  2. That Google probably uses syntax trees to large parts of a document to elsewhere int he document (which is fairly common, so no surprise)
  3. That checking phrases against their components must be weighted very low, or not done at all (since each word is correctly translated)  This would make sense if you were translating a series of chinese characters, but it seems to me that in European languages phrases are strongly correlated with their component words.

Fun stuff.  Also, I’m going to see if this post has any effect on the translation :)

 

 

No Comments

Factory Visits!

It has only been a 4 days in China, and Huan has already set up a factory visit!   Huan’s fiance’s father’s has 3 cousins (who are siblings), each of whom owns his own factory.  All three brothers were originally factory workers themselves, and saved up enough money to buy some equipment and start producing things on their own.   The trip to the factory was about ~1.5 hours, but it was well worth it.

Factory #1

The first factory we visited was the youngest brother, who had started his factory first.  We talked to the youngest brother for a long time about his capabilities, and about how we could work with him to develop a prototype.  He seemed very interested in working with us, since he makes mostly car parts, and wants to branch into higher tech parts.  Discussing business with him was exciting, but it was also really cool to see how the factory works.

Since making a mold is ~50,000 (I’ve been quoted that price in RMB and USD, so obviously it varies a lot)  you start out by milling a prototype out of plastic/metal, and making sure that is exactly what you want before going to the final version.   Once you have the final version, they have a machine that makes the mold directly from the cad file.  The mold is then used in the injection molding machine (see pics), where plastic or metal is squirted in, and hardens.  Then some guy just grabs it out, and chuck it into a pile, which goes to some other folks who de-burr it and clean it up.   It was Sunday, so the factory was not at full operation, but a number of people were still working, so I got to see the injection molding machine, as well as the de-burring process.

Slideshow:
Fullscreen:

Here is a video of the worker running the injection molding machine:

 

Factory #2

The next factory we visited was a screw factory.  It seems pretty straightforward, but there are some very interesting processes that go into making screws that I never really thought about.  The metal for screws comes in big rolls of round extruded steel (or other metal).  It is then cut and pressed to make the head.  Then the indentation is made in the head, and the ridges are cut.  Finally, the end is tapered in needed, and then the screw is electroplated, for that nice shiny finish.  The whole process takes 4-5 machines, and only takes two people to run!

Slideshow:
Fullscreen:

 

The third  factory we vistited also did injection molding.  It was a bit bigger, and newer, but was doing very similiar practices. One cool thing was that we got to see an injection molding machine that was being installed.  There was a large amount of unused space in the factory, which surprised me given how space is at such a premium in china.

Slideshow:
Fullscreen:

After seeing the three factories,we went to the first brother’s house, which he designed, and on which he was finishing construction.  The place had three stories, and he designed the first two floors to act as an assembly area.  His involvement in low level operation is impressive – even though he now manages ~100 people, he still plays a very personal role in production.

 

 

No Comments

In China!

So, I’m in China now! (For some explanation, see my Haxlr8r post)

my huge pelican case

Arriving

Getting to Shenzhen was actually easier than expected – I grabbed a skylimo at the Hong Kong airport, so for ~$20 they took me to the GuangHuang border crossing. Usually, they will take you all the way to where you want to go in China, but they said my suitcase was too big, and too suspicious, so they didn’t want to take it across. (not really the case, they were just taking advantage of me) The border crossing was also very simple, which I though was surprising given my very large pelican case.  (I would have been suspicious if I were a border controller…)

After crossing the border, I took another car to the apartment we rented.  I printed out the address on a slip of paper before hand, so I gave that to the driver.  That was good enough to get him close, but once we were within a block of the apartment, he kept jumping out and asking people where to go (of course I didn’t know we were within a block of the place, so I was getting pretty worried)  Finally he found the apartment, and where I met Huan and Sammi.  Arrival success!

The Apartment

The apartment is kind of small and dirty, but hey, it’s the cheapest we could find, and they are renting to us for just 4 months.

front door

my room

Our Living Room

living room

 

The Surrounds

 

I am totally blown away by how many people are here. I don’t actually see that many people, but there are so many apartments everywhere!

This picture is taken from the balcony.  In addition to all the apartment complexes, you can get an idea of the pollution.  The air smells pretty bad, and you can’t see very far.

Update: The pollution actually varies a lot.  Some days, you can see quite clearly.  Also, either the smell has decreased, or I have gotten used to it.

 

 

 

 

Anyway, I am super excited about being in China!  This is going to be such an amazing opportunity!

No Comments

So you want to burn things…

After a discussion with the wife, it was decided that I not buy any high powered lasers, Fresnel lenses or parabolic mirrors if I could not come up with better uses that to “burn the neighbors”.  Oh reason, you are a harsh mistress.

Anyway, I did a bit of research, and here are some good options for ways to burn the neighbors:

Lasers

Laser Diodes

Simple and effective, this is a laser pointer on steroids.  Normal laser pointers run at ~5mW, and take several seconds of direct contact to do any damage to your eye.  You can buy diodes all the way to 1W (and possibly higher) , and even pre-assembled  ‘laser pointers’ in the 1W range.  These devices can blind you instantly even from a diffuse reflection.  (note that I don’t have any scientific data to back up these blinding claims)

Pros:
These are pretty cheap.  you can get the whole setup running for less than $100.  Also, since it is a laser, you don’t have to worry about focal length as much.  The laser will diffuse over distance, but unlike a lens or mirror, there is not one spot where you have to use it.

Cons:
Laser diodes are capped in the power they can put out – simply by how much light the diode can generate before it melts.  So, whereas these lasers are great for starting fires, they won’t cut through cars anytime soon.  You are probably limited to cutting paper and thin plastic.

Options:

    • For the lazy and/or rich, a pre-assembled option exists from wickedlasers.com.  This seems to me scarier than any other option.  If you assemble this yourself, you at least have some idea of what power is involved, and what it can do.  However, this is a ready-to-use, no-knowledge-required, incredibly dangerous item. The Arctic Series laser is $300 for a 1W laser, and can ship today!
    • For the DIY’er, there are a number of good resources:

 

A laser diode

Diodes:

$11.00 + $4.52 shipping 405nm 150mw High Power Laser Diode
$11.50 + $4.52 shipping 808nm 1000mw High Power Laser Diode
$50 1W 445nm Blue Laser Diode
$10 250mW 650nm Red Laser Diode

You also need something to power the diode. A few people I found built their own regulator, but you can also get them pretty cheap:

Input Voltage Output Voltage Output Power Price Description
2.25V + Diode Forward Voltage (Vf) 1.25V to 9.75V 5mW-400mW $18.00 + $4.52 shipping RKCSTR Constant-Current Micro Drive
3.7-4.2V 4.8V 200mW-1W $15.50 + $4.56 shipping 1W 445nm/405nm laser driver
2.0V-5.5V 2.0V-5.5V >1W $25 Micro Flex Drive

If you follow the links, you can see that the two good places for these parts is the amazon seller Laser Hack and the website lasersurplusparts.com. The latter seems to have more info. Even though their laser diode is more expensive, I would recommend that route.

CO2 Laser (Death Ray)

So if a 1W laser is too puny for your plans, head over to United Nuclear and pick yourself up a Death Ray. These are water cooled CO2 lasers, similar to what is used in a laser cutter, only without the protective enclosure protecting you, your pets and neighbors.
Pros:
This is powerful and looks amazing.  You can imagine mounting it on a turret and burning all who oppose you.   From my experience with laser cutters, this laser could easily burn through most plastics and thin wood in seconds. The website states that it can also burn through steel and rock.

Cons:
Unfortunately, you have to pick up the laser tube in person from Laingsburg, MI. This type of laser is also understandably more costly: the 20W version will run you ~$800 and the 100W version costs over $2000, when you buy all the supplies (and good luck building your own 100W power supply)
This type of laser is also less coherent – to achieve the above cutting powers, you will need to use focusing lenses that will limit you to a fixed range. Furthermore, all the focusing lenses I have found for this type of laser are only for short range – oddly enough, cutting steel from across the street is not a big use case for this product.
Finally, this is super powerful. Your eyes, your cats and neighbors are easier to cut than wood. Forget blinding you, this can burn out your whole eye in a matter of seconds! This type of laser is supposed to be used in a room with interlocks to prevent the laser from firing when anyone is in the room. Since this is not provided, you are responsible for not killing yourself.

Using the Sun

OK, lasers are cool, but we already have a large, practically coherent light source that can blind you and set people on fire: the sun! However, to harness its power you need to focus it. You can do this with a lens or a mirror. When considering such an option here are the factors that come into play:

Lens Size

The sun radiates energy at a fairly uniform intensity, which can be measured in Watts/square meter. The larger area you collect light from, the more power you get. The level of radiation at the top of the atmosphere is ~1400W/square meter. Not all of that is visible, and a lot of the UV is blocked by the atmosphere. The radiation at sea level is ~1kW/square meter. Pretty decent – much more powerful than the lasers, if you can get a large lens/mirror!

Focal Length:

For normal images, the focal length of the lens (or mirror) relates the distance between the object imaged and the focused image produced by the lens, and the size of the focused image. To get the most power, we want the smallest focused image. The size of the image is proportional to
(object size)*f/(f-d)
where f is the focal length and d is the distance to the object (in our case the sun). The sun is  far away (10^8 km), but it is also big (10^6 km), so the equation becomes
(object size)*f/d = f/100

A smaller focal length means a smaller image, meaning more intensity. However, the distance to the image is also given by d*f/(f-d), which for the sun becomes just f (actually -f, for the other side of the lens)
so if you want to burn that car across the street, you’ll need a lens with a focal length of ~20m.

Parabolic Mirror

A parabolic mirror focuses light as it reflects, allowing you to direct the sunlight while focusing it, which is important for burning your southern neighbors (for those of us in the northern hemisphere). However, making curved mirrors is a difficult task, and few good mirrors parabolic mirror suppliers exist. One solution is to approximate a parabolic surface with many tiny flat mirrors. Here is the one decent supplier of real parabolic mirrors I found.
Unfortunately, the focal length is very small.

Fresnel Lens


If you have normal mirrors, or are not particular in the direction to which you are burning, a lens works well. However, meter sized glass lenses are incredibly hard to come by. Instead, you can take advantage of a Fresnel Lens, which creates the same first order result at a much cheaper price point.
From the same crazy guy who sells the parabolic mirrors, you can buy a framed Fresnel Lens for $79-$300, depending on size. The biggest focal length is still just 34 inches.

Using Multiple Lenses

The good news on focal lengths is that you can combine multiple lenses to change the focal length:

\frac{1}{f} = \frac{1}{f_1} + \frac{1}{f_2}-\frac{d}{f_1 f_2}.

Where f is the resulting focal length, and d is the distance between the two lenses, with focal lengths f1 and f2.  If  d > f1+f2, your focal length is increased.

 

So, those are the options as I see them.  The original idea was to put a laser on the Bilibot, so it could burn its way out of a box/past barriers, but after doing the research, I’m pretty sure it would just catch the house on fire.  Oh well.

No Comments

What I’ve been up to…

It’s been a while.  There’s been a lot of change going on, mostly personal, but worth putting down.

There’s the overview:

  • June: quit my job at MIT
  • July: Drove from MA to CA
  • August: Got Married!
  • September: Honeymoon in Italy
  • October:  moved into my new place in Oakland

I suppose I’ll make a post about each month/event.

 

No Comments

I’m on TV!

The PBS segment with my work with the Kinect finally aired!  It was pushed back a number of weeks, due to other more time sensitive material being aired.

check it out!

Shooting a TV segment was an interesting experience.  There were many takes from various angles, and a lot of back-and-forth between me and the producers during filming.

Since they were producing a show, they wanted me to talk about specific topics, asking me a lot of leading questions, but not everything they wanted me to say was correct so I would constantly stop and correct them.  We went on like this for hours, with them saying things like, “so would you say xxx?”, and I would say “no, actually yyy”, then  finally I would say something I believed, and they would light up, because they finally got something they were happy with.   It’s not that they were trying to get me to lie, but they had a story they wanted to tell.  I think a taught them a great deal about the kinect, and I was really imprtessed with the final result.  Not only did they produce a really cool and proffesional segment, but they were able to explain the kinect really well.  All my non-technical friends said that they finally understood what I do.

 

No Comments

The Bilibot Project goes public

So I’ve been working a lot on the Bilibot project recently.  A few highlights:

I upgraded the frame, and it looks pretty spiffy:

The sensor that is on the Bilibot is a Prime Sense development sensor, and unfortunately will not be on the final Bilibot.   The computer on this Bilibot is the platform I labeled as Bilibot 5, the DIY solution.

The Bilibot project has also been getting a lot of publicity.

I’ve been communicating with Travis Deyle, a student over at Georgia Tech, who also works on the PR2.  Travis was interested in Bilibot, and he wrote a nice article.  The story has since been picked up by Slashdot, IEEE, Smashing Robots, and some others.  The publicity has been good, albeit overwhelming.   I kow have 50 pre-orders for Bilibots that I (may) have to fill.  So now I’m in the process of hiring help to organize the orders, testing and general work that needs to be done.  Know anyone who is willing to work for cheap?

Most recently, I took Bilibot to BLUR, an HCI conference organized by Eric Norlin.  It was fun – there were ~100 people: investors, startups, students and the like.

As you can see, I walked around most of the conference with no shoes on, and followed buy robots.  I had one robot following me on the first day, and on the second day, I got cocky, and had one robot follow the other.  I put a piece of white paper on the back of the front robot so there would be more points to track, but it never was an issue – it was probably unnecessary.  Trying to get both robots to behave was a chore, though.  If one robot had a problem, I would go to diagnose it, and the other robot would start tracking me, and then they would compete.  The tracking algorithm was really simple – it just looked for whichever points were the closest to the centroid of the last point it was tracking.  In the future, I’ll have some smarter behavior for re-acquiring a target…

Roombas are also really slow, when you compare it with how fast you walk.  I had to meander along, at apace where I would actually have to spend time looking at things around me, as I waited for the robots to catch up.

The sample bias at this conference may have been a bit off, but it seems to me like people really have no idea yet of what the Kinect can do.  I really hope the Bilibot can address that.

So that’s the latest on the Bilibot.  Remember to check out bilibot.com for the latest updates on the Bilibot!

Now to replicate this post on various other forums…

No Comments

I won!

So for those of you who don’t follow every post that comes up on ros.org/news, the kinect 3D contest results came out today, and I won first place!  I’m super stoked, as I am quite happy with the entry that won (I had a few).  I probably spent more time playing with it than I did programming the thing.  Once it works well, it is just so addictive, and so magical!  Well, you should try it.

I think Ken put it very nicely:

We tried it on our own desks, and it just puts a smile on your face: you draw a button whereever you please and press it. It made us feel like we were in a cartoon world where we could bend the rules of the universe.

I’d like to congratulate everyone who entered the ROS 3D contest – There was a lot of great work out there, and I’m very happy that everyone got involved and demonstrated some cool stuff.  I’m personally looking forward to trying  out the RGBD-6D-SLAM demo using the Bilibot.

2 Comments

PR2 Teleoperation

A few of people have been teleoperating robots with a kinect now, so I thought I’d have a go.  The Openni software performs decent skeletal tracking, and so it is easier than ever to wave your arms around and have your robot obey.  Anywho, I realized that the PR2′s design offers me a unique opportunity:  I can control all of PR2′s joints with my own!

Ok, that needs some explanation:  I’ve worked with 3 big fancy arms recently.

The PR2, by Willow Garage, the LWA3, by Schunk, and the WAM, by Barret.  The PR2 and the Schunk have 7 degrees of freedom, the Wam had 6.

Herb's Wam arm

Barret Wam

We technically have a ton of degrees of freedom (DOF)  in our arms, but our range is really limited in most of them.  In fact, If you look at the picture of my arm, you can see that our effective DOFs is ~ 7, and the motion in what I labeled as 6 is about 45 degrees max, and very uncomfortable.  Now, we have joints in very nice places which, along with the other limited degrees of freedom (like being able to shrug)  give us a large workspace (volume our arm can reach)  But we still only have about 6 main DOFs.

Spankybot's Schunk arm

Schunk LWA3

Unfortunately, our joints don’t usually map well to robot joints.  Take the Schunk arm, for example.  My arm’s joint 2 looks like it is the Schunk’s joint 2, and my joint 3 looks like the schunk’s joint 1.  But where is  my joint 1?  There isn’t any equivalent on the Schunk.

PR2

It gets to places by assuming joint angles I cannot reach, and visa versa.  The Wam arm is a little better, but it still has the same problem.  The PR2, however, is a great match for the human arm.  Up to joint 5, our arms match very well.  It even has similar joint limits – Just like our elbow, the PR2′s joint 4 does not bend more than 10 degrees past horizontal.  The only real limitation that I see is that the PR2′s joint 2 does not go up very high.  As for the other two DOFs, Our joint 7 is basically the PR2′s joint 6.  Our joint 6 (which is not so useful) is replaced by the PR2′s joint 7, which can spin continuously, which is great for screwing things in.

Now, because robot arms are often very different from our own, we cannot just tell their joint 1 to be at whatever angle our joint 1 is at.  (ignoring for now that it used to be pretty difficult to get a live update of what our joint 1 is)  Roboticists would usually  get around this limitation by using the 6 DOF position of our hand to tell the robot where to put it’s hand.  The robot would have to figure out what angles its joints would have to be at to achieve this, (and in many cases, the robot just can’t get there) but hey, that is what the study of inverse kinematics is all about!

However, with the PR2, I can directly map my joint angles to the robot’s joint angles allowing me to, for example, lift my elbow to move out of the way of an obstacle.  And here’s the video:

I just knocked this out on Wednesday, and it needs a bit more work.  In particular, the delay is caused by the fact that the skeletal tracker is a bit noisy, and the arm with jump around if I don’t put a filter on it.  I put a pretty aggressive window filter on, which greatly increases the delay, and isn’t terribly efficient at smoothing, but it is really easy to implement.

I’m very happy with the results so far.  Leaning (forward, back and to the sides) move the robot straight, and turning my torso turns the robot base.  I control the grippers by opening and closing my hands.  The only feature  left to implement before I just start fine tuning is getting using the  hand orientation, from the hand detector to orient the gripper.

2 Comments

We live in an age of magic

As Arthur C. Clarke’s third law states,  “Any sufficiently advanced technology is indistinguishable from magic.” Well, even though I wrote the software for this, I can’t shake the feeling it is magic.

Ok, so the setup is thus:

You put a white piece of paper on your desk.  You take a black marker, and draw a shape.  It can be anything, as long as encloses an area. You then can press the shape, and it acts like a button.  I made the button make a sound, but it could do anything.

Magic right?  this is what happens in cartoons – you draw an eject button, then you hit it and you eject. This can work in real life?!?

yep:

Or, if you would like a more musical version, and are a fan of young Eddie Murphy movies:

Anyway, I did this by:

  1. detecting the table using the surface normals
  2. Isolating the white area on the table
  3. detecting dark areas on the table and removing points near any dark pixel
  4. segmenting the remaining points using Euclidean distance
  5. The clusters now represent buttons
  6. I track the buttons between point cloud messages,so if the paper moves by a small amount the associations are not lost
  7. I detect the presence of the hand by searching for points in the area over the table
  8. If a hand is detected, I see which button has a point over it that is closest to the table
  9. if that point is less than a centimeter, I consider it a button hit.

One thing I recommend for doing demos like this and the piano demo, is the  simple fast medial library.  It allows you to play .wav files with an imperceptibly small delay, and the sounds can overlap however much you want.  The interface is very simple as well:

Check out the code for this demo at http://www.ros.org/wiki/mit-ros-pkg/KinectDemos/ImpromptuButton

No Comments