• Stars
    star
    131
  • Rank 275,867 (Top 6 %)
  • Language
    C++
  • License
    Apache License 2.0
  • Created over 6 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A suite of tools focused on calibration of sensors for robotic workcell development

Robot Calibration Tools

Static Camera Workcell Setup

Description

A loosely connected bundle of tools for calibrating cameras to (industrial) robots and vice-versa with a focus on being easy to integrate into more complex applications.

This work is based on the work of Dr. Chris Lewis @drchrislewis (see industrial_calibration) and modifications made by Geoffrey Chiou in IC2.

The focus and philosophy of this library is provide to provide a suite of stand-alone "optimization functions" that take as input 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.

Installation

This library is meant to be used within the ROS ecosystem, but the core optimizations depends on only Ceres-Solver and its dependencies. Follow the link for instructions to install Ceres. Afterwards, clone this package into your workspace and build with catkin.

Other support libraries use additional tools:

  • The built-in "target finder" in rct_image_tools uses OpenCV.
  • The data collection helpers in rct_ros_tools uses TF and various image transport mechanisms.

Quick-Start

  1. Please read the calibration primer for a description of terminology and conventions used in this library.
  2. Please visit the documentation for the calibration you wish to solve in rct_optimizations. See below for a discussion of supported problems.
  3. If you need to do intrinsic calibration of your sensor, then please use ROS' built in method from here. Alternatively, use OpenCV's calibrateCamera function on which the ROS utility is built.
  4. After setting up your "experiment", perform any necessary data collection: moving robots, taking images, etc. Be sure to get a good diversity of images; skew is important!
  5. Create an instance of your problem's Problem data structure and fill it out.
  6. Call rct_optimizations::optimize(Problem&) and get a Result back.
  7. Check that the result converged and then apply it to your workcell: either manually modify the URDF, publish the TF frame, etc. Consider using something like (shameless plug) mutable transform publisher.

Outline

  • rct_optimizations: Contains core libraries for performing the "math" of optimizations, usually using Ceres. This is where you'll find your library calls.
  • rct_image_tools: Builds on OpenCV to provide tools for finding targets in images. This lets you extract "correspondences" easily for supported target types.
  • rct_examples: This package contains both simple examples and offline processing tools for a variety of common calibrations. Look here for experimental setups and examples.
  • rct_ros_tools: (Experimental) Provides some "helper tools" for data collection and loading of data through ROS parameters/YAML files.

Calibrations

See the readme of rct_examples for more information on the most popular and tested calibrations. There's even some nice pictures.

Currently supported calibrations:

  • Extrinsic calibration of a 2D camera on robot wrist
  • Extrinsic calibration of a 3D camera on robot wrist
  • Extrinsic calibration of one or more static cameras in the workcell

Semi-Experimental (these have testing or robustness that needs to be improved):

  • Solve PnP for one or more cameras
  • Intrinsic calibration

The source code for these calibrations can be found in rct_optimizations.

Example Code

For example, see rct_example's camera-on-wrist calibration.

Development Plan

  1. Replicate the OpenCV intrinsic calibration
  2. Implement Qt GUI based on IC2 to speed calibration process in simple scenarios.
  3. Provide examples of qualifiying the accuracy of a calibrated system
  4. Investigate robot kinematic calibration (ala Mike Ferguson' package)
  5. Provide tools explicitly for robot tool calibration (for the moment, please see my super simple one at tool_point_calibration

More Repositories

1

gl_depth_sim

Stand-alone depth camera simulation using opengl for hardware acceleration
C
71
star
2

opw_kinematics

Closed form IK for parallel base, spherical wrist industrial manipulators
C++
69
star
3

tool_point_calibration

Package for doing robot tool point calibrations
C++
41
star
4

hybrid_planning_experiments

Sampler + Optimizing Motion Planning Demonstrations
C++
30
star
5

rviz_distance_tool

Like the default measurement tool, but with X, Y, and Z distances as well.
C++
10
star
6

simulated_lidar_scanner

ROS/PCL/VTK tool
C++
8
star
7

scan_and_plan

A curated listing of useful tools for programming robots in ROS based on perception data
7
star
8

block_diagram_z3

Analyze and test safety programs written in the function block diagram language for Siemens' Fail-Safe PLCs with the Z3 SMT solver.
Python
6
star
9

abb_file_suite

A suite of tools used for interfacing ROS-I and an ABB robot through the use of module files that are generated and downloaded on the fly.
C++
5
star
10

mutable_transform_publisher

A ROS node for publishing transforms w/ a set-transform service and persistent state
C++
4
star
11

rviz_lasso_tool

Lasso selection tool for point clouds in Rviz
C++
4
star
12

godel_noether

A package to adapt the noether path planning library to the godel, scan-plan project.
C++
2
star
13

descartes_opw_model

Kinematic model for Descartes based on the OPW kinematic package (and Moveit for now)
C++
2
star
14

personal_graph_tests

Just some experiments
C++
1
star
15

fake_ar_publisher

For use with ROS-Industrial Training Material
CMake
1
star
16

gcode_to_descartes

Toy library for transforming gcode to cartesian positions suitable for use with a cartesian path planner (such as Descartes)
C++
1
star