【已解决】Linux-conda环境下安装PyKDL库: No module named ‘PyKDL‘

目录

  • 1 问题背景
  • 2 问题探索与解决
  • 3 告别Bug

1 问题背景

环境:

  • Ubuntu20.04
  • ROS noetic
  • Anaconda

现象:rospy导入tf2_geometry_msgs时报错ModuleNotFoundError: No module named 'PyKDL'

【已解决】Linux-conda环境下安装PyKDL库: No module named ‘PyKDL‘_第1张图片

2 问题探索与解决

这个报错原因很容易理解,就是当前虚拟环境中不存在PyKDLPyKDL在装ROS的时候是默认安装的,可以看系统路径/usr/local/lib/python3/dist-packages中默认的PyKDL.so文件。

但是当我们使用虚拟环境时,python版本可能和ROS中的python版本不统一——这导致不能直接复制这个PyKDL.so到虚拟环境中。另外,PyKDL不提供pipconda安装方式,只能源码安装,这导致环境配置很麻烦。

首先,下载源码

git clone https://github.com/orocos/orocos_kinematics_dynamics.git
cd ./orocos_kinematics_dynamics/python_orocos_kdl
git clone https://github.com/pybind/pybind11.git

接着编译C++库,因为PyKDL底层是C++实现,所以必须先安装C++版的KDL库。cd./orocos_kinematics_dynamics/orocos_kdl执行

mkdir build
cd build
cmake ../
make
sudo make install

接着编译Python接口,这里需要修改一下CMakeLists.txt,将

find_package(Python ${PYTHON_VERSION} COMPONENTS Interpreter Development REQUIRED)

注释掉,防止CMake自动调用不正确的Python版本。然后执行

mkdir build
cd build
cmake ../ -DPYTHON_EXECUTABLE=/home/winter/Project/anaconda3/envs/multi-nav/bin/python3.6m
make
sudo make install

必须注意DPYTHON_EXECUTABLE是项目所在虚拟环境的python路径,编译后将/orocos_kinematics_dynamics/python_orocos_kdl/build/devel/lib/python3/dist-packages/PyKDL.so复制到虚拟环境的包地址即可,以我的环境举例,是复制到.../anaconda3/envs/multi-nav/lib/python3.6/site-packages路径上

最后验证一下

# conda activate multi-nav
import PyKDL

不报错就是安装好了

3 告别Bug

本文收录于《告别Bug》专栏,该专栏记录人工智能领域中各类Bug以备复查,文章形式为:问题背景 + 问题探索 + 问题解决,订阅专栏+关注博主后可通过下方名片联系我进入AI技术交流群帮忙解决问题


更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系

你可能感兴趣的:(告别Bug,linux,conda,python,机器人,ROS)