- Important note (July 2021): this library is currently only scarcely maintained,
- it may take a while until we respond to bugs or feature requests.
Esta é a Control Toolbox, uma biblioteca C++ eficiente para controle, estimativa, otimização e planejamento de movimento em robótica.
Link para o wiki, início rápido!
Encontre a documentação detalhada aqui.
Esta é a ADRL Control Toolbox ('CT'), uma biblioteca C++ de código aberto para modelagem, controle, estimativa, otimização de trajetória e controle preditivo de modelo eficientes. O CT é aplicável a uma ampla classe de sistemas dinâmicos, mas apresenta ferramentas de modelagem adicionais especialmente projetadas para robótica. Esta página descreve seu conceito geral, seus principais blocos de construção e destaca exemplos de aplicações selecionados.
A biblioteca contém diversas ferramentas para projetar e avaliar controladores, modelar sistemas dinâmicos e resolver problemas de controle ótimo. O CT foi projetado com os seguintes recursos em mente:
Sistemas e dinâmica :
Otimização de trajetória, controle ideal e controle preditivo de modelo (não linear) :
Desempenho :
Modelagem de Robôs, Cinemática e Dinâmica de Corpo Rígido :
Diferenciação Automática :
A Caixa de Ferramentas de Controle tem sido usada para tarefas de controle de Hardware e Simulação em robôs voadores, ambulantes e terrestres.
Exemplos de otimização um pouco mais complexos, incluindo otimização de marcha para um quadrúpede, estão disponíveis em ct_ros.
Uma tarefa comum para pesquisadores e profissionais nas comunidades de controle e robótica é modelar sistemas, implementar equações de movimento e projetar controladores baseados em modelos, estimadores, algoritmos de planejamento, etc. , computando informações derivadas, formulando funções de custo e restrições ou executando controladores no estilo de controle preditivo de modelo.
A Caixa de Ferramentas de Controle foi projetada especificamente para essas tarefas. Ele é escrito inteiramente em C++ e tem um forte foco em código altamente eficiente que pode ser executado online (em loop) em robôs ou outro hardware acionado. Uma contribuição importante do CT são suas implementações de algoritmos de controle ótimo, abrangendo uma gama de implementações simples de referência LQR até controle preditivo de modelo restrito. O CT suporta Diferenciação Automática (Auto-Diff) e permite gerar código derivado para funções escalares arbitrárias e com valor vetorial. Projetamos a caixa de ferramentas pensando na usabilidade, permitindo que os usuários apliquem conceitos avançados, como controle preditivo de modelo não linear (NMPC) ou controle numérico ideal, facilmente e com mínimo esforço. Embora forneçamos uma interface para um software de modelagem de robôs compatível com Auto-Diff de última geração, todos os outros módulos são independentes de uma estrutura de modelagem específica, permitindo que o código seja interligado com códigos ou bibliotecas C/C++ existentes.
O CT tem sido utilizado com sucesso em diversos projetos diferentes, incluindo um grande número de experimentos de hardware, demonstrações e publicações acadêmicas. Exemplos de aplicações de hardware são otimização de trajetória on-line com prevenção de colisão cite giftthaler2017autodiff, otimização de trajetória para quadrúpedes cite neunert:2017:ral e manipuladores móveis cite giftthaler2017eficiente, bem como NMPC em robôs terrestres cite neunert2017mpc e UAVs cite neunert16hexrotor. O projeto originou-se de pesquisas realizadas no Agile & Dexterous Robotics Lab da ETH Zurich, mas é continuamente ampliado para cobrir mais campos de aplicações e algoritmos.
O software é um dos principais blocos de construção dos sistemas robóticos e há um grande esforço na criação de ferramentas de software e bibliotecas para robótica. No entanto, quando se trata de controle e especialmente de Controle Numérico Ótimo, não existem muitas ferramentas de código aberto disponíveis que sejam fáceis de usar para desenvolvimento rápido e eficientes o suficiente para uso online. Embora existam caixas de ferramentas maduras para Controle Numérico Ótimo e Otimização de Trajetória, elas são ferramentas autônomas e altamente especializadas que não fornecem flexibilidade suficiente para outras aplicações. É aqui que entra o CT. O CT foi projetado desde o início para fornecer as ferramentas necessárias para o rápido desenvolvimento e avaliação de métodos de controle, ao mesmo tempo em que é otimizado para eficiência, permitindo a operação on-line. Embora a ênfase esteja no controle, as ferramentas fornecidas também podem ser usadas para aplicações de simulação, estimativa ou otimização.
Em contraste com outros softwares robóticos, o CT não é uma aplicação rígida e integrada, mas pode ser visto literalmente como uma caixa de ferramentas: oferece uma variedade de ferramentas que podem ser usadas e combinadas para resolver uma tarefa em questão. Embora a facilidade de uso tenha sido um critério importante durante o projeto e exemplos de aplicação são fornecidos, o uso de CT ainda requer conhecimento de programação e controle. No entanto, libera os usuários da implementação de métodos padrão que exigem experiência profunda com álgebra linear ou métodos numéricos. Além disso, ao utilizar definições e tipos comuns, é proporcionada uma integração perfeita entre diferentes componentes, tais como sistemas, controladores ou integradores, permitindo uma prototipagem rápida.
O foco principal do CT é a eficiência, por isso é totalmente implementado em C++. Como o CT foi projetado como uma caixa de ferramentas e não como um aplicativo integrado, tentamos fornecer o máximo de flexibilidade aos usuários. Portanto, ele não está vinculado a um middleware específico como o ROS e as dependências são mantidas no mínimo. As duas dependências essenciais para CT são Eigen e Kindr (que é baseado em Eigen). Esta dependência de Eigen é intencional, uma vez que Eigen é um padrão de fato para álgebra linear em C++, pois fornece implementações altamente eficientes de operações de matrizes padrão, bem como métodos de álgebra linear mais avançados. Kindr é uma biblioteca de cinemática apenas de cabeçalho que se baseia nela e fornece tipos de dados para diferentes representações de rotação, como quaternions, ângulos de Euler ou matrizes de rotação.
A Caixa de Ferramentas de Controle consiste em três módulos principais. O módulo Core ( ct_core
), o módulo Optimal Control ( ct_optcon
) e o módulo Rigid Body Dynamics ( ct_rbd
). Existe uma hierarquia clara entre os módulos. Isso significa que os módulos dependem uns dos outros nesta ordem, por exemplo, você pode usar o módulo principal sem o módulo optcon ou rbd.
ct_core
) fornece definições gerais de tipo e ferramentas matemáticas. Por exemplo, ele contém a maioria das definições de tipos de dados, definições de sistemas e controladores, bem como funcionalidades básicas, como integradores numéricos para equações diferenciais.ct_optcon
) é construído sobre o módulo Core e adiciona infraestrutura para definir e resolver problemas de controle ideal. Ele contém a funcionalidade para definir funções de custo, restrições, backends do solucionador e um wrapper MPC geral.ct_rbd
) fornece ferramentas para modelar sistemas Rigid Body Dynamics e interfaces com tipos de dados ct_core
e ct_optcon
. Para testes e também como exemplos, também fornecemos o módulo de modelos ( ct_models
) que contém vários modelos de robôs, incluindo um quadrúpede, um braço robótico, um quadrotor normal e um quadrotor com carga suspensa.
Os quatro módulos principais diferentes são detalhados a seguir.
Para começar a usar a caixa de ferramentas de controle, crie a documentação do repositório com doxygen e siga o tutorial "Introdução".
Este software foi desenvolvido no Agile & Dexterous Robotics Lab da ETH Zurich, Suíça, entre 2014 e 2018. Durante esse período, o desenvolvimento foi possível através do apoio financeiro da Swiss National Science Foundation (SNF) através de um prêmio SNF Professorship para Jonas Buchli e os Centros Nacionais de Competência em Pesquisa (NCCR) em Robótica e Fabricação Digital.
O Control Toolbox é lançado sob a licença da cláusula BSD-2. Consulte LICENCE.txt e NOTICE.txt
@article{adrlCT,
title={The control toolbox — An open-source C++ library for robotics, optimal and model predictive control},
author={Markus Giftthaler and Michael Neunert and Markus St{"a}uble and Jonas Buchli},
journal={2018 IEEE International Conference on Simulation, Modeling, and Programming for Autonomous Robots (SIMPAR)},
year={2018},
pages={123-129}
}
Versões anteriores até v2.3 estão hospedadas no bitbucket e podem ser encontradas em https://bitbucket.org/adrlab/ct/wiki/Home
Esta caixa de ferramentas foi usada ou ajudou a realizar as seguintes publicações acadêmicas:
Markus Giftthaler, Michael Neunert, Markus Stäuble e Jonas Buchli. “The Control Toolbox - Uma biblioteca C++ de código aberto para robótica, controle ideal e preditivo de modelo”. IEEE Simpar 2018 (Prêmio de Melhor Artigo de Estudante). Pré-impressão arXiv
Markus Giftthaler, Michael Neunert, Markus Stäuble, Jonas Buchli e Moritz Diehl. “Uma família de métodos iterativos de disparo Gauss-Newton para controle ideal não linear”. IROS 2018. pré-impressão arXiv
Jan Carius, René Ranftl, Vladlen Koltun e Marco Hutter. "Otimização de trajetória com contatos rígidos implícitos." Cartas 3 de Robótica e Automação IEEE, no. 4 (2018): 3316-3323.
Michael Neunert, Markus Stäuble, Markus Giftthaler, Dario Bellicoso, Jan Carius, Christian Gehring, Marco Hutter e Jonas Buchli. “Controle preditivo de modelo de corpo inteiro por meio de contatos para quadrúpedes”. Cartas de Robótica e Automação IEEE, 2017. pré-impressão arXiv
Markus Giftthaler e Jonas Buchli. “Uma abordagem de projeção para controle ideal quadrático linear iterativo com restrição de igualdade”. Conferência Internacional IEEE-RAS 2017 sobre Robôs Humanóides, 15 a 17 de novembro, Birmingham, Reino Unido. Explorar IEEE
Markus Giftthaler, Michael Neunert, Markus Stäuble, Marco Frigerio, Claudio Semini e Jonas Buchli. “Diferenciação automática de dinâmica de corpo rígido para controle e estimativa ideais”, Advanced Robotics, edição especial do SIMPAR. Novembro de 2017. pré-impressão arXiv
Michael Neunert, Markus Giftthaler, Marco Frigerio, Claudio Semini e Jonas Buchli. “Fast Derivatives of Rigid Body Dynamics for Control, Optimization and Estimation”, Conferência Internacional IEEE 2016 sobre Simulação, Modelagem e Programação para Robôs Autônomos, São Francisco. (Prêmio de Melhor Artigo). Explorar IEEE
Michael Neunert, Farbod Farshidian, Alexander W. Winkler, Jonas Buchli "Otimização de trajetória por meio de contatos e descoberta automática de marcha para quadrúpedes", IEEE Robotics and Automation Letters, IEEE Xplore
Michael Neunert, Cédric de Crousaz, Fadri Furrer, Mina Kamel, Farbod Farshidian, Roland Siegwart, Jonas Buchli. "Controle preditivo de modelo não linear rápido para otimização e rastreamento de trajetória unificada", 2016 Conferência Internacional IEEE sobre Robótica e Automação (ICRA), IEEE Xplore
Markus Giftthaler, Farbod Farshidian, Timothy Sandy, Lukas Stadelmann e Jonas Buchli. “Efficient Kinematic Planning for Mobile Manipulators with Non-holonomic Constraints Using Optimal Control”, Conferência Internacional IEEE sobre Robótica e Automação, 2017, Singapura. Pré-impressão arXiv
Markus Giftthaler, Timothy Sandy, Kathrin Dörfler, Ian Brooks, Mark Buckingham, Gonzalo Rey, Matthias Kohler, Fabio Gramazio e Jonas Buchli. “Fabricação Robótica Móvel em escala 1:1: o Fabricante In situ”. Robótica de Construção, Springer Journal no. 41693 pré-impressão arXiv
Timothy Sandy, Markus Giftthaler, Kathrin Dörfler, Matthias Kohler e Jonas Buchli. “Autonomous Repositioning and Localization of an In situ Fabricator”, Conferência Internacional IEEE sobre Robótica e Automação 2016, Estocolmo, Suécia. Explorar IEEE
Michael Neunert, Farbod Farshidian, Jonas Buchli (2014). Controle de movimento preditivo de modelo não linear adaptativo em tempo real. No IROS 2014 Workshop sobre Aprendizado de Máquina no Planejamento e Controle do Movimento do Robô, pré-impressão