pinocchio是基于Featherstone's的算法,为多关节系统实例化了最先进的刚体算法。 此外,匹诺曹还提供了主要刚体算法的解析导数,如递归牛顿-欧拉算法或铰接体算法。可以方便很多做机器人研究的同学求解机器人的动力学问题,比如常见的机器人拉格朗日动力学建模中对M,C,G矩阵的求解。并且官方有入门代码可供参考,入门上手相对简单。同时,pinocchio只需要导入urdf文件,就可以快速创建机器人模型。
pinocchio主要是在Linux系统中使用。本文帮助解决在Linux系统下安装可能遇到的问题。
官网安装链接:
Pinocchio (stack-of-tasks.github.io)https://stack-of-tasks.github.io/pinocchio/download.html 1.
sudo apt install -qqy lsb-release gnupg2 curl
2.
echo "deb [arch=amd64] http://robotpkg.openrobots.org/packages/debian/pub $(lsb_release -cs) robotpkg" | sudo tee /etc/apt/sources.list.d/robotpkg.list
3.
curl http://robotpkg.openrobots.org/packages/debian/robotpkg.key | sudo apt-key add -
sudo apt update
4.
sudo apt install -qqy robotpkg-py3*-pinocchio
5.添加环境变量,在home目录下,按Ctrl+H,显示隐藏文件.bashrc文件,将下面的代码复制进去
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 # Adapt your desired python version here
export CMAKE_PREFIX_PATH=/opt/openrobots:$CMAKE_PREFIX_PATH
6.在终端中运行: ~source/.bashrc ,刷新环境变量。安装成功
当pinocchio安装成功后,在自己的项目文件夹下引用时,依然会找不到库的路径。需要在CmakLists中包含include和lib文件路径。pinocchio是基于eigen库的,因此,需要安装eigen库才能成功运行。eigen库的安装这里暂不概述。
在Pinocchio和eigen库安装成功后,你可能会遇到这样的错误:
07-Pinocchiotest1.cpp:(.text.startup+0x7f):对‘pinocchio::urdf::details::parseRootTree(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pinocchio::urdf::details::UrdfVisitorBaseTpl<double, 0>&)’未定义的引用 collect2: error: ld returned 1 exit status ninja: build stopped: subcommand failed.
原因:
pinocchio的默认安装路径是,即使安装后,系统也不一定准确识别到
/opt/openrobots
解决办法:
建议使用:
sudo cp -r /opt/openrobots/include/pinocchio /usr/local/include
sudo cp -r /opt/openrobots/include/hpp /usr/local/include
sudo cp -r /opt/openrobots/lib/pkgconfig /usr/local/lib
sudo cp -r /opt/openrobots/lib/libhpp-fcl.so /usr/local/lib
sudo cp -r /opt/openrobots/lib/libpinocchio.so /usr/local/lib
....
及把 /opt/openrobots/include和lib文件夹下所有的文件拷贝到/usr/local/include和/usr/local/lib中
然后在CmakeLists中包含:
find_package(pinocchio REQUIRED)
include_directories(${Pinocchio_INCLUDE_DIRS})
link_directories(${Pinocchio_LIBRARY_DIRS})
或者直接在CmakeLists中添加绝对路径,例如:
link_libraries(/usr/local/lib/libhpp-fcl.so)
link_libraries(/usr/local/lib/libpinocchio.so)
这里只给了两个包含的例子(懒得码字),实际中需要包含全所有pinocchio包,其他的包需要根据你的项目工程来决定是否有必要包含。
include_directories(/usr/local/include)
说明同上。
如果你上述步骤都做完了。在运行官方导入urdf的例子出现类似报错:urdf does not contain a valid URDF model.时,是由于没有及时修改官方例子中宏定义的路径:
把路径改为自己的路径即可。