Greetings industrial robot friends. I come to you today with another personal project aimed at improving our available tooling.
We sometimes joke at work that the only thing that our software guys do is calibrate things. It’s certainly been a pain in my side: it requires setting up involved experiments for data collection and it’s even hard to know if the answer you got is actually good. But for those of us who work in ROS on perception driven systems, calibration is difference between something that looks like it’s working and crashing your robot into a part.
As I’ve worked on integrating projects like the Godel, A5 , and other proprietary applications, I’ve grown to appreciate the need for calibration tools that make a minimum of assumptions about how I get data and what I do with the results. I often don’t have control over the robot or don’t want to call MoveIt to make (possibly crazy) robot motions between observation points.
So I’ve tried to put together a loosely connected bundle of tools for calibrating cameras to (industrial) robots with a focus on being easy to integrate (and hack) into more complex applications. I provide a suite of stand-alone “optimization functions” that take as input a structure full of well-documented arguments and produce an answer that is your calibration. How you collect data and what you do with the answer is left to you.
The library supports a few things, but mostly focuses on:
- (Extrinsic) Camera on Wrist
- (Extrinsic) Static Camera(s) Looking at Target on Wrist
- PnP-esque target localization with one or more cameras
I’d like to expand the library to include calibrations as we require them: laser line scanners, robot kinematics, etc. I’d also like to provide more automated data collection tools, GUIs, and more, but we’ll see.
I don’t claim to be an expert by an means. I also want to emphasize that this has been my own effort: not an official action on the part of ROS-Industrial. It’s based on the work of Dr. Chris Lewis @drchrislewis (in industrial_calibration ) and modifications made by Geoffrey Chiou.
I tried to put a lot of documentation in there. I welcome, and even ask for, contributions: code, pointers, suggestions. Anything is welcome. I encourage you to dig around in the optimization functions themselves and appreciate how simple the core problems are when we have access to tools like Ceres. I learned a lot making this and hope you find it useful.