RBDL库的构建与编译
0 前言
RBDL
(Rigid Body Dynamics Library
,刚体动力学库)是一个开源的动力学库,用于建模和模拟多体动力学系统,例如机器人,人体运动和其他机械系统。RBDL
提供了基于牛顿-欧拉方法的运动学和动力学分析,可以计算机器人或多体系统的位置,速度,加速度和力矩等动力学变量。RBDL
还提供了静态和动态力学分析工具,可以帮助研究人员评估系统的能量和力矩。RBDL
可以在C++
和MATLAB
中使用,并且易于扩展和自定义。
RBDL
的主要特点包括:
- 支持各种多体系统的动力学建模
- 基于牛顿-欧拉方法的动力学分析
- 高效的算法,可以处理大型多体系统
- 支持C++和MATLAB接口
- 易于扩展和自定义
- 开源并且免费
RBDL已经被广泛应用于机器人和运动控制领域的研究和开发中,例如人形机器人动力学分析,运动学和动力学优化等。
1.RBDL (Rigid Body Dynamics Library)库的起源可以追溯到2006年,由Steffen Kohlbrecher 和 Johannes Schwerdtfeger在德国TUM机器人学研究所(Institute of Robotics and Mechatronics)开发。该团队主要研究机器人动力学和控制,并且在多项国际机器人竞赛中获得了奖项。
2.RBDL库是一个轻量级的C++库,专门用于处理刚体动力学问题,包括正反向动力学计算,运动学计算以及各种约束处理,其主要设计目标是高效和易用性。该库在机器人学和仿真领域得到了广泛的应用,被许多研究者和工程师所采用,并在多个机器人竞赛中得到了应用。它的开发者和使用者遍布全球。
3.类似的库还包括Bullet Physics、Open Dynamics Engine(ODE)等,它们也是广泛使用的开源动力学引擎库,主要用于机器人学、虚拟现实、电影特效等领域。
1 RBDL源码的下载与构建
说明:RBDL库支持Windwos系统、Linux系统和Mac系统,本教程针对Linux系统(另外该项目的开发者也在Linux平台进行开发和测试,所以在其它平台开发出现的错误可能需要自己想办法解决)。
1.1 安装必要的工具和依赖库
- apt工具更新
sudo apt update
sudo apt upgrade
apt是Advanced Packaging Tool的缩写,是Debian和Ubuntu系统中的包管理工具,具有交互式命令行界面,可以用来安装、更新和卸载软件包,以及进行依赖关系解决等操作。
apt-get也是Debian和Ubuntu系统中的包管理工具,它没有交互式命令行界面,只能通过命令行来使用,与apt的功能类似,但是它的命令选项比较多,更为灵活。
update命令用于更新本地软件包列表,从远程源中下载最新的软件包列表,以便于apt和apt-get安装软件时能够使用最新版本的软件包信息。
upgrade命令用于更新已安装软件包的版本,从远程源中下载最新的软件包,替换当前已安装的旧版本软件包,更新系统中的软件到最新版本。
- 安装
git
工具
sudo apt install git-core
- 安装跨平台编译工具cmake
sudo apt install cmake
- 安装线性代数计算库
eigen3
sudo apt install libeigen3-dev
- 安装C++编译器,这里选择安装元包(meta-package)build-essential(这个包里面包含了gcc/g++、make、dpkg-dev)的形式来安装编译器。
sudo apt-get install build-essential
- 安装CMake编译系统的界面工具cmake-curses
sudo apt install cmake-curses-gui
- 安装C++开源测试框架,提高代码质量和开发效率
sudo git clone --branch v2.x https://github.com/catchorg/Catch2.git
cd Catch2
sudo cmake -S . -B build -DBUILD_TESTING=OFF
-S .:表示源目录为当前目录
-B build:表示构建目录为 build
- DBUILD_TESTING=OFF:定义一个名为’DUILD_TESTING’的CMake变量,并将其值设置为’OFF’。这个变量通常用于控制是否编译测试程序,这里将其设置成为’OFF’表示不编译测试程序。
sudo cmake --build build/ --target install
- sudo:表示以管理员权限执行操作
- cmake:执行’cmake’命令
- –build build/:指定生成的构建系统所在的目录为’build/',表示在该目录下执行构建操作
- –target install:指定构建目标为’install’,表示执行安装操作
1.2 源码下载与编译构建
- 退出当前目录
cd ..
- 下载源码
sudo git clone --recursive https://github.com/rbdl/rbdl.git
说明:这里加了参数 --recursive,表面使用递归的克隆方式,把这个仓库及其子模块全部克隆下来。
- 更新到最新的RBDL版本
RBLD源文件中存在一个更新脚本,可以很方便地帮助用户快速更新到最新的版本。
# 在rbdl的根目录下面执行以下指令
./update.sh
- 用CMake构建RBDL库
# 构建一个新目录
sudo mkdir rbdl-build
# 通过rbdl目录里面的'CMakeLists.txt'来生成构建系统
cd rbdl-build
sudo cmake -D CMAKE_BUILD_TYPE=Release ..
sudo make
- 如果安装过cmake-curses-gui工具,可以通过以下指令查看可使用的构建选项
# 在rbdl根目录的前一个目录下面创建一个新的文件夹rbdl-build
sudo mkdir rbdl-build
# 通过ccmake指令启动cmake-curses,查看可用的构建选项
cd rbdl-build/
sudo ccmake ..
通过这种方式就可以看到RBDL完整的构建列表,在源码的README中,作者是推荐大家在构建RBDL的时候把下面两种模式配置成ON,配置完成之后通过运行RBDL的测试代码。
RBDL_BUILD_TESTS ON
RUN_AUTOMATIC_TESTS ON
把光标移动到对应位置,按回车键可将OFF更改为ON
接下来按
C
键进行下一步设置。同样,在下面把RUN_AUTOMATIC_TESTS也更改为ON
按’C’键进行设置,然后按’G‘,确认选择。
- 安装RBDL用户文档
# 安装doxygen
sudo apt install doxygen
# 在rbdl根目录下执行指令
doxygen Doxyfile
# 然后在RBDL根目录下面的/doc/html/index.html
-
或者直接访问下面这个网址阅读文档
RBDL官方文档 -
安装Boost
安装Boost的目的是为了运行RBDL附带的示例仿真案例
sudo apt install libboost-all-dev
- 安装插件依赖项
☞luamodel addon
# 安装luamodel插件
'''
安装这个插件的目的是为了通过Lua来加载模型,不用这个插件的话就需要通过编码的方式去构建模型,或者通过URDF的方式加载模型。
'''
sudo apt install lua5.1
sudo apt install liblua5.1-0-dev
# 在cmake-curses-gui界面中开启啊Luamodel的配置,开启方法上面有
RBDL_BUILD_ADDON_LUAMODEL ON
☞ urdf addon
如果是希望将urdf编写的模型文件加载到RBDL中,那么就需要使用URDF_Parser库,而这个库是作为一个子模块包含在RBDL中的,因此需要使用递归的方式克隆整个RBDL代码库,以便能同时克隆URDF_Parser子模块。如果在克隆的时候忘记使用递归的方式,可以使用下面整个操作补救。
git submodule init
git submodule update
# 构建RBDL库
RBDL_BUILD_ADDON_URDFREADER ON
☞ muscle addon
在 RBDL 中,Muscles 插件允许用户添加肌肉力学到刚体动力学仿真中。这个插件是由 Millard 等人开发的。当该插件与 RBDL 一起构建时,用户可以使用肌肉模型来模拟生物体内的肌肉行为,这包括激活和弛缓等过程。它可以用于模拟运动,如步态分析,或用于设计和优化假肢或外骨骼装置等设备。
RBDL_BUILD_ADDON_GEOMETRY ON
RBDL_BUILD_ADDON_MUSCLE ON
- geometry addon是一个依赖项(library),cmake会自动包含它。这个addon可以用于生成视觉效果,比如3D渲染等。
- Millard等人发表的论文提出了一个用于模拟整体运动的减少肌肉模型和平面肌肉骨骼模型。这篇论文提供了一种肌肉模型,可以用于RBDL库进行仿真。
☞ muscle addon:muscle fitting option
如果您想使用Millard等人提出的肌肉拟合算法,则需要安装Ipopt。其中一种较为简单的方法是按照Ipopt在线文档中的说明进行操作。在Ipopt文件夹中的README文件中提供了构建代码的说明。这样做将允许您使用RBDL中的肌肉插件,并在仿真中模拟肌肉的行为。
RBDL_BUILD_ADDON_GEOMETRY ON
RBDL_BUILD_ADDON_LUAMODEL ON
RBDL_BUILD_ADDON_MUSCLE ON
RBDL_BUILD_ADDON_MUSCLE_FITTING ON
# 更新 .bashrc 文件中添加一行代码,以将 Ipopt 库的路径添加到环境变量 LD_LIBRARY_PATH 中。在 Linux 中,LD_LIBRARY_PATH 是动态链接库的搜索路径。如果需要运行需要动态链接库的可执行文件,系统会在 LD_LIBRARY_PATH 中搜索对应的库文件。因此,将 Ipopt 库的路径添加到 LD_LIBRARY_PATH 中可以让系统在运行需要这些库文件的程序时能够找到它们。
export IPOPT_HOME=/home/mjhmilla/dev/Ipopt-3.12.8
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$IPOPT_HOME/lib
详细内容可查看论文:Millard M, Emonds AL, Harant M, Mombaur K. A reduced muscle model and planar musculoskeletal model fit for the simulation of whole-body movements. Journal of biomechanics. 2019 Apr 10.
- 加入python支持
RBDL本来是一个C++的库,那为什么我们还需要去做python支持呢?
我认为一个很重要的原因就是python可以加快研发效率,在真实落地的时候再去进行C++支持以提高代码执行效率。
Python调用C++库的原理是通过Cython将C++代码封装为Python模块,并提供Python和C++之间的数据类型转换和交互。
☞ 安装依赖库
sudo apt install cython3 python3-numpy python3-scipy python3-matplotlib
☞ 开启RBDL_BUILD_PYTHON_WRAPPER
☞ 重新编译
sudo cmake ..
sudo make
sudo make install
cd ./python
sudo python3 setup.py install
☞ 另外需要将rbdl.so的路径添加进环境变量中去
vim ~/.bashrc
# 在文件底部添加
export PYTHONPATH=$PYTHONPATH:/home/panghong/Control/RBDL/rbdl-build/python
需要注意的是:在 Linux 系统中,.bashrc 文件是用户每次打开新的终端时,系统自动执行的一个 shell 脚本。这个文件通常用来设置环境变量、别名、函数等等与 shell 有关的配置,这些配置将会被应用到该用户在终端中运行的每个 shell 会话中。由于该文件是在每个 shell 会话开始时执行的,因此在 .bashrc 文件中定义的环境变量或别名等都只对当前 shell 会话有效。
注意环境变量的路径,要是rbdl构建目录下的pyhon目录的路径,大家自己的路径要自己修改,不要直接复制粘贴,别整错了。
- 测试
python3
import rbdl
如果不报错,说明这个python环境中已经安装好了相关的库.
- Windows系统上的安装
因为目前开发人员都不在Windows系统上做开发,所以出的任何技术问题只能自己想办法解决,或者向技术社区或者论坛寻求帮助。
2 总结
-
介绍了
RBDL
的基础概念,即RBDL
(Rigid Body Dynamics Library
,刚体动力学库)是一个开源的轻量级的C++
动力学库,用于建模和模拟多体动力学系统,对于做机器人或者机械系统运动学、动力学控制是一个非常好的工具。这个库是在2006
年的时候由Steffen Kohlbrecher
和Johannes Schwerdtfeger
在德国TUM
机器人学研究所(Institute of Robotics and Mechatronics
)开发。 -
这个动力学库支持
Windows
系统、Mac
系统和Linux
系统,但是由于主要开发者都是在Linux
上开发的,所以在其它平台上开发遇到的问题可能需要自己想办法解决。 -
项目在构建编译的时候将编译好的动态库和静态库放置在系统目录中,这样我们就可以在构建我们自己项目的时候无需在项目工程目录中添加动态库和静态库。
-
项目源码构建用的是开源跨平台构建工具
cmake
或者是带GUI
的cmake
构建工具cmake-curses-gui
,矩阵运算采用的线性代数计算库engen3
,安装的插件有通过lua
语言添加模型工具luamodel addon
,urdf
模型加载工具urdf addon
,肌肉力学仿真插件muscle addon
和具备肌肉拟合算法功能的muscle addon:musclie fitting option
等。
下一篇文章计划研究RBDL API文档的阅读,构建第一个C++项目 — 关于双摆模型的仿真计算。需要具备的基础条件是搭建好RBDL仿真环境,并且能够使用VS Code通过Remote SSH插件连接Ubuntu系统,以此构建编程开发环境。
以上就是本片文章的全部内容,作为个人学习整理的材料,水平有限,难免出现错误和偏差,欢迎大家批评指正,希望本文能对大家有帮助。