当前位置: 首页 > article >正文

Ubuntu20.04安装kalibr

文章目录

  • 环境配置
  • 安装wxPython
  • 下载编译
  • 测试
  • 报错1
    • 问题描述
    • 问题分析
    • 问题解决
  • 参考


环境配置

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

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

pip3 install wxPython-4.2.1-cp38-cp38-linux_x86_64.whl

下载编译

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分钟吧,可以喝杯茶。

测试

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 脚本时,执行命令时遇到以下错误:

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):

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
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 的动态库:

ls /usr/lib | grep boost_python

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

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 文件:

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

#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;
}

编译命令

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

加载并测试模块:

python3.8 -c "import example; print(example.greet())"

预期输出:

Hello, Python!

参考

Ubuntu20.04安装kalibr



http://www.kler.cn/a/413328.html

相关文章:

  • 七牛云AIGC内容安全方案助力企业合规创新
  • 学习threejs,设置envMap环境贴图创建反光效果
  • Oracle JDK(通常简称为 JDK)和 OpenJDK区别
  • 数据结构之二:表
  • 观察者模式 (Observer Pattern)
  • spring boot2.7集成OpenFeign 3.1.7
  • Linux: C语言解析域名
  • 探索光耦:光耦安全标准解读——确保设备隔离与安全的重要规范
  • linux安全管理-系统环境安全
  • Leetcode437. 路径总和 III(HOT100)
  • BERT的中文问答系统38
  • 猎户星空发布MoE大模型,推出AI数据宝AirDS
  • unity中的Horizontal和Vertical介绍
  • 深入解析经典排序算法:原理、实现与优化
  • 富格林:有效追损正确提高出金
  • 部署 DeepSpeed以推理 defog/sqlcoder-70b-alpha 模型
  • Qt Qt::UniqueConnection 底层调用
  • 多目标优化算法——多目标粒子群优化算法(MOPSO)
  • uni-app 蓝牙开发
  • C++设计模式行为模式———策略模式
  • python控制鼠标,键盘,adb
  • 使用SQL按每小时统计数据的方法
  • C#设计模式——抽象工厂模式(重点)
  • Python使用ffmpeg进行本地视频拉流,并使用训练模型识别人脸,并将识别后的模型推流源码
  • frida_hook_libart(简单解释)
  • 介绍SSD硬盘