In this article, you will learn about the opportunities of using Blender to animate industrial robots.
Blender is an open source 3D animations software, which is used by 3D artists all over the world to create 3D art and cinematics scene, including blockbuster movies.
A couple of weeks ago, someone mentioned to me that Blender 2.8 will be a revolutionary release, fixing one of the most significant problems the OSS software had, the user interface. Moreover, everything should move to a node-based workflow (everything nodes), and the new render engine EEVEE renders photorealistic scenes in real-time.
Since I had some spare time, I took the opportunity to learn the basics of Blender and to test-drive its applicability for animating industrial robots.
- Check out the ROS Developers Podcast episode 40 if you want to learn more about this topic.
Rigging and Inverse Kinematics
The process of adding bones to an object or model is called rigging. Regarding of 3D animation software, a bone is essentially what we call link in robotics.
Unfortunately, there aren't any good tutorials on rigging robot arms in Blender yet. However, I managed to rig my 6-DOF Borunte robot arm after understanding the basics of rigging.
After rigging, we have two options to animate a robot arm:
- We can use forward kinematics (FK) move the bone / joint positions.
- We can use inverse kinematics (IK) to let the IK solver figure out the bone / joint positions.
For animating robots, we usually want to use an IK with the tool center point as a target.
Blender 2.8 comes with two IK solvers:
- Standard IK Solver
- iTaSC IK Solver
For our application, the iTaSC IK solver is the better choice, as it is designed for robotic applications.
Unfortunately, I haven't found a solution for limiting the joint velocity and acceleration. But I'm very sure that it is possible to solve this problem with better understanding of iTaSC.
Blender offers multiple ways to animate objects.
- Animation via keyframes and properties.
- Animation along a path.
- Programmatic animation via Animation Nodes.
I've tested all three options, and I couldn't find any of them more useful than the other for animating a robot arm.
For some applications, it's easier to create a path or spline to be followed, for others it might be more useful to drag the robot arm by hand to the target positions. In some cases, it might be helpful to program the movement via Animation Nodes.
In my opinion, programming robots via animation are most useful for the entertainment industry. This includes for example film making, animatronics, and show lighting. Autodesk is currently working on a similar project, MIMIC.
The extendable 3D environment is the biggest advantage of Blender compared to alternatives based on game engines or 3D frameworks. For example, ROS Rviz or RoboDK are great for visualizing robots, but not so good for a complete simulation of the environment, due to missing design tools.
However, I can see how Blender could be useful for simulation of machines, robots or even complete factories. Blender also has a VR extension which would enable to design, program and simulation full industrial machines before assembly.
ROS and Machinekit Integration
Of course, animating industrial robots is only useful when we can use the generated trajectories. For this purpose, I created an interface package, which executes the trajectory using ros_control and the hal_ros_control on the Machinekit based open source robotics controller.
For other robots, which come with a closed controller, we could use a post-processor to generate native robot code such as KRL.
Blender could prove useful for animating industrial robots.
Besides animation, I see huge potential to use Blender for robotics simulation.
For programming industrial robots, I could see how graph-based programming could be used as an alternative to writing robot source code.
I'm going to continue to work on this project to find out how it could be applied for applications beyond animation.
Feel free to contact me if you are interested in learning more.