Skip to main content

Adaptive Constrained Kinematic Control using Partial or Complete Task-Space Measurements

Python

venv

    python3 -m venv venv
    source venv/bin/activate
    python3 -m pip install dqrobotics --pre
    python3 -m pip install marinholab-papers-tro2022-adaptivecontrol

When you cannot use a venv (e.g. ROS2)

    python3 -m pip install dqrobotics --pre --break-system-packages
    python3 -m pip install marinholab-papers-tro2022-adaptivecontrol --break-system-packages

Reference

Sample code and minimal example for our TRO2022 paper.

@Article{marinhoandadorno2022adaptive,
  author       = {Marinho, M. M. and Adorno, B. V.},
  title        = {Adaptive Constrained Kinematic Control using Partial or Complete Task-Space Measurements},
  journal      = {IEEE Transactions on Robotics (T-RO)},
  year         = {2022},
  month        = dec,
  doi          = {10.1109/TRO.2022.3181047},
  volume       = {38},
  number       = {6},
  pages        = {3498--3513}
}

Standalone Example

  • The estimated robot model starts out on purpose very wrong, to evaluate the adaptation.
  • The estimation usually converges within a few seconds using measurements from a simulated sensor.
  • Simultaneously, the robot proceeds through the box toward the target poses, without collisions.
  • The example runs headless on the in-memory stand-in simulator (M3_SimulatorDummy), so no external simulator is required.
  • You can change the pose of the xd0 and xd1 target objects (see M3_SimulatorDummy::load_reference_scene), as long as you do it before the simulation starts.

The paper's original demonstration (recorded with the robot model in the GUI):

https://github.com/mmmarinho/tro2022_adaptivecontrol/assets/46012516/2abe0b0b-6e48-46e9-9a86-061ba013b355

Usage

Download & extract the standalone version (only do this once)

cd ~
sudo apt install curl jq -y
wget $(curl -sL https://api.github.com/repos/mmmarinho/tro2022_adaptivecontrol/releases/latest | jq -r '.assets[].browser_download_url')
tar -xvf tro2022_adaptivecontrol_example.tar.xz

Running

cd ~/tro2022_adaptivecontrol_example
./run_example.sh

Troubleshooting

If the pre-compiled example fails with a GLIBC/GLIBCXX version error, please use Ubuntu 22.04 or later, or build from source (below).

Known limitations of this example/TODO list/Extra info

  • The stopping criterion is elapsed time, so it might not converge for all initial parameters.
  • The initial convergence to measurements mentioned in the paper TODO for this example.
  • The estimated model is randomized so it might start in an implausible zone. Fixing this is TODO for this example.
  • Sample code for partial measurements is included, but they have not been tested in this example, only in the physical robot. The adaptation is supposed to move the parameters of the estimated_robot towards the ideal kinematic model defined by real_robot in the code.
  • A different solver was used in the paper's experiments; in this example we use an open-source solver, so the behavior might be somewhat different.
  • The final target position is, ON PURPOSE, chosen as somewhere the robot cannot reach. It serves to show that even in such case the robot does not collide with the environment.

Build from source

Ubuntu

sudo apt install g++ cmake git libeigen3-dev

macos

brew install cmake eigen

Download the repo

cd ~
mkdir git
cd git
git clone https://github.com/mmmarinho/tro2022_adaptivecontrol.git --recursive

Build

With all dependencies correctly configured,

cd ~/git/tro2022_adaptivecontrol
chmod +x .build.sh
./.build.sh

Running

The example runs headless on the in-memory stand-in simulator (M3_SimulatorDummy):

cd ~/git/tro2022_adaptivecontrol
chmod +x .run.sh
./.run.sh

Example console output of the results

Running on an 8 core Ubuntu VM.

Not considering the setup step prints

Reference timeout for xd0
  Average computational time = 0.00126314 seconds.
  Clock overruns =7 (Too many, i.e. hundreds, indicate that the sampling time is too low for this CPU).
  Final task pose error norm 2.37699e-15 (Dual quaternion norm).
  Final task translation error norm 0 (in meters).
  Final measurement error norm 9.3756e-16 (Dual quaternion norm).
  Final measurement translation error norm 0 (in meters).
Reference timeout for xd1
  Average computational time = 0.000902905 seconds.
  Clock overruns =7 (Too many, i.e. hundreds, indicate that the sampling time is too low for this CPU).
  Final task pose error norm 0.0225817 (Dual quaternion norm).
  Final task translation error norm 0.044178 (in meters).
  Final measurement error norm 0.000940036 (Dual quaternion norm).
  Final measurement translation error norm 0.001836 (in meters).

Tested on

  • Ubuntu 22.04 5.19.0-41-generic #42~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Apr 18 17:40:00 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
  • g++ --version g++ (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0
  • DQ Robotics cpp as shown in the submodule information.
  • DQ Robotics cpp-interface-qpoases as shown in the submodule information.
  • qpOASES as shown in the submodule information.
  • sas_core as shown in the submodule information.

Changelog

  • 2026.08. Removed the dependency on the external robot simulator and its network interface: the example now runs headless on the in-memory stand-in simulator M3_SimulatorDummy (dry testing), so no external simulator is required to build or run it.
  • 2025.05. Updating code to work with an external-simulator-based interface.
  • 2025.06. Removed Python wrapper instructions now that it's available via PyPI.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp313-cp313-macosx_26_0_arm64.whl (383.5 kB view details)

Uploaded CPython 3.13macOS 26.0+ ARM64

marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp312-cp312-macosx_26_0_arm64.whl (383.5 kB view details)

Uploaded CPython 3.12macOS 26.0+ ARM64

marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp311-cp311-macosx_26_0_arm64.whl (381.8 kB view details)

Uploaded CPython 3.11macOS 26.0+ ARM64

marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp310-cp310-macosx_26_0_arm64.whl (380.7 kB view details)

Uploaded CPython 3.10macOS 26.0+ ARM64

File details

Details for the file marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp313-cp313-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp313-cp313-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cf132ab3b7b6588cec844c1b268a151ec8cc2cb915a1536b88d6f1eb61d70918
MD5 125ab2d9b69c5aa05613bbb6efaeedf0
BLAKE2b-256 f8b105e3b2ffddd032aa978773ff7c2b36eb0b218dd3e77a1c942878222317fc

See more details on using hashes here.

File details

Details for the file marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp313-cp313-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp313-cp313-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e3fd5b217571fd0b922b56cf2de5cc700b63c152d3ba424f7c544597d693d665
MD5 79a764011d31f5406e9bdcd80a25a735
BLAKE2b-256 664b97490b69ba310930e4c645ef02aca7363cd6185270de41c5746dc1e80316

See more details on using hashes here.

File details

Details for the file marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp313-cp313-macosx_26_0_arm64.whl.

File metadata

File hashes

Hashes for marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp313-cp313-macosx_26_0_arm64.whl
Algorithm Hash digest
SHA256 efa8302ccd78efff71ed645e330c71a410e9311401ad943d93445e5abb73d4e6
MD5 076f4307a47e769cb115843d67aca989
BLAKE2b-256 f7839b07173cdcb9ab0ab5f54a9fc5178c051eb961cc6bc6327c2ba31d34a662

See more details on using hashes here.

File details

Details for the file marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp312-cp312-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp312-cp312-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3f1e2ac29c041c630504118c6f2cd151a5cfa67f6311b8d12ee8da649b7e5ceb
MD5 d4066196e5370939fafbc3361ba1b449
BLAKE2b-256 8946d11ba3cf2adb9d0719a79ef7c7242df67ccceba52d5fed331c4c0a0c6f08

See more details on using hashes here.

File details

Details for the file marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp312-cp312-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp312-cp312-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7ab934b8fd4e17b74cf7fa611344071f1cbcbbb607fe5b675011d4467be20bf1
MD5 670e74f1d8ee914bae021a452b3817cf
BLAKE2b-256 078128098c8add7f7fad2fcc099fdec4ec774834cf3b67e1237cf7359483cbbe

See more details on using hashes here.

File details

Details for the file marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp312-cp312-macosx_26_0_arm64.whl.

File metadata

File hashes

Hashes for marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp312-cp312-macosx_26_0_arm64.whl
Algorithm Hash digest
SHA256 e8ba9733bb758c50f8a0f65a644a2d16a28176ad60853209900603d4def708b6
MD5 4d0a1b572ce397f5ceb42d10705646c9
BLAKE2b-256 7706a666b1bd4ee98c32f9099d740f1b41ad9c0e325d6d138cfdcbab972540c8

See more details on using hashes here.

File details

Details for the file marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp311-cp311-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp311-cp311-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f9728f78a5f3e546497ed7369ac83ffe50120404ce4176de5b1b2cab45560d79
MD5 d9c41874946de04c0ffed728ef68743f
BLAKE2b-256 28e8a88f58cffc11576927233055864cebb60d3e2140afc65c63ddbda249e63b

See more details on using hashes here.

File details

Details for the file marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp311-cp311-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp311-cp311-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2d27bf7bd067209b6a87f9b22e35f6de5beed08294ef8bfd1105fa6bb055235a
MD5 959e1d9c4a6005f3e47d035644c10779
BLAKE2b-256 028a56bf3490812ceeaed748cdc86906160b8a355c66ffce20e5b0df0c1c6669

See more details on using hashes here.

File details

Details for the file marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp311-cp311-macosx_26_0_arm64.whl.

File metadata

File hashes

Hashes for marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp311-cp311-macosx_26_0_arm64.whl
Algorithm Hash digest
SHA256 ac7157e584f834fd9ca45607efaf2cc0b3bc773ca429d853dc6948120cfe2fb4
MD5 74231ca8e66d756d6d1e50febaeac5ba
BLAKE2b-256 52200083d2cab7e6a6d0b25a3da1169d2c5aa7df348ab22ae6e4453b37d43b13

See more details on using hashes here.

File details

Details for the file marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp310-cp310-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp310-cp310-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cbe370b979dbe1150cb32d0507cb76a0826c9cdbacf95fd29d1b75e307746df4
MD5 af5984b90a3d0fbe655754057a34a496
BLAKE2b-256 91e7b8a333291f854120669fc56ff345a0d98a4ede9e06a79ee87bc924ae5d16

See more details on using hashes here.

File details

Details for the file marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp310-cp310-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp310-cp310-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 30f1e8569c00f388007e260abee4f056c07725b632f6da0d9e3feea5587af418
MD5 3f6b34ae5f1ce4680712dacf80709b94
BLAKE2b-256 5e3afaf59e15af50d9e128c74a408891d2c53b689001c86e81fef987bdee8c8c

See more details on using hashes here.

File details

Details for the file marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp310-cp310-macosx_26_0_arm64.whl.

File metadata

File hashes

Hashes for marinholab_papers_tro2022_adaptivecontrol-25.6.0.45-cp310-cp310-macosx_26_0_arm64.whl
Algorithm Hash digest
SHA256 a9c15376d74fbbac20459afad862f924d9f7fab7353b7a91bc98b3c485c07c39
MD5 9cd5b807b4ee9610f0cfd3471528a849
BLAKE2b-256 48c0850d112bcea35f6f74276b6674e40d079301449fc03cca63f6717581dec9

See more details on using hashes here.

Release history Release notifications | RSS feed

25.6.0.50

12 files

25.6.0.49

12 files

25.6.0.48

12 files

25.6.0.47

12 files

25.6.0.46

12 files

This release

25.6.0.45 This release

12 files

25.6.0.34

12 files

25.6.0.33

12 files

25.6.0.27

12 files

25.6.0.26

12 files

25.6.0.25

12 files

25.6.0.24

12 files

25.6.0.23

12 files

25.6.0.22

6 files

25.6.0.21

4 files

25.6.0.20

8 files

25.6.0.18

5 files

25.6.0.17

1 file

25.5.6

9 files

25.5.5

9 files

25.5.4

10 files

25.5.3

10 files

25.5.2

10 files

25.5.1

2 files

25.5.0

2 files

23.6.0

2 files

0.0.1

8 files

0.0.0

8 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page