基于webots联合pinocchio 的机械臂力矩控制仿真

目录

一. pinocchio的优势

二. pinocchio 从源码编译安装(build from source)

三. webots联合pinocchio

四. 效果展示

五. 实验流程(挖坑)

5.1 读取urdf到webots中

5.2 控制理论推导

5.3 控制器代码


一. pinocchio的优势

在机器人的model based control中有两个重要的动力学解算库:KDL和pinocchio,二者都可以通过解析urdf构建一个开链机器人。作者之前一段时间使用的gluon机械臂厂商提供了基于ros的sdk,所以很自然的接触学习了kdl。然而现在有在ros之外对机械臂进行仿真控制的需求。这就引发出一个问题:KDL难以在ros之外读取urdf

KDL读取urdf的库名为kdl_parser,和KDL是相互独立的。kdl_parser是一个ros社区维护的包,阅读源码可以发现kdl_parser使用了库urdf_parser,而后者使用了ros的一些功能,因此难以在ros之外编译。事实上,KDL官方论坛里有人在2012年提出过这个需求,并且还给出了两条解决建议:1.在KDL内部直接实现urdf的解析而非kdl_parser。2. 在KDL中实现tree的保存功能,用ros解析urdf成tree后直接保存以便于在ros之外使用。然而十几年过去了,这个需求仍然没有被满足。因此果断选择使用pinocchio。

基于webots联合pinocchio 的机械臂力矩控制仿真_第1张图片 Link:
URDF to KDL without ROS? | The Orocos Project

二. pinocchio 从源码编译安装(build from source)

系统: ubuntu20, python3

直接按照官方网站的步骤来:Pinocchio基于webots联合pinocchio 的机械臂力矩控制仿真_第2张图片https://stack-of-tasks.github.io/pinocchio/download.html

1.下载源码

git clone --recursive https://github.com/stack-of-tasks/pinocchio

2.新建build文件夹

cd pinocchio && mkdir build && cd build

3.编译安装

cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
make -j4
make install

4.添加环境变量到./bashrc

export PATH=/usr/local/bin:$PATH
export PKG_CONFIG_PATH =/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH
export CMAKE_PREFIX_PATH=/usr/local:$CMAKE_PREFIX_PATH

注意环境变量PYTHONPATH要和你的匹配,你要自己修改,作者的环境变量如下

export PATH=/usr/local/bin:$PATH
#export PKG_CONFIG_PATH =/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export PYTHONPATH=/usr/local/lib/python3/dist-packages:$PYTHONPATH
export CMAKE_PREFIX_PATH=/usr/local:$CMAKE_PREFIX_PATH

三. webots联合pinocchio

在你的webots项目中新建一个控制器,然后在控制器文件夹的makefile中写入

### ---- Linked libraries ----
### if your program needs additional libraries:
INCLUDE = -I"/usr/local/include/pinocchio"
LIBRARIES = -L"/usr/local/lib" -lpinocchio

如何在webots中使用c++第三方库,详细见官方文档(Adding an External Library (C/C++))

Cyberbotics: using-webotCyberbotics - Robotics simulation with Webotshttps://cyberbotics.com/doc/guide/using-webots-makefiles到这里你可以测试编译一下你的pinocchio,这里就不贴示范代码了,网上容易搜索。

大概率在编译时,你会遇到如此错误:“unsupported/Eigen/CXX11/Tensor: No such file or directory”

作者的解决方法如下,参考:“unsupported/Eigen/CXX11/Tensor: No such file or directory”_shellmoon的博客-CSDN博客

sudo cp -r /usr/include/eigen3/Eigen /usr/include
sudo cp -r /usr/include/eigen3/signature_of_eigen3_matrix_library /usr/include
sudo cp -r /usr/include/eigen3/unsupported /usr/include

四. 效果展示

作者使用了滑模控制器,将下列博客中的matlab代码翻译成了c++并实现了仿真。

基于Simulink、Simscape、S-Function联合的机械臂仿真_赢学家的博客-CSDN博客多数论文中机械臂仿真一般只针对理想的二连杆模型。对于一个真实的机械臂的仿真流程中文互联网上教程还比较少。我尝试做一个。欢迎批评指正讨论。工业中一种常用的机械臂仿真流程可以概括为下图首先由solidworks建立机器人的外观,各连杆坐标系以及物理参数。然后使用插件sw_urdf_exporter自动导出urdf文件。在ros工作空间下功能包gluon的urdf文件夹中有作者生成的urdf文件(作者用之于rviz仿真),我们可以直接使用。https://blog.csdn.net/qq_42243147/article/details/129655066?spm=1001.2014.3001.5501

基于webots联合pinocchio 的机械臂力矩控制仿真_第3张图片 可见控制效果良好

代码计算了惯性矩阵,重力矩阵,科式矩阵并将其运用在滑模控制之中。具体如何实现将在下一节中展示。

五. 实验流程(挖坑)

作者的实验流程,最近较忙,慢慢填坑。

5.1 读取urdf到webots中

包括mesh的设置,minStop和maxStop的设置。basicTimeStep的设置(对model based control而言采样频率要尽可能高,  设置为1)。

5.2 控制理论推导

控制器和这篇文章相同。就是将这篇文章的matlab代码翻译为c++

基于Simulink、Simscape、S-Function联合的机械臂仿真_赢学家的博客-CSDN博客多数论文中机械臂仿真一般只针对理想的二连杆模型。对于一个真实的机械臂的仿真流程中文互联网上教程还比较少。我尝试做一个。欢迎批评指正讨论。工业中一种常用的机械臂仿真流程可以概括为下图首先由solidworks建立机器人的外观,各连杆坐标系以及物理参数。然后使用插件sw_urdf_exporter自动导出urdf文件。在ros工作空间下功能包gluon的urdf文件夹中有作者生成的urdf文件(作者用之于rviz仿真),我们可以直接使用。https://blog.csdn.net/qq_42243147/article/details/129655066?spm=1001.2014.3001.5501

5.3 控制器代码

挖坑,一到两个月后贴出来。

你可能感兴趣的:(机器人)