Ubuntu20.04安装kalibr

文章目录


环境配置

Ubuntu20.04,python3.8.10,boost自带的1.71

bash 复制代码
sudo apt update
sudo apt-get install python3-setuptools python3-rosinstall ipython3 libeigen3-dev libboost-all-dev doxygen libopencv-dev ros-noetic-vision-opencv ros-noetic-image-transport-plugins ros-noetic-cmake-modules python3-software-properties software-properties-common libpoco-dev python3-matplotlib python3-scipy python3-git python3-pip libtbb-dev libblas-dev liblapack-dev libv4l-dev python3-catkin-tools python3-igraph libsuitesparse-dev 

安装wxPython

先下载 wxPython-4.2.1-cp38-cp38-linux_x86_64.whl

bash 复制代码
pip3 install wxPython-4.2.1-cp38-cp38-linux_x86_64.whl

下载编译

bash 复制代码
mkdir ~/kalibr_ws/src
cd ~/kalibr_ws/src
git clone --recursive https://github.com/ori-drs/kalibr

cd ~/kalibr_ws
source /opt/ros/noetic/setup.bash
catkin init
catkin config --extend /opt/ros/noetic
catkin config --merge-devel 					# Necessary for catkin_tools >= 0.4.
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release

catkin build -DCMAKE_BUILD_TYPE=Release -j16    # 比较耗时,5-6分钟吧,可以喝杯茶。

测试

bash 复制代码
damon@damon-virtual-machine:/opt/kalibr_ws$ source devel/setup.bash
damon@damon-virtual-machine:/opt/kalibr_ws$ devel/lib/kalibr/kalibr_calibrate_cameras --help
importing libraries
Calibrate the intrinsics and extrinsics of a camera system with non-shared overlapping field of view.

usage: 
    Example usage to calibrate a camera system with two cameras using an aprilgrid. 
    
    cam0: omnidirection model with radial-tangential distortion
    cam1: pinhole model with equidistant distortion
    
    kalibr_calibrate_cameras --models omni-radtan pinhole-equi --target aprilgrid.yaml \
              --bag MYROSBAG.bag --topics /cam0/image_raw /cam1/image_raw
    。。。。。。

报错1

问题描述

在使用 Kalibr 的 kalibr_calibrate_cameras 脚本时,执行命令时遇到以下错误:

bash 复制代码
damon@damon-virtual-machine:~/kalibr_ws$ devel/lib/kalibr/kalibr_calibrate_cameras --help
importing libraries
Traceback (most recent call last):
  File "devel/lib/kalibr/kalibr_calibrate_cameras", line 15, in <module>
    exec(compile(fh.read(), python_script, 'exec'), context)
  File "/home/damon/kalibr_ws/src/kalibr/aslam_offline_calibration/kalibr/python/kalibr_calibrate_cameras", line 6, in <module>
    import sm
  File "/home/damon/kalibr_ws/devel/lib/python3/dist-packages/sm/__init__.py", line 34, in <module>
    exec(__fh.read())
  File "<string>", line 4, in <module>
ImportError: /home/damon/kalibr_ws/devel/lib/python3/dist-packages/sm/libsm_python.so: undefined symbol: _ZN5boost6python15instance_holder8allocateEP7_objectmmm
damon@damon-virtual-machine:~/kalibr_ws$ 

问题分析

这个错误表明,libsm_python.so 文件中依赖的符号 _ZN5boost6python15instance_holder8allocateEP7_objectmmm 无法解析。该符号属于 Boost.Python 库,通常用于处理 Python 和 C++ 之间的交互。

问题解决

1.验证 Boost 版本

检查 /usr/include/boost/version.hpp,确保显示的版本是系统默认版本(1.71):

bash 复制代码
damon@damon-virtual-machine:~/kalibr_ws$ cat /usr/include/boost/version.hpp | grep BOOST_LIB_VERSION
//  BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
#define BOOST_LIB_VERSION "1_71"
damon@damon-virtual-machine:~/kalibr_ws$ 
  1. 检查是否安装 boost-python
bash 复制代码
damon@damon-virtual-machine:~/kalibr_ws$ dpkg -l | grep libboost-python
ii  libboost-python-dev                         1.71.0.0ubuntu2                       amd64        Boost.Python Library development files (default version)
ii  libboost-python1.71-dev                     1.71.0-6ubuntu6                       amd64        Boost.Python Library development files
ii  libboost-python1.71.0                       1.71.0-6ubuntu6                       amd64        Boost.Python Library
damon@damon-virtual-machine:~/kalibr_ws$ 

从输出可以看出,系统中已经正确安装了 boost-python 和与 Boost 1.71 匹配的相关开发包:

  • libboost-python-dev:默认的开发文件(与系统的 Boost 版本保持一致)。
  • libboost-python1.71-dev:Boost 1.71 版本的开发文件。
  • libboost-python1.71.0:Boost 1.71 版本的运行时库。

这些包都已经安装完毕,说明 boost-python 的安装环境是正常的。

  1. 检查 boost-python 的库文件是否存在

运行以下命令查看 boost-python 的动态库:

bash 复制代码
ls /usr/lib | grep boost_python

输出中应包含类似以下内容:

bash 复制代码
libboost_python1.71.so
libboost_python-py38.so

但运行ls /usr/lib | grep boost_python,没有输出

从输出可以看出,boost-python 的动态库文件似乎未正确安装或未找到。尽管 dpkg 显示相关开发包已经安装,但动态库文件 (libboost_python*.so) 并未出现在 /usr/lib 目录中。

  1. 确认动态库文件的实际位置

有时动态库可能安装到了其他路径(例如 /usr/lib/x86_64-linux-gnu)。运行以下命令搜索 libboost_python 文件:

bash 复制代码
damon@damon-virtual-machine:~/kalibr_ws$ sudo find /usr -name "libboost_python*.so"
[sudo] damon 的密码: 
/usr/lib/x86_64-linux-gnu/libboost_python1.71.so
/usr/lib/x86_64-linux-gnu/libboost_python38.so
damon@damon-virtual-machine:~/kalibr_ws$ 

从输出可以看出,boost-python 的动态库文件已正确安装并位于路径 /usr/lib/x86_64-linux-gnu/ 中。具体包括以下文件:

  • /usr/lib/x86_64-linux-gnu/libboost_python1.71.so:Boost Python 1.71 的主动态库。
  • /usr/lib/x86_64-linux-gnu/libboost_python38.so:适配 Python 3.8 的 Boost Python 动态库。

这些文件是正确的,说明 boost-python 已安装成功。

。。。。比较多,不整理了

  1. 创建测试代码文件

在当前目录创建 my_program.cpp

bash 复制代码
#include <boost/python.hpp>
#include <iostream>

// 定义普通函数
std::string greet() {
    return "Hello, Python!";
}

// 模块初始化
BOOST_PYTHON_MODULE(example) {
    using namespace boost::python;
    def("greet", greet); // 绑定函数
}

int main() {
    std::cout << "Boost Python test program compiled successfully!" << std::endl;
    return 0;
}

编译命令

bash 复制代码
g++ -shared -fPIC -I/usr/include/python3.8 -o example.so my_program.cpp /usr/lib/x86_64-linux-gnu/libboost_python1.71.so

加载并测试模块:

bash 复制代码
python3.8 -c "import example; print(example.greet())"

预期输出:

bash 复制代码
Hello, Python!

参考

Ubuntu20.04安装kalibr


相关推荐
胖大和尚6 小时前
C++ 多线程编程的实现方式
c++·thread
在水一缸7 小时前
深入浅出 Catch2:现代 C++ 测试框架的优雅实践
开发语言·c++·单元测试·log4j·测试框架·catch2
2401_841495647 小时前
【数据结构】B*树
数据结构·c++·b树·算法·删除·插入·三分分裂
斐夷所非7 小时前
在纷繁竞逐中稳步前行:C++ 2006–2020
c++
保持清醒5408 小时前
类和对象上
c++
乱七八糟的屋子8 小时前
Poco C++高级实战教程:线程池+日志系统+加密算法+WebSocket长连接
c++·websocket·加密解密·#poco·#c++高级开发
hold?fish:palm9 小时前
7 接雨水
开发语言·c++·leetcode
流浪00110 小时前
数据结构篇(五):线性表——栈
数据结构·c++·算法
郝学胜-神的一滴10 小时前
中级OpenGL教程 022:探秘三维世界的血脉传承——物体父子关系与矩阵递归奥义
c++·线性代数·unity·矩阵·游戏引擎·unreal engine·opengl
ch0sen1pm10 小时前
刚学完 CAS 原子操作,我花了一晚上写了三个无锁队列
c++