Dynamo made several appearances at this year’s AEC Symposium and Hackathon in New York City, including one Hackathon project called “DynaRobo.” A 5-member team—Dynamo’s own principal engineer Ian Keough (whom we like to let outside at least a few times a year), Brian Ringley of NYCCTfab, Jeremy Luebker of NRI, Ronnie Parsons of Mode Lab, and me, Dynamo’s evangelist—successfully drove a robot directly from Dynamo. Well,.. a simulated robot; Brian didn’t want to drag his robot all the way to Cooper Union.

If you’re following along at home, that’s, for the first time we know of, a robot following toolpaths derived directly from a Revit surface.

Revit ? Dynamo ? ABB robot

The team competed with 7-8 others over just 30 hours to bring the idea to reality. Working in Dynamo’s daily build, we wrote a small library of nodes to translate points along curves and surfaces into the robot’s targets: information about the series of locations and orientations that the tip of the robot would be directed to pass through. We relied on the robot’s own kinematic solver to reverse-engineer that series of targets into instructions for each of its 6 axes.

To start, we used only Dynamo’s out-of-the-box nodes and a few code block nodes with DesignScript for fun, to make a series of points and coordinate systems then write the text file format, a Rapid file, that the robot’s software reads. We could hit “Run” in Dynamo, which would write a text file, then hit “Go” (or something like that) in the ABB software to make the robot move. We dove pretty deep into Dynamo’s string library!

Though that’s all well and good, you can see that the dyn file ends up looking more complicated than it needs to be. And who wants to hit “Run” in Dynamo and then “Go” for the robot? This is where the hack in Hackathon comes in. We wanted to send the information directly to the robot from Dynamo, and ABB has a pretty well-documented API for just that. In an entirely separate Visual Studio project from Dynamo, we wrote just 3 public methods in C# to:

  1. Turn points into targets
  2. Write a Rapid file
  3. Write the program to the controller

We just loaded the compiled dll directly into Dynamo with the newly exposed zero-touch import option and we had direct access to the C# methods as nodes in the canvas. As you can see, this simplifies things quite a bit. The final graph:


A fourth library method to set targets more flexibly is also included in the source code, which you can view, download, fork, and contribute to on Github. The library has dependencies on RobotStudio.Services.RobApi.dll and ABB.Robotics.Controllers.PC.dll, which are available from ABB. When we loaded the Dynamo_ABB library into Dynamo, we loaded Dynamo_ABB.dll along with its two dependent libraries.

Our hypothetical robot was an ABB IRB 140 robotic arm with an IRC5 controller. This is the the one at NYCCTfab that inspired us:

In the end, for the team’s presentation, we selected a surface in Revit from Dynamo, hit “Run,” and watched it go


PS – Working in the experimental build, I should note, we dutifully took the time along the way to report the bugs we found. The Dynamo team loves finding and fixing bugs. As always, keep ’em coming!