{"id":44433694,"url":"https://github.com/mmmarinho/tro2022_adaptivecontrol","last_synced_at":"2026-02-12T13:45:13.407Z","repository":{"id":168943951,"uuid":"644673689","full_name":"mmmarinho/tro2022_adaptivecontrol","owner":"mmmarinho","description":"Sample code and minimal standalone example for the TRO2022 paper: \"Adaptive Constrained Kinematic Control using Partial or Complete Task-Space Measurements\". ","archived":false,"fork":false,"pushed_at":"2025-11-21T14:26:27.000Z","size":14592,"stargazers_count":4,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-21T16:17:10.908Z","etag":null,"topics":["cpp","python","robotics","tro2022"],"latest_commit_sha":null,"homepage":"http://doi.org/10.1109/TRO.2022.3181047","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mmmarinho.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-05-24T02:45:44.000Z","updated_at":"2025-11-21T14:26:31.000Z","dependencies_parsed_at":null,"dependency_job_id":"4dcb01cd-cca0-4ca0-99fb-93614c214062","html_url":"https://github.com/mmmarinho/tro2022_adaptivecontrol","commit_stats":null,"previous_names":["mmmarinho/tro2022_adaptivecontrol"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/mmmarinho/tro2022_adaptivecontrol","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmmarinho%2Ftro2022_adaptivecontrol","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmmarinho%2Ftro2022_adaptivecontrol/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmmarinho%2Ftro2022_adaptivecontrol/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmmarinho%2Ftro2022_adaptivecontrol/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mmmarinho","download_url":"https://codeload.github.com/mmmarinho/tro2022_adaptivecontrol/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmmarinho%2Ftro2022_adaptivecontrol/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29367640,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","python","robotics","tro2022"],"created_at":"2026-02-12T13:45:12.847Z","updated_at":"2026-02-12T13:45:13.402Z","avatar_url":"https://github.com/mmmarinho.png","language":"C++","readme":"# Adaptive Constrained Kinematic Control using Partial or Complete Task-Space Measurements\n\n## Python\n\n### venv\n\n```commandline\n    python3 -m venv venv\n    source venv/bin/activate\n    python3 -m pip install dqrobotics --pre\n    python3 -m pip install marinholab-papers-tro2022-adaptivecontrol\n```\n\n### When you cannot use a venv (e.g. ROS2)\n\n```commandline\n    python3 -m pip install dqrobotics --pre --break-system-packages\n    python3 -m pip install marinholab-papers-tro2022-adaptivecontrol --break-system-packages\n```\n\n## Reference\n\nSample code and minimal example for [our TRO2022 paper](https://doi.org/10.1109/TRO.2022.3181047).\n\n```bib\n@Article{marinhoandadorno2022adaptive,\n  author       = {Marinho, M. M. and Adorno, B. V.},\n  title        = {Adaptive Constrained Kinematic Control using Partial or Complete Task-Space Measurements},\n  journal      = {IEEE Transactions on Robotics (T-RO)},\n  year         = {2022},\n  month        = dec,\n  doi          = {10.1109/TRO.2022.3181047},\n  volume       = {38},\n  number       = {6},\n  pages        = {3498--3513}\n}\n```\n\n## Standalone Example\n\n- The red object represents the estimated robot, initially very wrong **on purpose** to evaluate the adaptation.\n- The estimation usually converges within a few seconds using measurements from a simulated sensor.\n- Simultaneously, the robot proceeds through the box, toward the target poses, without collisions. \n- You can change the pose of the `xd0` and `xd1` objects in the scene, as long as you do it **before** the simulation starts.\n\nhttps://github.com/mmmarinho/tro2022_adaptivecontrol/assets/46012516/2abe0b0b-6e48-46e9-9a86-061ba013b355\n\n## Usage \n\n### Download \u0026 extract the standalone version (only do this once)\n```bash\ncd ~\nsudo apt install curl jq -y\nwget $(curl -sL https://api.github.com/repos/mmmarinho/tro2022_adaptivecontrol/releases/latest | jq -r '.assets[].browser_download_url')\ntar -xvf tro2022_adaptivecontrol_example.tar.xz\n```\n### Running\n\n1. Open the example scene, namely `tro2022_adaptivecontrol_example/TRO2022_MarinhoAdorno_ReferenceScene.ttt` on CoppeliaSim.\n2. Run\n```bash\ncd ~/tro2022_adaptivecontrol_example\n./run_example.sh\n```\n### Troubleshooting\n\nIf you have the error below when running the pre-compiled example, please use `Ubuntu 22.04` or later.\n\n```bash\n./run_example.sh\nbin/adaptive_control_example: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32' not found (required by bin/adaptive_control_example) bin/adaptive_control_example: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.34' not found (required by bin/adaptive_control_example)\nbin/adaptive_control_example: /lib/x86_64-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.29' not found (required by bin/adaptive_control_example) bin/adaptive_control_example: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32' not found (required by lib/libdqrobotics.so)\nbin/adaptive_control_example: /lib/x86_64-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.29' not found (required by lib/libdqrobotics-interface-vrep.so) bin/adaptive_control_example: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32' not found (required by lib/libdqrobotics-interface-vrep.so)\nbin/adaptive_control_example: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by lib/libdqrobotics-interface-vrep.so)\n```\n\n## Known limitations *of this example*/*TODO* list/*Extra info*\n\n- The stopping criterion is elapsed time, so it might not converge for all initial parameters.\n- The initial convergence to measurements mentioned in the paper *TODO* for this example.\n- The estimated model is randomized so it might start in an implausible zone. Fixing this is *TODO* for this example.\n- Sample code for partial measurements is included, but they have not been tested in this example, only in the physical robot.\nThe adaptation is supposed to move the parameters of the `estimated_robot` towards the ideal kinematic model defined by `real_robot` in the code. \nThe robot model in CoppeliaSim is for visualization only.\n- 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.\n- 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.\n\n## Build from source\n\n### Ubuntu\n\n```bash\nsudo apt install g++ cmake git libeigen3-dev\n```\n\n### `macos`\n```bash\nbrew install cmake eigen cppzmq boost\n```\n\n### Download the repo\n\n```bash\ncd ~\nmkdir git\ncd git\ngit clone https://github.com/mmmarinho/tro2022_adaptivecontrol.git --recursive\n```\n\n### Build\n\nWith all dependencies correctly configured,\n\n```bash\ncd ~/git/tro2022_adaptivecontrol\nchmod +x .build.sh\n./.build.sh\n```\n\n## Running\n\n1. Open the example scene, namely `TRO2022_MarinhoAdorno_ReferenceScene.ttt` on CoppeliaSim.\n2. Run\n```bash\ncd ~/git/tro2022_adaptivecontrol\nchmod +x .run.sh\n./.run.sh\n```\n\n## Example console output of the results\n\nRunning on an 8 core Ubuntu VM.\n\n*Not considering the setup step prints*\n\n```console\nReference timeout for xd0\n  Average computational time = 0.00126314 seconds.\n  Clock overruns =7 (Too many, i.e. hundreds, indicate that the sampling time is too low for this CPU).\n  Final task pose error norm 2.37699e-15 (Dual quaternion norm).\n  Final task translation error norm 0 (in meters).\n  Final measurement error norm 9.3756e-16 (Dual quaternion norm).\n  Final measurement translation error norm 0 (in meters).\nReference timeout for xd1\n  Average computational time = 0.000902905 seconds.\n  Clock overruns =7 (Too many, i.e. hundreds, indicate that the sampling time is too low for this CPU).\n  Final task pose error norm 0.0225817 (Dual quaternion norm).\n  Final task translation error norm 0.044178 (in meters).\n  Final measurement error norm 0.000940036 (Dual quaternion norm).\n  Final measurement translation error norm 0.001836 (in meters).\n```\n\n## Tested on\n\n- 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`\n- g++ --version `g++ (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0`\n- CoppeliaSim EDU 5.4.1 (rev4)\n- DQ Robotics cpp as shown in the submodule information.\n- DQ Robotics cpp-interface-vrep as shown in the submodule information.\n- DQ Robotics cpp-interface-qpoases as shown in the submodule information.\n- qpOASES as shown in the submodule information.\n- sas_core as shown in the submodule information.\n\n## Changelog\n\n- 2025.05. Updating code to work with `DQ_CoppeliaSimInterfaceZMQ`.\n- 2025.06. Removed Python wrapper instructions now that it's available via PyPI.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmmarinho%2Ftro2022_adaptivecontrol","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmmmarinho%2Ftro2022_adaptivecontrol","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmmarinho%2Ftro2022_adaptivecontrol/lists"}