Crocoddyl: 多接触最优控制的高效多功能框架

2023-12-20 07:52

本文主要是介绍Crocoddyl: 多接触最优控制的高效多功能框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录


前言

40c58183a5614a32a8f08d9be80ed55c.png

        我们介绍了 Crocoddyl(Contact RObot COntrol by Differential DYnamic Library),这是一个专为高效多触点优化控制(multi-contact optimal control)而定制的开源框架。Crocoddyl 可高效计算给定预定义接触序列(predefined sequence of contacts)的状态轨迹(state trajectory)和控制策略(control policy)。其效率得益于稀疏分析导数(sparse analytical derivatives)的使用、对问题结构的利用以及数据共享。它利用微分几何(differential geometry)来正确描述任何几何系统(如浮动基座系统(floating-base systems))的状态。

        此外,我们还提出了一种名为易损微分动态编程(Feasibility-prone Differential Dynamic Programming,FDDP)的新型多重打靶法(multiple-shooting method)。然而,我们的方法并没有增加额外的决策变量(decision variables),而额外的决策变量往往会因因式分解而增加每次迭代的计算时间。与经典的差分动态编程(DDP)算法相比,我们的新方法具有更强的全局化策略。具体来说,我们对经典 DDP 算法提出了两点修改。首先,后向传递接受不可行的状态控制轨迹。其次,在早期的 "探索性 "迭代中,滚动保持间隙开放(这是仅有相等约束的多重射击方法所期望的)。我们用不同的任务展示了我们框架的性能。利用我们的方法,我们可以在几毫秒的时间内计算出腿式机器人的高动态机动性(highly-dynamic maneuvers)(如跳跃(jumping)、前空翻(front-flip))。

        Crocoddyl 是一个用于接触序列下机器人控制的最优控制库。它的求解器基于新颖高效的微分动态编程(DDP)算法。Crocoddyl 可计算最佳轨迹和反馈增益。它使用 Pinocchio 快速计算机器人动力学和分析导数。

        如果您想了解有关 Crocoddyl 及其求解器的更多信息,我们建议您阅读 [1] [2] [3] 并访问 PUBLICATIONS.md。如果您想了解当前的发展情况并做出贡献,请直接访问开发分支。


一、特点

ec0cd89f874141c3943922af9c39d0da.png

        Crocoddyl 功能多样:

  • 各种最优控制求解器(DDP、FDDP、BoxFDDP、Ipopt 等)
  • 通过 Pinocchio 实现分析和稀疏导数
  • 利用 Pinocchio 支持微分几何
  • 各种积分器、动力学、成本和约束条件
  • 数值微分支持
  • 通过 CppAD 支持自动微分

        Crocoddyl 高效灵活:

  • 高速缓存友好
  • 通过 OpenMP 支持多线程
  • 通过 Boost Python 绑定 Python(包括抽象
  • 兼容 C++14/17/20
  • 经过广泛测试
  • 通过 CppADCodeGen 支持自动代码生成

 

0411be18d75641d988103eab42d28d5e.gif 

二、安装

        Crocoddyl 可以轻松安装在各种 Linux(Ubuntu、Fedora 等)和 Unix 发行版(Mac OS X、BSD 等)上。以下是安装 Crocoddyl 的不同方法。

2.1 Conda

   conda install crocoddyl -c conda-forge

2.2 pypi

  pip install --user crocoddyl

 2.3 ROS

        只需将其克隆(使用 --recursive 命令)到 catkin 工作区并编译即可。

2.3.1 📦 从 Debian / Ubuntu 软件包中使用 robotpkg

        如果您从未添加过 robotpkg 的软件仓库,现在就添加吧:

sudo tee /etc/apt/sources.list.d/robotpkg.list <<EOF
deb [arch=amd64] http://robotpkg.openrobots.org/packages/debian/pub $(lsb_release -sc) robotpkg
EOFcurl http://robotpkg.openrobots.org/packages/debian/robotpkg.key | sudo apt-key add -
sudo apt update

         安装 Crocoddyl 及其 Python 绑定:

sudo apt install robotpkg-py3\*-crocoddyl

        配置环境变量 

export PATH=/opt/openrobots/bin:$PATH
export PKG_CONFIG_PATH=/opt/openrobots/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=/opt/openrobots/lib:$LD_LIBRARY_PATH
export PYTHONPATH=/opt/openrobots/lib/python3.10/site-packages:$PYTHONPATH

三、文档


        这里有 Crocoddyl 的 Doxygen 文档。或者,你也可以查看 Jupyter 笔记本。按以下顺序开始

examples/notebooks/unicycle_towards_origin.ipynb
examples/notebooks/cartpole_swing_up.ipynb
examples/notebooks/arm_manipulation.ipynb
examples/notebooks/whole_body_manipulation.ipynb
示例/笔记本/双足行走.ipynb
examples/notebooks/introduction_too_crocoddyl.ipynb
        此外,安装完成后,您可以按如下方式运行示例:

python -m crocoddyl.examples.quadrupedal_gaits "display" "plot" # enable display and plot

        或运行构建目录中的示例、单元测试和基准测试,如

cd build
make test
make -s examples-quadrupedal_gaits INPUT="display plot" # enable display and plot
make -s benchmarks-cpp-quadrupedal_gaits INPUT="100 walk" # number of trials ; type of gait

         在这里可以使用环境变量来显示和/或绘制由我们的示例生成的图表:

export CROCODDYL_DISPLAY=1
export CROCODDYL_PLOT=1

四、引用 Crocoddyl

        在学术研究中引用 Crocoddyl 时,请使用以下 BibTeX 行:

@inproceedings{mastalli20crocoddyl,author={Mastalli, Carlos and Budhiraja, Rohan and Merkt, Wolfgang and Saurel, Guilhem and Hammoud, Bilaland Naveau, Maximilien and Carpentier, Justin and Righetti, Ludovic and Vijayakumar, Sethu and Mansard, Nicolas},title={{Crocoddyl: An Efficient and Versatile Framework for Multi-Contact Optimal Control}},booktitle = {IEEE International Conference on Robotics and Automation (ICRA)},year={2020}
}

 

        请考虑引用 PUBLICATIONS.md 中描述的我们的部分出版物和贡献。

        Crocoddyl 的贡献不仅限于高效的软件开发。也请考虑引用我们不同求解器和公式的算法贡献:

  • 可行性驱动 DDP (FDDP): [1]
  • 控制受限的可行性驱动 DDP(Box-FDDP): [2]
  • 反动力学轨迹优化和相等约束 DDP 求解器(Intro 求解器): [3]

        最后,还请考虑引用 Pinocchio,它为刚体算法及其导数的高效实施做出了贡献。有关如何引用 Pinocchio 的更多详情,请访问:https://github.com/stack-of-tasks/pinocchio。

五、部分出版物

[1] C. Mastalli, R. Budhiraja, W. Merkt, G. Saurel, B. Hammoud, M. Naveau, J. Carpentier, L. Righetti, S. Vijayakumar and N. Mansard. Crocoddyl: An Efficient and Versatile Framework for Multi-Contact Optimal Control, IEEE International Conference on Robotics and Automation (ICRA), 2020

[2] C. Mastalli, W. Merkt, J. Marti-Saumell, H. Ferrolho, J. Sola, N. Mansard and S. Vijayakumar. A Feasibility-Driven Approach to Control-Limited DDP, Autonomous Robots, 2022

[3] C. Mastalli, S. P. Chhatoi, T. Corbères, S. Tonneau and S. Vijayakumar. Inverse-Dynamics MPC via Nullspace Resolution, IEEE Transactions on Robotics, 2023

 

这篇关于Crocoddyl: 多接触最优控制的高效多功能框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/515282

相关文章

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

MySQL重复数据处理的七种高效方法

《MySQL重复数据处理的七种高效方法》你是不是也曾遇到过这样的烦恼:明明系统测试时一切正常,上线后却频频出现重复数据,大批量导数据时,总有那么几条不听话的记录导致整个事务莫名回滚,今天,我就跟大家分... 目录1. 重复数据插入问题分析1.1 问题本质1.2 常见场景图2. 基础解决方案:使用异常捕获3.

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid