Wanting to take advantage of the many packages available in the ROS ecosystem, I wanted to get the uArm metal up and running with the uArmForROS library that is available on the uFactory github.

Experimenting around with it revealed it has some nice features - you can visualise the system and steer the end-effector around through RViz, as well as standard things like you might expect such as setting end-effector positions in Cartesian coordinates, or setting joint angles.

While this initially showed promise, the overall experience of using the package was a bit... weird. Getting position data didn't work quite how I thought it should, sending robot commands seemed to have a lot of overhead, and the process for getting the robot up and running seemed a bit roundabout. It got me thinking about some alternative ways to integrate the uArm with ROS.

(For the impatient:

Quick test of the uArm ROS package from Joey Song at uFactory: for main python library

Some key gripes that motivated developing an alternate package::

  1. Accessing robot data via the ROS parameter server.
    • This seems like an odd design choice, over publishing robot data on a topic, given that ROS parameters are meant for static data that doesn't need updating too often.
  2. Sending robot commands by calling ROS nodes.
    • Calling a ROS node every time I wanted the robot to do something seemed a bit unnecessary,
  3. Read/Write conflicts.
    • I found during tests that attempting to read and write to the robot too rapidly would result in a system error requiring reconnection to the robot. This was problematic for my application, so some way of managing the read/write requests was needed.

I'm not saying the uFactory ROS interface is necessarily bad, just that it doesn't offer ROS functionality in a way I was expecting it too. There may well be good design decisions behind their chosen approach, and there's a chance I've missed some key ingredient, but ultimately I felt a package that interacted with the uArm in a way that seemed more ROS-like was needed. I've put together an alternate ROS package which I think addresses these issues. I've chosen implementing a separate package over attempting a pull request, as the approach I've taken represents major changes to the original package.

That said, with the same dependencies as the uFactory package, you can just follow section 1.1 in their read-me to get up and running (using ROS Indigo with Ubuntu 14.04).

/uarm_metal package ROS topics - see more at

/uarm_metal package ROS topics - see more at

One caveat to this package is that it doesn't feature RViz integration (just yet)- it's more designed to allow for better integration with code, and a smoother read/write process.

I'll be giving the details of my approach over the next few posts (they will be more regular, I swear), but if you'd like to try it out you can find the package over at my github

King's: Reading and Robots

It's been a good start at King's - great research group, labs, offices. Right now it's catch-up time, where upon starting I was promptly given a reading list as long as my arm to fill in any knowledge gaps and help gain a deeper understanding of the area I'll be researching.

The authors' accurate portrayal of a PhD student at work

The authors' accurate portrayal of a PhD student at work

I'm currently working through The Elements of
Statistical Learning
, which I thoroughly recommend for anyone interested in this area; although this comes with the caveat that sections deemed particularly challenging are noted with a little image of Munch's Scream - it can get pretty heavy.


Offering relief from the growing pile of reading on my plate, I've got my hands on a uArm Metal to play with. <Troy McClure voice> You may remember this robot from such videos as "The Breakfast Machine" and "The Sandwich Robot".

This is a pretty fun robot to experiment with, if not a bit tricky to setup with correct firmware/protocols. A nice plus is that despite it's relatively young age, it's open source nature has resulted in an active developer community.

So far I've just used software created by uFactory intern Alex Thiel, CreatorStudio, which offers some nice capabilities such as trajectory recording. There's a video of the uArm in action below.

Documentation for using the uArm is a bit sparse it appears, so I may put together another post with more detail on using it in future, but that's all for now.

</Troy McClure voice>