Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Lightweight trajectory optimization for the robot waiter problem.

License

Notifications You must be signed in to change notification settings

adamheins/uplite

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lightweight robot waiter.

Uplite is a modern and lightweight implementation of the core ideas from this paper (see full citation below) for nonprehensile object transportation (also known as the robot waiter problem). Compared to the original implementation, uplite currently:

  • does not use ROS;
  • is written in Python only (underlying libraries of course use C/C++, but the user doesn't have to);
  • is simulation-only (using PyBullet);
  • uses a fixed-base arm rather than a mobile manipulator;
  • only supports a single transported object (a box);
  • does not implement obstacle avoidance;
  • generates and tracks an offline plan rather than online MPC;
  • implements the proposed robust sticking constraints while omitting full (naive) sticking constraints;
  • uses acados for nonlinear trajectory optimization;
  • is vastly easier to set up, install, and modify.

This smaller set of features allows the codebase to remain a simple starting point for those wishing to work on or play with the waiter's problem. However, the code should also be easy to modify to add features and extend for your use-case.

Install

Uplite uses pixi (an alternative to conda) to manage dependencies. Assuming you have pixi installed, do:

# change destination paths as you see fit
git clone https://github.com/adamheins/uplite ~/uplite
cd ~/uplite
pixi install

Unfortunately, there is no conda package for acados, so it must be installed manually:

# see also <https://docs.acados.org/installation/index.html>
# ensure you have make and cmake on your system
git clone https://github.com/acados/acados.git ~/acados
cd ~/acados
git submodule update --recursive --init
mkdir -p build
cd build
cmake ..
make install -j4

# once acados is built, install the Python interface into your uplite pixi
# workspace
cd ~/uplite
pixi run pip install -e ~/acados/interfaces/acados_template

Usage

A PyBullet simulation of a fixed-based arm moving a box on a tray is provided in examples/main.py. The constraint type can be passed as a command line argument using the -c or --constraint option; e.g.,

# use the 'robust' constraint proposed in the paper
# other possible constraint types are 'none', 'upward', and 'aligned'
pixi run python examples/main.py -c robust

This example is currently set up to fail (i.e., the box is dropped) with the none and upward constraint types while succeeding with the aligned and robust constraint types. Feel free to change the values of the constants at the top of the script to obtain different behaviours.

The constraint types none, upward, and robust correspond to those described in the original paper. The full constraints from the paper are not currently implemented. The aligned constraints (which simply force the tray's normal to be aligned with the total acceleration vector) were not included in the original paper but are described in Section 4.8.3 of my thesis.

To modify additional parameters of the trajectory optimization problem, edit the file uplite/planner.py.

Citation

If you find this work useful, feel free to cite the original paper:

@article{heins2023upright,
  title = {Keep It Upright: Model Predictive Control for Nonprehensile Object Transportation With Obstacle Avoidance on a Mobile Manipulator},
  author = {Adam Heins and Angela P. Schoellig},
  journal = {{IEEE Robotics and Automation Letters}},
  number = {12},
  volume = {8},
  pages = {7986--7993},
  doi = {10.1109/LRA.2023.3324520},
  year = {2023},
}

License

MIT (see the LICENSE file).

About

Lightweight trajectory optimization for the robot waiter problem.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages