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

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

前言


       我们介绍了 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。如果您想了解当前的发展情况并做出贡献,请直接访问开发分支。

一、特点

       Crocoddyl 功能多样:

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

       Crocoddyl 高效灵活:

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

 


二、安装

       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
EOF
 
curl 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, Bilal
  and 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

目录
相关文章
|
11月前
|
算法 测试技术 数据安全/隐私保护
规则引擎算法的魅力:文档管理软件的灵活性与可扩展性
数字时代已经来了,文档管理软件已经成了企业和组织的宠儿。它们不仅能够帮你打理一大堆文档和信息,还能让你的工作效率飙升,减少犯错的机会,而且信息查找和分享也变得飞快。但是,随着各种各样的需求一直在不停地增长和变化,这些软件也要不停地充电升级,以满足用户们的新愿望。规则引擎算法在这方面可是大有作为,尤其是在让软件更灵活、更能扩展方面,它功不可没。接下来就让我们来看看规则引擎算法在文档管理软件中有哪些作用——
204 1
|
11天前
|
设计模式 存储 人工智能
深度解析Unity游戏开发:从零构建可扩展与可维护的游戏架构,让你的游戏项目在模块化设计、脚本对象运用及状态模式处理中焕发新生,实现高效迭代与团队协作的完美平衡之路
【9月更文挑战第1天】游戏开发中的架构设计是项目成功的关键。良好的架构能提升开发效率并确保项目的长期可维护性和可扩展性。在使用Unity引擎时,合理的架构尤为重要。本文探讨了如何在Unity中实现可扩展且易维护的游戏架构,包括模块化设计、使用脚本对象管理数据、应用设计模式(如状态模式)及采用MVC/MVVM架构模式。通过这些方法,可以显著提高开发效率和游戏质量。例如,模块化设计将游戏拆分为独立模块。
37 3
|
2月前
|
监控 测试技术 持续交付
设计通用灵活的LabVIEW自动测试系统
设计通用灵活的LabVIEW自动测试系统
45 0
|
4月前
|
移动开发 监控 Android开发
构建高效Android应用:从内存优化到电池寿命代码之美:从功能实现到艺术创作
【5月更文挑战第28天】 在移动开发领域,特别是针对Android系统,性能优化始终是关键议题之一。本文深入探讨了如何通过细致的内存管理和电池使用策略,提升Android应用的运行效率和用户体验。文章不仅涵盖了现代Android设备上常见的内存泄漏问题,还提出了有效的解决方案,包括代码级优化和使用工具进行诊断。同时,文中也详细阐述了如何通过减少不必要的后台服务、合理管理设备唤醒锁以及优化网络调用等手段延长应用的电池续航时间。这些方法和技术旨在帮助开发者构建更加健壮、高效的Android应用程序。
|
4月前
|
芯片 数据格式 异构计算
LabVIEW开发虚拟与现实融合的数字电子技术渐进式实验系统
LabVIEW开发虚拟与现实融合的数字电子技术渐进式实验系统
38 1
|
4月前
|
缓存 测试技术 Android开发
构建高效的Android应用:从设计到实现
【5月更文挑战第2天】 在移动设备日益普及的今天,打造一个既快速又流畅的Android应用对于开发者而言至关重要。本文将深入探讨如何优化Android应用的性能,涵盖UI设计的最佳实践、代码层面的性能提升技巧以及利用最新的Android框架和工具进行应用开发的策略。我们将通过实例分析,揭示那些影响应用响应速度和稳定性的关键因素,并提出切实可行的解决方案,帮助开发者构建出色的用户体验。
|
4月前
|
测试技术 开发工具 Android开发
安卓应用开发:打造高效用户界面的关键步骤
【5月更文挑战第27天】本文将探讨在安卓应用开发中如何通过关键步骤打造高效且用户友好的界面。我们将分析UI设计的基本原则,探究Material Design指南,并讨论如何利用Android Studio中的设计工具来优化布局和提高性能。此外,文章还将涉及如何进行有效的测试以确保应用界面既美观又实用。
|
4月前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。
|
4月前
|
编解码 测试技术 Android开发
安卓应用开发:构建高效用户界面的实用指南
【2月更文挑战第29天】在移动应用开发的世界中,创建一个流畅、直观且响应迅速的用户界面(UI)对于吸引和保持用户至关重要。本篇文章旨在向安卓开发者展示如何通过优化布局设计、使用现代UI框架以及利用Android Studio提供的工具来构建高效的用户界面。我们将深入探讨如何减少内存消耗、提升渲染性能,并确保应用在不同设备和屏幕尺寸上的兼容性。跟随本文的指导,你将能够提高应用的整体用户体验,从而在竞争激烈的市场中脱颖而出。
|
机器学习/深度学习 存储 监控
转:排列组合算法在监控软件中的优势、复杂性与应用场景
排列组合算法在监控软件中可能用于处理一些组合与排列问题,例如处理多个元素的组合方式或排列顺序。它在一些特定场景下具有一定的优势和适用性,但也要注意其复杂性。
84 0