This repository hosts the code to reproduce the results in our paper "Provably-Safe, Online System Identification" on Kinova-Gen3 arm. Our paper is available at arxiv.
As shown in .gitmodules
, this repository is essentially a docker container that includes two modules:
- kinova_robust_control: robust controller for hardware Kinova-Gen3.
- RAPTOR: trajectory optimization and system identification related code.
Readers are welcome to refer to the introduction in kinova_robust_control's README for more information on the robust controller and the hardware interface, and the introduction in RAPTOR's README for more information on provably-safe exciting trajectory optimization and robust system identification for unknown payloads.
Precise manipulation tasks require accurate knowledge of payload inertial parameters. Unfortunately, identifying these parameters for unknown payloads while ensuring that the robotic system satisfies its input and state constraints while avoiding collisions with the environment remains a significant challenge. This paper presents an integrated framework that enables robotic manipulators to safely and automatically identify payload parameters while maintaining operational safety guarantees. The framework consists of two synergistic components:
- an online trajectory planning and control framework that generates provably-safe exciting trajectories for system identification that can be tracked while respecting robot constraints and avoiding obstacles
- a robust system identification method that computes rigorous overapproximative bounds on end-effector inertial parameters assuming bounded sensor noise.
Experimental validation on a robotic manipulator performing challenging tasks with various unknown payloads demonstrates the framework's effectiveness in establishing accurate parameter bounds while maintaining safety throughout the identification process.
This repository contains the implementation and scripts needed to reproduce the key experiments presented in our paper:
Experiments (a) and (b): A manipulation task where the robot must safely pick up and stack a series of heavy unknown dumbbells onto a specific location.
Experiment (c): A more challenging scenario where the robot picks up the heaviest dumbbell (8lb) and follows a predefined trajectory to avoid obstacles in a more challenging setting .
This repository includes a Dockerfile that installs all necessary dependencies.
Need Docker? Follow the official instructions.
git clone --recurse-submodules https://github.com/roahmlab/OnlineSafeSysID.git
git submodule update --init --recursive
We have selected HSL to solve large linear systems in the nonlinear optimization problem in RAPTOR. Please follow the instructions in HSL section of the README in RAPTOR to access HSL package and integrate in this container properly.
- Open VS Code.
- Press
Ctrl+Shift+P
and search for:Dev Containers: Rebuild and Reopen Container
. - Select it to automatically build the container using the provided Dockerfile.
Inside the container (/workspaces/OnlineSafeSysID
), run the following to build the repository:
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
Since this command does not include pybind programs inside RAPTOR, you will have to go inside RAPTOR and build the code again:
cd src/RAPTOR
mkdir build
cd build
cmake ..
make -j4
Every time you open a new terminal, you need the following command to load all ros2 environment variables in order:
source install/setup.bash
Note that you may have to remove all previous compiled objects if you make changes to the dockerfile and rebuild the docker container:
rm -rf build install devel
Please save important files or folders before you do this.
For more information on installation, please visit README in kinova_robust_control.
Just for the safety of the arm, make sure that there are no obstacles around the arm before trying anything. Add obstacles as defined in line 37-43 of run_online_sysid_demo.py later when you are sure that the system is stable.
Put dumbbells at specific locations, defined in self.pick_pos
variable (line 159-174) of run_online_sysid_demo.py.
Note that the original gripper of Kinova is not strong enough to hold dumbbells over 7lb stably.
You might need some tapes around the gripper or the dumbbell to increase the friction coefficients to ensure stable grasping.
First, run the following ros2 command in a separate terminal (/workspaces/OnlineSafeSysID/
) before running any of the scripts.
ros2 run kortex control_system --ros-args --params-file ./config.yaml
Note that this will first move the arm to init_pos
defined in config.yaml and the start the robust controller instance.
Launch the script in another terminal using:
ros2 run experiments run_online_sysid_demo.py
This will start the experiment.
To cite our paper in your academic research, please use the following bibtex entry:
@article{zhang2025provably,
title={Provably-Safe, Online System Identification},
author={Zhang, Bohao and Zhou, Zichang and Vasudevan, Ram},
journal={arXiv preprint arXiv:2504.21486},
year={2025}
}
This work is developed in ROAHM Lab.
Bohao Zhang (jimzhang@umich.edu)
Zichang Zhou