This repository hosts C++ implementation of the robust controller introduced in ARMOUR on Kinova-gen3 hardware.
This repository not only integrates the default position control from Kinova, but also implements torque control for tracking a series of continuous trajectory robustly under model uncertainties.
Check demonstration videos corresponding to our example scripts at our website.
The functions in kinova_robust_control codebase are organized into several folders.
customized_msgs
: ROS2 message and service definitionsdynamics
: Regressor-based inverse dynamics and controller implementationsexperiments
: Example scripts for testing controllerskortex
: Interface with Kinova robotssystem
: System architecture and block-based designtrajectories
: Trajectory computation and managementutils
: Utility functions and logging
graph TD
A[experiments]
A --> B[customized_msgs::TrajectoryMsg]
B --> C[trajectories]
C --> E[dynamics]
E --> F[customized_msgs::TorqueControl]
E --> D[system]
G --> D
F --> G[kortex]
G --> H[customized_msgs::KortexMeasurements]
H --> A
H --> E
We provide a detailed documentation on how to install the code in installation/README.md.
- Due to limited time and resources, we were not able to make this codebase fully user-friendly. We strongly recommend carefully reviewing all available documentation, especially the ros2 Python scripts in
experiments/
, to fully understand how the controller operates. - You should make sure that your Kinova arm is equipped with an emergency stop button, so you can immediately shut it down in case of unexpected behavior.
- You should also make sure that there are no obstacles around the arm when you run the examples in
experiments/
.
- Read dynamics/README.md to learn more about the controller interface and architecture if you want to implement your own controller.
- Read trajectories/README.md to learn how to formulate a proper trajectory message. The controller will not execute the trajectory if the trajectory is invalid.
- Read kortex/README.md to learn more about the controller instance and related parameters.
- Read experiments/README.md for examples that send trajectory messages to the controller instance and move the robot along the desired trajectories.
- Read customized_msgs/README.md for definitions of all ros2 messages if you want to customize your own messages.
The repository relies on KINOVA® KORTEX™ API Reference developed and maintained by Kinova Robotics. We gratefully acknowledge their work and contribution to the open-source robotics community.
This work is developed in ROAHM Lab.
Bohao Zhang (jimzhang@umich.edu): Current maintainer, Robust controller implementation in C++.
Jonathan Michaux (jmichaux@umich.edu): Robust controller theory developer.
Patrick D. Holmes (pdholmes@umich.edu): Robust controller theory developer.
Che Chen (cctom@umich.edu): Original creator and maintainer of the repository.
Zichang Zhou (zhouzichang1234@gmail.com): Implemented other controller comparisons.
ARMOUR
is released under a 3-clause BSD license.
For a closed-source version of ARMOUR
for commercial purpose, please contact the authors.
An overview of the theoretical and implementation details has been published in arxiv.
If you use ARMOUR
in an academic work, please cite using the following BibTex entry:
@article{michaux2023can,
title={Can't Touch This: Real-Time, Safe Motion Planning and Control for Manipulators Under Uncertainty},
author={Michaux, Jonathan and Holmes, Patrick and Zhang, Bohao and Chen, Che and Wang, Baiyue and Sahgal, Shrey and Zhang, Tiancheng and Dey, Sidhartha and Kousik, Shreyas and Vasudevan, Ram},
journal={arXiv preprint arXiv:2301.13308},
year={2023}
}
If you have any questions or suggestions, please raise them in Issues. We will get back to you as soon as possible.