A case study in optics
manufacturing with MoveIt 2
and ros2_control
20 October 2022, ROSCon 2022
Stephanie Eng
PickNik Robotics
stephanie.eng@picknik.ai

Joshua Beck
Optimax SIjbeck@optimaxsi.com

Andy Zelenak
PickNik Robotics
zelenak@picknik.ai

Outline
1.
2.
3.
4.

Introduction
Problem statement
Release of abb_ros2: a ROS2 driver for ABB robot arms
Trajectory smoothing with Ruckig

Who we are

Stephanie Eng
PickNik

Joshua Beck
Optimax

Andy Zelenak
PickNik

Introduction: Optimax

Introduction: PickNik●PickNik helps companies with the development ofadvanced robotic applications●

PickNik collaborates with the open source
robotics movement and●Is the lead developer of MoveIt

Application●●●

Optimax + PickNik collaboration: integrate
ROS2 manufacture of freeform optics
Freeform optics: optics that are not rotationallysymmetric
Manufacturing process○○○

Machine rough shape of optic using boundabrasive tooling on a 5-axis mill
Iterative polish-measure loop with ABB industrial
arm and freeform metrology tools
Final smoothing performed on a UR or ABB robot■Reduce mid-spatial frequency errorsinduced during generation and polishing

Existing ROS 1 Architecture

Existing ROS 1 Architecture

New ROS 2 Architecture

New ROS 2 Architecture●●Fork of the ROS1 driver had jerky motion and severe latency
Desire to move to ROS2 for better long term support and use of ros2_controllersabb_ros2●●Optimax and PickNik have collaborated todevelop a ros2_control driver for ABB arms
Open source, supports the IRB 1200 5/0.9

https://github.com/PickNikRobotics/abb_ros2

Code interfacing with Hardware●●●Started from a proof-of-concept
ros2_control driver
Initial driver used ros2_control to read andwrite commands to and from the robot’s
externally guided motion (EGM) interface
Started off by testing with RobotStudio○●

Used this to ensure we had the proper
network setup and proper RAPID program

Added communication to Robot Web
Services (RWS)Code interfacing with ROS●●

motion_data
Functions a ros2_control driver should
implement:
○
○
○
○
○

on_initexport_state_interfaces
export_command_interfaces
on_activate
readwriteProductizing the project●

Created abb_bringup to hold launchfiles
and configurations
○
○

●
●

abb_control.launch.py
abb_moveit.launch.py

Added CI
Improved documentation

New driver functionality
●
●
●
●
●

Spoof ros2_control drivers for simulation in ROS
Communicate with ABB RobotStudio or directly withan ABB robot
Support for external axes using MultiMove
RWS integration for StateMachine and IO
manipulation
Some robot models already supported, more tocome

New driver functionality

Toolpath Issues●●

Lack of trajectory processing on input toolpath: jerky motion
Input toolpaths of up to 500 000 waypoints caused latency

Ruckig●

Trajectory generator that respects jerk limits○○●

Jerk is the derivative of acceleration
High jerk is hard on the actuators and can cause robot protective stops

Ruckig generates a trajectory with respect to (velocity/acceleration/jerk) limits, lengthening thetrajectory in time as requiredJerk decreased from 1000 rad/s3 to 10
rad/s3

Ruckig Pipeline
Custom toolpath
500k waypoints

Break into chunksof 100 for fasterprocessing

Ruckigsmoothing

Optimax Application

Publish one
waypoint at
a timeros2_control

MoveIt Usage●●●

Ruckig is easy to use with the OMPL motion planning pipeline of MoveIt
In other words, the default motion planning that almost everybody uses
Add this to the beginning of your ompl_planning.yaml (ROS2 Humble/Rolling)

request_adapters: >-d e f a ul t _pl a n ne r _r e que s t _a da pt e r s / Ad dRuc ki gTr a j e c t or ySmoot hi ng

Hardware Testing

A 53% reduction
in deviation!

Thank you for listening!