OCS2 入门教程(一)

本文涉及的产品
资源编排,不限时长
简介: OCS2 入门教程(一)

前言 - 概述

       OCS2 是专为切换系统优化控制(Optimal Control for Switched Systems,OCS2)定制的 C++ 工具箱。该工具箱提供以下算法的高效实现:

  • SLQ:连续时间域约束 DDP
  • iLQR:离散时域约束 DDP
  • SQP:基于 HPIPM 的多重打靶算法
  • IPM: 基于非线性内点法的多重搜索算法
  • SLP:基于 PIPG 的顺序线性规划算法

       部分翻译:

英文 中文
Multiple-shooting algorithm 多重打靶法
DDP 微分动态规划
HPIPM 一个 QP 求解器
Path integral stochatic optimal control 路径积分随机最优控制

       OCS2 通过增强拉格朗日法(Augmented Lagrangian)或松弛障碍法(relaxed barrier methods)处理一般路径约束。为了便于将 OCS2 应用于机器人任务,它为用户提供了额外的工具,以便根据 URDF 模型设置系统动力学(如运动学(kinematic)或动力学(dynamic)模型)和成本/约束(cost/constraints)(如避免自碰撞(self-collision avoidance)和末端执行器跟踪(end-effector tracking))。


       该库还提供了一个自动微分(automatic differentiation)工具,用于计算系统动力学、约束和成本的导数(derivatives)。为了便于在机器人平台上部署,OCS2 提供了 ROS 接口工具。该工具箱的实现高效且数值稳定,加上其友好的用户界面,为在机载计算能力有限(limited onboard computation)的众多机器人应用中使用该工具箱铺平了道路。

0.1 如何使用 OCS2 工具箱?

       OCS2 可以轻松安装在 Ubuntu 上。源代码也是公开的。要开始使用控制工具箱,请参阅 "开始安装 "和 "入门 "页面。

0.2 许可证

OCS2 工具箱根据 BSD 3 条款许可发布。请注意源代码目录中的许可证和注意事项文件。

0.3 荣誉

       以下人员参与了 OCS2 的开发:

项目经理: Farbod Farshidian。


主要开发人员 Farbod Farshidian、Ruben Grandia、Michael Spieler、Jan Carius、Jean-Pierre Sleiman。


其他开发人员 Alexander Reske、Sotaro Katayama、Mayank Mittal、Jia-Ruei Chiu、Johannes Pankert、Perry Franklin、Tom Lankhorst、David Hoeller、Asutosh Satapathy、Markus Giftthaler、Edo Jelavic。


       致谢: OCS2 工具箱的开发由苏黎世联邦理工学院的 ADRL 团队发起,该项目在苏黎世联邦理工学院的 RSL 继续发展。RSL 团队现在积极支持 OCS2 的开发。

0.4 引用 OCS2

       要在学术研究中引用工具箱,请使用以下方式:

@misc{OCS2、
   title = {{OCS2}:  开关系统优化控制开源库}、
   note = {[在线]。Available: \url{https://github.com/leggedrobotics/ocs2}}、
   author = {Farbod Farshidian and others}}.
}
 

0.5 视频教程

  • OCS2 工具箱教程,Farbod Farshidian,MPC 研讨会,RSS 2021(链接)。
  • 腿部运动和操纵的实时优化控制,Marco Hutter,MPC 研讨会,RSS 2021(链接)。

0.6 相关出版物

   本工具箱已在以下出版物中使用:


Farbod Farshidian, Michael Neunert, Alexander W Winkler, Gonzalo Rey, and Jonas Buchli. An efficient optimal planning and control framework for quadrupedal locomotion. In 2017 IEEE International Conference on Robotics and Automation (ICRA), 93–100. IEEE, 2017.


Farbod Farshidian, Maryam Kamgarpour, Diego Pardo, and Jonas Buchli. Sequential linear quadratic optimal control for nonlinear switched systems. IFAC, 50(1):1463–1469, 2017.


Farbod Farshidian, Edo Jelavic, Asutosh Satapathy, Markus Giftthaler, and Jonas Buchli. Real-time motion planning of legged robots: a model predictive control approach. In 2017 IEEE-RAS 17th International Conference on Humanoid Robotics (Humanoids), 577–584. IEEE, 2017.


Markus Giftthaler, Farbod Farshidian, Timothy Sandy, Lukas Stadelmann, and Jonas Buchli. Efficient kinematic planning for mobile manipulators with non-holonomic constraints using optimal control. In 2017 IEEE International Conference on Robotics and Automation (ICRA), 3411–3417. IEEE, 2017.


Farbod Farshidian, David Hoeller, and Marco Hutter. Deep value model predictive control. In Conference on Robot Learning (CoRL), 990–1004. PMLR, 2020.


Ruben Grandia, Farbod Farshidian, Alexey Dosovitskiy, René Ranftl, and Marco Hutter. Frequency-aware model predictive control. IEEE Robotics and Automation Letters, 4(2):1517–1524, 2019.


Maria Vittoria Minniti, Farbod Farshidian, Ruben Grandia, and Marco Hutter. Whole-body mpc for a dynamically stable mobile manipulator. IEEE Robotics and Automation Letters, 4(4):3687–3694, 2019.


Jan Carius, Farbod Farshidian, and Marco Hutter. Mpc-net: a first principles guided policy search. IEEE Robotics and Automation Letters, 5(2):2897–2904, 2020.


Ruben Grandia, Farbod Farshidian, René Ranftl, and Marco Hutter. Feedback mpc for torque-controlled legged robots. In 2019 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), 4730–4737. IEEE, 2019.


Abel Gawel, Hermann Blum, Johannes Pankert, Koen Krämer, Luca Bartolomei, Selen Ercan, Farbod Farshidian, Margarita Chli, Fabio Gramazio, Roland Siegwart, and others. A fully-integrated sensing and control system for high-accuracy mobile robotic building construction. In 2019 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), 2300–2307. IEEE, 2019.


Jean-Pierre Sleiman, Farbod Farshidian, Maria Vittoria Minniti, and Marco Hutter. A unified mpc framework for whole-body dynamic locomotion and manipulation. IEEE Robotics and Automation Letters, 6(3):4688–4695, 2021.


Ruben Grandia, Andrew J Taylor, Aaron D Ames, and Marco Hutter. Multi-layered safety for legged robots via control barrier functions and model predictive control. arXiv preprint arXiv:2011.00032, 2020.


Magnus Gaertner, Marko Bjelonic, Farbod Farshidian, and Marco Hutter. Collision-free mpc for legged robots in static and dynamic scenes. In 2021 IEEE International Conference on Robotics and Automation (ICRA). IEEE, 2021.


Jean-Pierre Sleiman, Farbod Farshidian, and Marco Hutter. Constraint handling in continuous-time ddp-based model predictive control. In 2021 IEEE International Conference on Robotics and Automation (ICRA). IEEE, 2021.


Alexander Reske, Jan Carius, Yuntao Ma, Farbod Farshidian, and Marco Hutter. Imitation learning from mpc for quadrupedal multi-gait control. In 2021 IEEE International Conference on Robotics and Automation (ICRA). IEEE, 2021.


Maria Vittoria Minniti, Ruben Grandia, Kevin Fäh, Farbod Farshidian, and Marco Hutter. Model predictive robot-environment interaction control for mobile manipulation tasks. In 2021 IEEE International Conference on Robotics and Automation (ICRA). IEEE, 2021.


Mayank Mittal, David Hoeller, Farbod Farshidian, Marco Hutter, and Animesh Garg. Articulated object interaction in unknown scenes with whole-body mobile manipulation. arXiv preprint arXiv:2103.10534, 2021.

一、安装

1.1 前提条件

       OCS2 库以 C++11 编写,在 Ubuntu 20.04 下测试,库版本与软件包源码中提供的版本一致。

1.1.1 源代码

       源代码托管在 GitHub:leggedrobotics/ocs2。

# Clone OCS2
git clone git@github.com:leggedrobotics/ocs2.git

1.1.2 依赖

  • C++ compiler with C++11 support
  • Eigen (v3.3)
  • Boost C++ (v1.71)
  • GLPK
sudo apt install libglpk-dev
 
sudo apt install libmpfr-dev

catkin

sudo apt-get install catkin

pybind11_catkin, ROS package, installable via

sudo apt install ros-noetic-pybind11-catkin

catkin-pkg package for python3. Install with

sudo apt install python3-catkin-tools

Doxygen for documentation. Install with

sudo apt install doxygen doxygen-latex
pip install sphinxcontrib-bibtex
pip install sphinx-rtd-theme
pip install breathe

1.1.3 可选依赖项

  • 将 Pinocchio 和 HPP-FCL 克隆到工作区,以获得刚性多体动力学库和自碰撞支持
# Clone pinocchio
git clone --recurse-submodules https://github.com/leggedrobotics/pinocchio.git
# Clone hpp-fcl
git clone --recurse-submodules https://github.com/leggedrobotics/hpp-fcl.git
# install dependencies
sudo apt install liburdfdom-dev liboctomap-dev libassimp-dev
  • 对于 OCS2 单元测试和机器人示例中使用的各种机器人资产
# Clone ocs2_robotic_assets
git clone https://github.com/leggedrobotics/ocs2_robotic_assets.git


  • rqt_multiplot 软件包可用于可视化求解器的性能指标和其他优化输出结果
sudo apt-get install ros-noetic-rqt-multiplot
  • RaiSim 模拟器可用作滚动的提供者。相应的 ocs2_raisim 软件包有额外要求:

       RaiSim 软件包需要通过克隆到工作区从源代码中安装:

git clone --depth 1 https://github.com/raisimTech/raisimLib.git -b v1.1.01


       请按照 RaiSim 网页上的说明进行安装。或者,为了让 catkin 容易找到安装程序并在将来方便卸载,可以考虑使用 CheckInstall 将 RaiSim 安装为 debian 软件包。为此,请替换原来的命令:

cmake .. -DCMAKE_INSTALL_PREFIX=$LOCAL_INSTALL <other options>
make install -j4

    与:

cmake .. <other options>     (Without INSTALL_PREFIX)
make -j4 && sudo checkinstall

       这将把 RaiSim 安装到 /usr/local/lib 的默认位置,catkin 也会自动检测到该位置。当 checkinstall 提出要求时,请将软件包名称更改为合适的名称(如 "raisim"),以便日后进行软件包管理时查找,例如卸载(dpkg -r <package_name>)。


       要实现可视化,请使用 RaiSim Unity,在 raisimLib/raisimUnity 目录中提供了预置的可执行文件。例如,它可用于调试目的,查看 OCS2 和 RaiSim 之间的转换是否正确。


网格地图 catkin 软件包,可使用 sudo apt install ros-noetic-grid-map-msgs 安装。

ONNX Runtime 是一种推理和训练加速器。在这里,它用于在 C++ 代码中部署学习到的 MPC-Net 策略。要在本地安装它,请执行以下操作:

cd /tmp
wget https://github.com/microsoft/onnxruntime/releases/download/v1.7.0/onnxruntime-linux-x64-1.7.0.tgz
tar xf onnxruntime-linux-x64-1.7.0.tgz
mkdir -p ~/.local/bin ~/.local/include/onnxruntime ~/.local/lib ~/.local/share/cmake/onnxruntime
rsync -a /tmp/onnxruntime-linux-x64-1.7.0/include/ ~/.local/include/onnxruntime
rsync -a /tmp/onnxruntime-linux-x64-1.7.0/lib/ ~/.local/lib
rsync -a ~/git/ocs2/ocs2_mpcnet/ocs2_mpcnet_core/misc/onnxruntime/cmake/ ~/.local/share/cmake/onnxruntime

       我们提供了自定义的 cmake 配置和版本文件,以便在不修改 LIBRARY_PATH 和 LD_LIBRARY_PATH 的情况下启用 find_package(onnxruntime)。请注意,上述最后一条命令假定您已将 OCS2 克隆到用户主目录下的 git 文件夹中。  


  • 训练 MPC-Net 策略时建议使用虚拟环境:
sudo apt-get install python3-venv

      创建一个环境,并赋予其访问系统站点软件包的权限:

mkdir venvs && cd venvs
python3 -m venv mpcnet

激活环境并安装需求:

source ~/venvs/mpcnet/bin/activate
python3 -m pip install -r ~/git/ocs2/ocs2_mpcnet/ocs2_mpcnet_core/requirements.txt

  较新的显卡可能需要 CUDA 功能,而标准 PyTorch 安装目前还不支持该功能。在这种情况下,检查 PyTorch Start Locally 是否有兼容的版本,例如,运行

pip3 install torch==1.10.2+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
  • 可能出现的问题:
Could not find a package configuration file provided by
"convex_plane_decomposition" with any of the following names:
 
convex_plane_decompositionConfig.cmake
convex_plane_decomposition-config.cmake
Add the installation prefix of "convex_plane_decomposition" to
CMAKE_PREFIX_PATH or set "convex_plane_decomposition_DIR" to a directory
containing one of the above files. If "convex_plane_decomposition"
provides a separate development package or SDK, be sure it has been
installed."
CMake Error at /opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
Could not find a package configuration file provided by
"grid_map_filters_rsl" with any of the following names:
grid_map_filters_rslConfig.cmake
grid_map_filters_rsl-config.cmake
Add the installation prefix of "grid_map_filters_rsl" to CMAKE_PREFIX_PATH
or set "grid_map_filters_rsl_DIR" to a directory containing one of the
above files. If "grid_map_filters_rsl" provides a separate development
package or SDK, be sure it has been installed.


解决方案:

  • elevation mapping cupy
git clone https://github.com/leggedrobotics/elevation_mapping_cupy.git
  • grid map
git clone https://github.com/ANYbotics/grid_map.git

1.2 安装

1.2.1 创建程序库

       创建一个新的 catkin 工作区:

# Create the directories
# Do not forget to change <...> parts
mkdir -p <directory_to_ws>/<catkin_ws_name>/src
cd <directory_to_ws>/<catkin_ws_name>/
 
# Initialize the catkin workspace
catkin init
catkin config --extend /opt/ros/noetic
catkin config -DCMAKE_BUILD_TYPE=RelWithDebInfo

   克隆 OCS2 库:

# Navigate to the directory of src
# Do not forget to change <...> parts
cd <directory_to_ws>/<catkin_ws_name>/src
git clone git@github.com:leggedrobotics/ocs2.git

  构建并运行单元测试

# Build it
# catkin build ocs2
catkin build -DCMAKE_BUILD_TYPE=Release
 
# Source it
source <directory_to_ws>/<catkin_ws_name>/devel/setup.bash
 
# run tests
catkin run_tests ocs2
catkin build -DCMAKE_BUILD_TYPE=Release
--------------------------------------------------------------------------------
Profile:                     default
Extending:        [explicit] /opt/ros/noetic
Workspace:                   /home/kuanli/ocs2_ws
--------------------------------------------------------------------------------
Build Space:        [exists] /home/kuanli/ocs2_ws/build
Devel Space:        [exists] /home/kuanli/ocs2_ws/devel
Install Space:      [unused] /home/kuanli/ocs2_ws/install
Log Space:          [exists] /home/kuanli/ocs2_ws/logs
Source Space:       [exists] /home/kuanli/ocs2_ws/src
DESTDIR:            [unused] None
--------------------------------------------------------------------------------
Devel Space Layout:          linked
Install Space Layout:        None
--------------------------------------------------------------------------------
Additional CMake Args:       -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_BUILD_TYPE=Release
Additional Make Args:        None
Additional catkin Make Args: None
Internal Make Job Server:    True
Cache Job Environments:      False
--------------------------------------------------------------------------------
Buildlisted Packages:        None
Skiplisted Packages:         None
--------------------------------------------------------------------------------
Workspace configuration appears valid.
--------------------------------------------------------------------------------
[build] Found 82 packages in 0.0 seconds.                                      
[build] Package table is up to date.                                           
Starting  >>> blasfeo_catkin                                                   
Starting  >>> cgal5_catkin                                                     
Starting  >>> elevation_map_msgs                                               
Starting  >>> grid_map_core                                                    
Starting  >>> grid_map_msgs                                                    
Starting  >>> hpp-fcl                                                          
Starting  >>> ocs2_msgs                                                        
Starting  >>> ocs2_robotic_assets                                              
Finished  <<< blasfeo_catkin                                      [ 0.2 seconds ]
Starting  >>> ocs2_thirdparty                                                  
Finished  <<< cgal5_catkin                                        [ 1.3 seconds ]
Starting  >>> semantic_sensor                                                  
Finished  <<< grid_map_core                                       [ 0.2 seconds ]
Starting  >>> grid_map_costmap_2d                                              
Finished  <<< ocs2_robotic_assets                                 [ 0.2 seconds ]
Starting  >>> grid_map_cv                                                      
Finished  <<< ocs2_thirdparty                                     [ 0.2 seconds ]
Starting  >>> grid_map_octomap                                                 
Finished  <<< elevation_map_msgs                                  [ 0.6 seconds ]
Starting  >>> grid_map_sdf                                                     
Finished  <<< ocs2_msgs                                           [ 1.1 seconds ]
Starting  >>> ocs2_switched_model_msgs                                         
Finished  <<< grid_map_msgs                                       [ 0.9 seconds ]
Starting  >>> convex_plane_decomposition_msgs                                  
_______________________________________________________________________________
Warnings   << hpp-fcl:install /home/kuanli/ocs2_ws/logs/hpp-fcl/build.install.003.log
Error: /undefined in getenv
Operand stack:
   (outfile)
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1990   1   4   %oparray_pop   1989   1   4   %oparray_pop   1977   1   4   %oparray_pop   1833   1   4   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:0/20(G)--   --dict:76/200(L)--   --dict:5/30(L)--   --dict:11/30(L)--
Current allocation mode is local
Current file position is 8386
GPL Ghostscript 9.50: Unrecoverable error, exit code 1
Error: /undefined in getenv
Operand stack:
   (outfile)
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1990   1   4   %oparray_pop   1989   1   4   %oparray_pop   1977   1   4   %oparray_pop   1833   1   4   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:0/20(G)--   --dict:76/200(L)--   --dict:5/30(L)--   --dict:11/30(L)--
Current allocation mode is local
Current file position is 8386
GPL Ghostscript 9.50: Unrecoverable error, exit code 1
Error: /undefined in getenv
Operand stack:
   (outfile)
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1990   1   4   %oparray_pop   1989   1   4   %oparray_pop   1977   1   4   %oparray_pop   1833   1   4   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:0/20(G)--   --dict:76/200(L)--   --dict:5/30(L)--   --dict:11/30(L)--
Current allocation mode is local
Current file position is 8386
GPL Ghostscript 9.50: Unrecoverable error, exit code 1
Error: /undefined in getenv
Operand stack:
   (outfile)
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1990   1   4   %oparray_pop   1989   1   4   %oparray_pop   1977   1   4   %oparray_pop   1833   1   4   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:0/20(G)--   --dict:76/200(L)--   --dict:5/30(L)--   --dict:11/30(L)--
Current allocation mode is local
Current file position is 8386
GPL Ghostscript 9.50: Unrecoverable error, exit code 1
Error: /undefined in getenv
Operand stack:
   (outfile)
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1990   1   4   %oparray_pop   1989   1   4   %oparray_pop   1977   1   4   %oparray_pop   1833   1   4   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:0/20(G)--   --dict:76/200(L)--   --dict:5/30(L)--   --dict:11/30(L)--
Current allocation mode is local
Current file position is 8386
GPL Ghostscript 9.50: Unrecoverable error, exit code 1
Error: /undefined in getenv
Operand stack:
   (outfile)
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1990   1   4   %oparray_pop   1989   1   4   %oparray_pop   1977   1   4   %oparray_pop   1833   1   4   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:0/20(G)--   --dict:76/200(L)--   --dict:5/30(L)--   --dict:11/30(L)--
Current allocation mode is local
Current file position is 8386
GPL Ghostscript 9.50: Unrecoverable error, exit code 1
Error: /undefined in getenv
Operand stack:
   (outfile)
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1990   1   4   %oparray_pop   1989   1   4   %oparray_pop   1977   1   4   %oparray_pop   1833   1   4   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:0/20(G)--   --dict:76/200(L)--   --dict:5/30(L)--   --dict:11/30(L)--
Current allocation mode is local
Current file position is 8386
GPL Ghostscript 9.50: Unrecoverable error, exit code 1
Error: /undefined in getenv
Operand stack:
   (outfile)
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1990   1   4   %oparray_pop   1989   1   4   %oparray_pop   1977   1   4   %oparray_pop   1833   1   4   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:0/20(G)--   --dict:76/200(L)--   --dict:5/30(L)--   --dict:11/30(L)--
Current allocation mode is local
Current file position is 8386
GPL Ghostscript 9.50: Unrecoverable error, exit code 1
Error: /undefined in getenv
Operand stack:
   (outfile)
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1990   1   4   %oparray_pop   1989   1   4   %oparray_pop   1977   1   4   %oparray_pop   1833   1   4   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:0/20(G)--   --dict:76/200(L)--   --dict:5/30(L)--   --dict:11/30(L)--
Current allocation mode is local
Current file position is 8386
GPL Ghostscript 9.50: Unrecoverable error, exit code 1
Error: /undefined in getenv
Operand stack:
   (outfile)
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1990   1   4   %oparray_pop   1989   1   4   %oparray_pop   1977   1   4   %oparray_pop   1833   1   4   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:0/20(G)--   --dict:76/200(L)--   --dict:5/30(L)--   --dict:11/30(L)--
Current allocation mode is local
Current file position is 8386
GPL Ghostscript 9.50: Unrecoverable error, exit code 1
Error: /undefined in getenv
Operand stack:
   (outfile)
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1990   1   4   %oparray_pop   1989   1   4   %oparray_pop   1977   1   4   %oparray_pop   1833   1   4   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:0/20(G)--   --dict:76/200(L)--   --dict:5/30(L)--   --dict:11/30(L)--
Current allocation mode is local
Current file position is 8386
GPL Ghostscript 9.50: Unrecoverable error, exit code 1
Error: /undefined in getenv
Operand stack:
   (outfile)
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1990   1   4   %oparray_pop   1989   1   4   %oparray_pop   1977   1   4   %oparray_pop   1833   1   4   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:0/20(G)--   --dict:76/200(L)--   --dict:5/30(L)--   --dict:11/30(L)--
Current allocation mode is local
Current file position is 8386
GPL Ghostscript 9.50: Unrecoverable error, exit code 1
Error: /undefined in getenv
Operand stack:
   (outfile)
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1990   1   4   %oparray_pop   1989   1   4   %oparray_pop   1977   1   4   %oparray_pop   1833   1   4   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:0/20(G)--   --dict:76/200(L)--   --dict:5/30(L)--   --dict:11/30(L)--
Current allocation mode is local
Current file position is 8386
GPL Ghostscript 9.50: Unrecoverable error, exit code 1
cd /home/kuanli/ocs2_ws/build/hpp-fcl; catkin build --get-env hpp-fcl | catkin env -si  /usr/bin/make install; cd -
 
...............................................................................
Finished  <<< hpp-fcl                                             [ 4.2 seconds ]
Starting  >>> ocs2_core                                                        
Finished  <<< semantic_sensor                                     [ 0.1 seconds ]
Starting  >>> pinocchio                                                        
Finished  <<< grid_map_costmap_2d                                 [ 0.1 seconds ]
Finished  <<< grid_map_octomap                                    [ 0.2 seconds ]
Finished  <<< grid_map_sdf                                        [ 0.2 seconds ]
Finished  <<< grid_map_cv                                         [ 0.4 seconds ]
Starting  >>> grid_map_filters_rsl                                             
Starting  >>> grid_map_ros                                                     
Finished  <<< ocs2_switched_model_msgs                            [ 0.5 seconds ]
Finished  <<< convex_plane_decomposition_msgs                     [ 0.5 seconds ]
Finished  <<< grid_map_filters_rsl                                [ 0.2 seconds ]
Starting  >>> convex_plane_decomposition                                       
Finished  <<< ocs2_core                                           [ 0.5 seconds ]
Starting  >>> ocs2_frank_wolfe                                                 
Starting  >>> ocs2_oc                                                          
Finished  <<< grid_map_ros                                        [ 0.5 seconds ]
Starting  >>> elevation_mapping_cupy                                           
Starting  >>> grid_map_filters                                                 
Starting  >>> grid_map_loader                                                  
Starting  >>> grid_map_pcl                                                     
Finished  <<< pinocchio                                           [ 2.9 seconds ]
Starting  >>> grid_map_rviz_plugin                                             
Finished  <<< ocs2_oc                                             [ 0.2 seconds ]
Finished  <<< ocs2_frank_wolfe                                    [ 0.2 seconds ]
Starting  >>> grid_map_visualization                                           
Starting  >>> ocs2_mpc                                                         
Finished  <<< elevation_mapping_cupy                              [ 0.3 seconds ]
Finished  <<< convex_plane_decomposition                          [ 0.6 seconds ]
Finished  <<< grid_map_loader                                     [ 0.2 seconds ]
Finished  <<< grid_map_rviz_plugin                                [ 0.4 seconds ]
Starting  >>> ocs2_qp_solver                                                   
Finished  <<< grid_map_visualization                              [ 0.3 seconds ]
Finished  <<< ocs2_mpc                                            [ 0.3 seconds ]
Starting  >>> ocs2_raisim_core                                                 
Finished  <<< ocs2_qp_solver                                      [ 0.3 seconds ]
Finished  <<< grid_map_filters                                    [ 1.0 seconds ]
Starting  >>> grid_map_demos                                                   
Starting  >>> hpipm_catkin                                                     
Starting  >>> ocs2_ddp                                                         
Starting  >>> ocs2_robotic_tools                                               
Starting  >>> ocs2_ros_interfaces                                              
Finished  <<< ocs2_raisim_core                                    [ 0.2 seconds ]
Starting  >>> ocs2_raisim_ros                                                  
Finished  <<< grid_map_pcl                                        [ 1.2 seconds ]
Starting  >>> ocs2_slp                                                         
Finished  <<< ocs2_ddp                                            [ 0.2 seconds ]
Starting  >>> ocs2_ocs2                                                        
Finished  <<< ocs2_robotic_tools                                  [ 0.2 seconds ]
Starting  >>> ocs2_cartpole                                                    
Starting  >>> ocs2_perceptive                                                  
Finished  <<< hpipm_catkin                                        [ 0.2 seconds ]
Finished  <<< ocs2_raisim_ros                                     [ 0.2 seconds ]
Finished  <<< grid_map_demos                                      [ 0.6 seconds ]
Finished  <<< ocs2_slp                                            [ 0.3 seconds ]
Starting  >>> grid_map                                                         
Finished  <<< ocs2_ocs2                                           [ 0.2 seconds ]
Starting  >>> convex_plane_decomposition_ros                                   
Starting  >>> ocs2_ipm                                                         
Starting  >>> ocs2_python_interface                                            
Starting  >>> ocs2_sqp                                                         
Finished  <<< ocs2_ros_interfaces                                 [ 0.7 seconds ]
Starting  >>> ocs2_switched_model_interface                                    
Finished  <<< ocs2_cartpole                                       [ 0.3 seconds ]
Starting  >>> ocs2_cartpole_ros                                                
Finished  <<< grid_map                                            [ 0.1 seconds ]
Starting  >>> ocs2_pinocchio_interface                                         
Finished  <<< ocs2_perceptive                                     [ 0.3 seconds ]
Finished  <<< ocs2_sqp                                            [ 0.2 seconds ]
Finished  <<< ocs2_ipm                                            [ 0.3 seconds ]
Finished  <<< ocs2_python_interface                               [ 0.2 seconds ]
Finished  <<< convex_plane_decomposition_ros                      [ 1.0 seconds ]
Starting  >>> ocs2_double_integrator                                           
Finished  <<< ocs2_pinocchio_interface                            [ 0.4 seconds ]
Starting  >>> ocs2_quadrotor                                                   
Starting  >>> ocs2_mpcnet_core                                                 
Starting  >>> ocs2_ballbot                                                     
Starting  >>> ocs2_centroidal_model                                            
Finished  <<< ocs2_cartpole_ros                                   [ 0.7 seconds ]
Starting  >>> ocs2_self_collision                                              
Starting  >>> ocs2_sphere_approximation                                        
Finished  <<< ocs2_double_integrator                              [ 0.3 seconds ]
Starting  >>> ocs2_double_integrator_ros                                       
Finished  <<< ocs2_switched_model_interface                       [ 1.0 seconds ]
Starting  >>> ocs2_anymal_commands                                             
Finished  <<< ocs2_centroidal_model                               [ 0.2 seconds ]
Starting  >>> ocs2_anymal_models                                               
Finished  <<< ocs2_ballbot                                        [ 0.3 seconds ]
Starting  >>> ocs2_ballbot_ros                                                 
Finished  <<< ocs2_quadrotor                                      [ 0.2 seconds ]
Finished  <<< ocs2_self_collision                                 [ 0.2 seconds ]
Finished  <<< ocs2_sphere_approximation                           [ 0.3 seconds ]
Finished  <<< ocs2_mpcnet_core                                    [ 0.7 seconds ]
Finished  <<< ocs2_double_integrator_ros                          [ 0.8 seconds ]
Starting  >>> ocs2_quadrotor_ros                                               
Finished  <<< ocs2_anymal_commands                                [ 1.0 seconds ]
Starting  >>> ocs2_legged_robot                                                
Finished  <<< ocs2_anymal_models                                  [ 1.0 seconds ]
Starting  >>> ocs2_mobile_manipulator                                          
Finished  <<< ocs2_ballbot_ros                                    [ 1.1 seconds ]
Starting  >>> ocs2_ballbot_mpcnet                                              
Starting  >>> ocs2_self_collision_visualization                                
Starting  >>> segmented_planes_terrain_model                                   
Finished  <<< ocs2_quadrotor_ros                                  [ 0.7 seconds ]
Finished  <<< ocs2_legged_robot                                   [ 0.4 seconds ]
Starting  >>> ocs2_legged_robot_ros                                            
Finished  <<< ocs2_mobile_manipulator                             [ 0.3 seconds ]
Finished  <<< ocs2_ballbot_mpcnet                                 [ 0.9 seconds ]
Finished  <<< ocs2_self_collision_visualization                   [ 0.9 seconds ]
Starting  >>> ocs2_pinocchio                                                   
Starting  >>> ocs2_mobile_manipulator_ros                                      
Finished  <<< segmented_planes_terrain_model                      [ 1.2 seconds ]
Finished  <<< ocs2_legged_robot_ros                               [ 0.9 seconds ]
Starting  >>> ocs2_legged_robot_raisim                                         
Starting  >>> ocs2_quadruped_interface                                         
Finished  <<< ocs2_pinocchio                                      [ 0.2 seconds ]
Finished  <<< ocs2_mobile_manipulator_ros                         [ 0.5 seconds ]
Finished  <<< ocs2_legged_robot_raisim                            [ 0.7 seconds ]
Starting  >>> ocs2_raisim                                                      
Starting  >>> ocs2_legged_robot_mpcnet                                         
Finished  <<< ocs2_quadruped_interface                            [ 0.9 seconds ]
Starting  >>> ocs2_anymal_mpc                                                  
Starting  >>> ocs2_quadruped_loopshaping_interface                             
Finished  <<< ocs2_raisim                                         [ 0.1 seconds ]
Finished  <<< ocs2_legged_robot_mpcnet                            [ 0.6 seconds ]
Starting  >>> ocs2_mpcnet                                                      
Finished  <<< ocs2_mpcnet                                         [ 0.2 seconds ]
Finished  <<< ocs2_quadruped_loopshaping_interface                [ 1.0 seconds ]
Finished  <<< ocs2_anymal_mpc                                     [ 1.0 seconds ]
Starting  >>> ocs2_anymal_loopshaping_mpc                                      
Finished  <<< ocs2_anymal_loopshaping_mpc                         [ 0.3 seconds ]
Starting  >>> ocs2_anymal                                                      
Finished  <<< ocs2_anymal                                         [ 0.1 seconds ]
Starting  >>> ocs2_robotic_examples                                            
Finished  <<< ocs2_robotic_examples                               [ 0.1 seconds ]
Starting  >>> ocs2                                                             
Starting  >>> ocs2_doc                                                         
Finished  <<< ocs2                                                [ 0.1 seconds ]
Finished  <<< ocs2_doc                                            [ 1.5 seconds ]
[build] Summary: All 82 packages succeeded!                                    
[build]   Ignored:   None.                                                     
[build]   Warnings:  1 packages succeeded with warnings.                       
[build]   Abandoned: None.                                                     
[build]   Failed:    None.                                                     
[build] Runtime: 20.5 seconds total.  
source devel/setup.bash
catkin run_tests ocs2
==> Expanding alias 'run_tests' from 'catkin run_tests ocs2' to 'catkin test ocs2'
Starting  >>> ocs2                                                             
Output     << ocs2:results /home/kuanli/ocs2_ws/logs/ocs2/test.results.000.log 
Summary: 0 tests, 0 errors, 0 failures, 0 skipped
cd /home/kuanli/ocs2_ws/build/ocs2; catkin test --get-env ocs2 | catkin env -si  catkin_test_results; cd -
 
Finished  <<< ocs2          [ 0.2 seconds ]                                    
[test] Summary: All 1 packages succeeded!                                      
[test]   Ignored:   None.                                                      
[test]   Warnings:  None.                                                      
[test]   Abandoned: None.                                                      
[test]   Failed:    None.                                                      
[test] Runtime: 0.4 seconds total.  

1.2.2 构建本文档

       假设已安装 python catkin 工具,请运行以下命令:

# Navigate to the directory of ocs2_doc
# Do not forget to change <...> parts
cd <directory_to_ws>/<catkin_ws_name>/src/ocs2/ocs2_doc
 
# make build directory
mkdir -p build
# Navigate to the build folder
cd build
 
# build docs
cmake ..
make

    这将生成文档并将其放在 build/output/sphinx 文件夹中。在浏览器中打开 index.html。

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
29天前
|
算法 数据可视化 安全
OCS2 入门教程(二)
OCS2 入门教程(二)
49 0
|
30天前
|
开发工具 vr&ar 图形学
XR Interaction Toolkit教程⭐一、简介、安装和基本配置
XR Interaction Toolkit教程⭐一、简介、安装和基本配置
|
Web App开发 存储 测试技术
|
存储 关系型数据库 网络安全
|
数据安全/隐私保护 Linux