1 of 27

CartesI/O

A ROS-based, Real-Time capable framework for Cartesian Control

Arturo Laurenzi, Enrico Mingo Hoffman, Luca Muratore

2 of 27

Outline

  • Motivation
  • Components overview and design
  • Cartesian server (RT & ROS)
  • Manipulation controller
  • Case studies

3 of 27

Motivation

4 of 27

Requirements

Complex environment → complex robots

  • Redundancy
  • Multiple tasks (prioritized)
  • Extended workspace (whole-body motions)
  • Control software complexity grows

A framework should hide this complexity from users while being flexible

Features:

  • Tasks (type, number)
  • Priorities (soft, hard)
  • Constraints
  • Online execution (fast)
  • Real-time execution (predictable, low jitter)
  • Configurable (URDF, SRDF, …)
  • Common tools

5 of 27

Task examples

6 of 27

(HHCM lab) before CartesI/O

  • OpenSoT as inverse kinematics engine
  • C++ code tailored to a specific platform and IK problem
  • Lack of proper interfaces for sending references (standard)
  • Risk due to unsafe references
  • Slow controller design workflow

~1000 ways of doing IK, not compatible, difficult for “end-users” to get started

7 of 27

Components overview

  • Solver
  • Modeling language
  • Programmatic interface
  • Middleware interface

8 of 27

Solver

  • Lowest-level component
  • Solves an instance of some “mathematical problem”
  • SVD-based pseudo-inverse
  • Quadratic programs (QP)
  • (Mixed-integer) linear programs
  • RT-safe, fast implementations (Eigen, qpOASES, OSQP, GLPK)
  • Dynamically-loaded (plugin)

9 of 27

Modeling language

  • Higher-level, natural C++ API
  • Less error-prone than bare QPs
  • OpenSoT API is built-in
    • Task, Constraint atomic entities
    • Math-Of-Tasks for defining hard and soft priorities, sub-tasks, …
  • Builds standard math problems, solved by the solver

10 of 27

Example

11 of 27

Programmatic interface

  • Standardize programmatic interaction (i.e. from code)
  • Uniform usage of controllers

CartesI/O provides a base class that can be implemented by the developer

class CartesianInterface

{ public: ...

protected: ...

};

12 of 27

CartesianInterface API

Construction

  • Model (XBot::ModelInterface)
  • Problem description struct (task list)

References

  • get/ setPoseReference(task_id, …)
  • setTargetPose(task_id, …)
  • setWaypoints(task_id, …)

Task properties

  • get/ setBaseLink(task_id, …)
  • get/ setControlMode(task_id, …)
    • position
    • velocity
    • disabled
  • getTaskState(task_id, …)

Control loop

  • update(time, period)

13 of 27

Reference pre-processing

Online reference

Point-to-point

Interpolation

Online trajectory generation (OTG)

max speed

max acceleration

Safe reference

setPoseReference() setWaypoints()

update()

getPoseReference()

14 of 27

Middleware interface

  • Standardize inter-process interaction
  • RosServerClass component
  • Expose all CartesianInterface API to ROS
  • Auto-generated ROS API

15 of 27

RosServerClass API

Construction

  • Pointer to CartesianInterface object

Topics

  • reference [in]
  • velocity_reference [in]
  • state [out]
  • tf [out]
  • solution [out]

RviZ interactive markers Interactive postural control Joypad control

Services

  • [get/set]_task_properties (control mode, base link, status)

Actions

  • reach (point-to-point motion)

Parameters

  • problem_description
  • max_[vel/acc]_[linear/angular]

16 of 27

Cartesian servers

  • ROS Cartesian Server
  • XBot RT Cartesian Plugin

17 of 27

ROS Cartesian Server

  • Built-in ROS node
  • Loads robot description
  • Loads problem description
  • Loads required Cartesian controller
  • Builds the RosServerClass
  • Runs the controller in a loop
  • launch files also provided
  • ROS service to dynamically load different controllers at runtime

18 of 27

Architecture overview

19 of 27

XBot RT Cartesian Plugin

  • Runs a cartesian controller + ROS API on a real-time thread
  • XBot IOPlugin exposes the ROS API (non-RT)
  • XBot RT Plugin runs the controller
  • Non-blocking, shared-memory based RT↔nRT communication

20 of 27

Architecture

IOPlugin

RT Plugin

Lock

CartesianInterface

CartesianInterface

RosServerClass

Try-lock

Unlock

Unlock

CartesianInterface

CartesianController

Sync

21 of 27

Manipulation controller

22 of 27

Manipulation controller

  • Implements CartesianInterface
  • OpenSoT as IK engine
  • Translates a YAML configuration file to corresponding math-of-tasks
  • Cartesian, Com, Postural tasks
  • Joint limit constraints
  • Subtasks, weights, gains, ...
  • More tasks/constraints to come soon!

23 of 27

Case studies

  • Stabilized box-picking
  • Switching controllers
  • Karate

24 of 27

Stabilized box picking

  • Box picking from low height
  • Admittance-based compliant stabilizer
  • Real-time controller to achieve low jitter
  • Pass-the-box motion via run-time base-link change

25 of 27

Switching controllers

  • Heavy brick picking from the ground
  • Inward knees via online postural change
  • Dynamic controller loading to switch to a locomotion module

26 of 27

Karate

  • Wheeled locomotion to reach the target
  • Support polygon reshape to increase stability
  • Runtime switch to manipulation module to execute the Karate motion

27 of 27

Thanks for the attention

Questions?!