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/kalibrcd ~/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=Releasecatkin 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 distortioncam1: pinhole model with equidistant distortionkalibr_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 smFile "/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$
- 检查是否安装
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 的安装环境是正常的。
- 检查 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 目录中。
- 确认动态库文件的实际位置
有时动态库可能安装到了其他路径(例如 /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 已安装成功。
。。。。比较多,不整理了
- 创建测试代码文件
在当前目录创建 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
相关文章:
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…...
Flink 任务启动脚本-V2(包括ck启动)
#!/bin/bash#crontab时设置,如果依赖其他环境变量配置,可以在脚本执行一下环境变量脚本 source /etc/profile# 进入脚本目录 curdirdirname "$0" curdircd "$curdir"; pwd echo "进入启动脚本目录 $curdir"# 定义应用程序…...
扫雷-完整源码(C语言实现)
云边有个稻草人-CSDN博客 在学完C语言函数之后,我们就有能力去实现简易版扫雷游戏了(成就感满满),下面是扫雷游戏的源码,快试一试效果如何吧! 在test.c里面进行扫雷游戏的测试,game.h和game.c…...
python -从文件夹批量提取pdf文章的第n页,并存储起来
python -从文件夹批量提取pdf文章的第n页,并存储起来 废话不多说,看下面代码 讲解一下下面代码 reader PyPDF2.PdfReader (file) 将文件转化为PdfReader 对象,方便使用内置方法。 first_page reader.pages[0] 提取第一页 writer PyPDF…...
R Excel 文件操作指南
R Excel 文件操作指南 概述 R 语言是一种强大的统计分析工具,广泛用于数据分析和可视化。在实际应用中,经常需要将 R 语言与 Excel 文件结合使用,以便处理和分析数据。本指南将介绍如何在 R 中读取、写入和操作 Excel 文件。 准备工作 在…...
RabbitMQ 安装延迟队列插件 rabbitmq_delayed_message_exchange
前言: RabbitMQ 延迟队列插件(rabbitmq_delayed_message_exchange)是一个社区开发的插件,它为 RabbitMQ 添加了支持延迟消息的功能。通过这个插件,用户可以创建一种特殊的交换机类型 x-delayed-message,该…...
fatal error in include chain (rtthread.h):rtconfig.h file not found
项目搜索这个文件 rtconfig 找到后将其复制粘贴到 你的目录\Keil\ARM\ARMCC\include 应该还有cJSON,rtthread.h和 等也复制粘贴下...
Java 反射(Reflection)
Java 反射(Reflection) Java 反射(Reflection)是一个强大的特性,它允许程序在运行时查询、访问和修改类、接口、字段和方法的信息。反射提供了一种动态地操作类的能力,这在很多框架和库中被广泛使用&#…...
Python爬取机车网车型数据并存入Mysql数据库
结果展示(文末附完整代码): 一、引言 在当今数字化时代,数据对于各个领域的重要性不言而喻。对于机车行业而言,获取丰富的机车品牌、车型及详细信息数据,能够为市场分析、消费者研究等提供有力支持。本文将…...
fpga 时序分析基础
目录 触发器的动态参数 同步时序电路分析 1. 时钟脉冲的特性 2. 同步时序电路分析 Timing Analyzer的应用 异步时序与亚稳态问题 时序分析就是对时序电路进行时序检查,通过分析电路中所有寄存器之间的路径延迟以检查电路的传输延迟是否会导致触发器的建立时间…...
python学习——二维列表的列表生成式
二维列表的列表生成式允许你生成一个列表,其中每个元素本身也是一个列表。这在处理矩阵或表格数据时非常有用。 以下是如何使用列表生成式来创建二维列表的示例: 文章目录 基本语法示例1. 创建一个 3x3 的单位矩阵2. 创建一个 4x4 的乘法表3. 创建一个 …...
【错误❌】——槽函数定义好但未初始化
public slots:void onClose(); 初始化即可成功:...
OpenCV相机标定与3D重建(6)将3D物体点投影到2D图像平面上函数projectPoints()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::fisheye::projectPoints 是 OpenCV 库中用于鱼眼镜头模型的函数,它将3D物体点投影到2D图像平面上。这个函数对于模拟或者理解鱼眼…...
【Linux】剧幕中的灵魂更迭:探索Shell下的程序替换
🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出,万山无阻 目录 📖一、进程程序替换 1.替换的演示 ❓替换与执行流 ❓程序替换≠进程替换 2.替换的原理 …...
38 基于单片机的宠物喂食(ESP8266、红外、电机)
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,采用L298N驱动连接P2.3和P2.4口进行电机驱动, 然后串口连接P3.0和P3.1模拟ESP8266, 红外传感器连接ADC0832数模转换器连接单片机的P1.0~P1.…...
Unity中的数学应用 之 角色移动中单位化向量的妙用 (小学难度)
最近准备从简单到困难跟几个教程用以加强自己的业务能力,相信很多小伙伴都做过胡闹厨房这一个案例,其实这个案例比较初级,但是也包含了很多平常可能注意不到小细节,所以我就以它为举例,拓展其中的数学知识 CodeMonkey教…...
设置ip和代理DNS的WindowsBat脚本怎么写?
今天分享一个我们在工作时,常见的在Windows中通过批处理脚本(.bat 文件)来设置IP地址、代理以及DNS 相关配置的示例,大家可以根据实际需求进行修改调整。 一、设置静态IP地址脚本示例 以下脚本用于设置本地连接(你可…...
字符串分割转换(Java Python JS C++ C )
题目描述 给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。 对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母; 反之,如果它…...
【Maven】项目创建
3. Maven的应用 本章主要内容: 使用 Maven 创建 JavaSE 项目使用 Maven 创建 JavaWeb 项目,在本地部署 Tomcat 测试导入 Maven 项目 3.1 基于Maven开发JavaSE的项目 3.1.1 流程 1、File—>new—>Project—>Empty Project Location࿱…...
number的++和--运算 C#
number10 请计算num number --number - number number就是先对number运算,然后再给number赋值--number 先给number赋值,再拿来运算 using System;class Program {static void Main(string[] args){int number 10;int a, b, c, number1, number2;…...
浅谈网络 | 应用层之HTTPS协议
目录 对称加密非对称加密数字证书HTTPS 的工作模式重放与篡改 使用 HTTP 协议浏览新闻虽然问题不大,但在更敏感的场景中,例如支付或其他涉及隐私的数据传输,就会面临巨大的安全风险。如果仍然使用普通的 HTTP 协议,数据在网络传输…...
2、Three.js初步认识场景Scene、相机Camera、渲染器Renderer三要素
三要素之间关系: 有了虚拟场景Scene,相机录像Camera,在相机小屏幕上看到的Renderer Scene当前空间 Mesh人在场景 Camera相机录像 Renderer显示器上 首先先描述下Scene: 这个场景为三要素之一,一切需要展示的东西都需…...
Deepwave 声波正演和弹性波正演
Deepwave Deepwave 调用 scalar 方法实现声波和弹性波正演。 ######## 声波正演 ###################### import torch import numpy as np import deepwave from deepwave import scalardevice torch.device(cuda if torch.cuda.is_available()else cpu)## Set observation…...
【WRF-Urban】多层建筑能源参数化模型概述:原理
【WRF-Urban】多层建筑能源参数化模型概述:原理 1 概述1.1 原理1.2 使用步骤 2参考 多层建筑能源参数化(Multi-layer Building Energy Parameterization, BEP)模型是一种用于模拟城市环境中多层建筑群的能量交换和微气候影响的参数化模型。该…...
基于Qt实现的自定义树结构容器:设计与应用
在Qt框架中,尽管其提供了许多强大的容器类(如 QList, QMap, QTreeWidget 等),但缺少一个通用的、灵活的树结构容器,直接支持多层级数据管理。为了满足这些需求,本文设计并实现了一个可复用的自定义树结构容…...
网络命令Linux
目录 一,Linux 二,CMD 一,Linux ping www.baidu.com 测试联网 -c 2 次数,ping几次 , -i 间隔 -W timeout 超时时间,等待响应的超时时间 ss -lntup |grep -w 22 netstat -lntup |grep -w 22 lsof -i:22 ls…...
简单的Activiti Modoler 流程在线编辑器
简单的Activiti Modoler 流程在线编辑器 1.需求 我们公司使用的流程是activiti5.22.0,版本有些老了,然后使用的编辑器都是eclipse的流程编辑器插件,每次编辑流程需要打开eclipse进行编辑,然后再导入到项目里面,不是特…...
【NodeJS】Express写接口的整体流程
前提条件 开发 Node.js,首先就必须要安装 Node.js。推荐使用 nvm,它可以随意切换 node 版本。下载 nvm,具体可以看本人另一篇文章:nvm的作用、下载、使用、以及Mac使用时遇到commond not found:nvm如何解决。 nvm官方࿱…...
Oracle 锁表的解决方法及避免锁表问题的最佳实践
背景介绍 在 Oracle 数据库中,锁表或锁超时相信大家都不陌生,是一个常见的问题,尤其是在执行 DML(数据操作语言)语句时。当一个会话对表或行进行锁定但未提交事务时,其他会话可能会因为等待锁资源而出现超…...
关于 vue+element 日期时间选择器 限制只能选当天以及30天之前的日期
业务需求,需要实现选择当天以及30天之前的日期,于是我想到的是利用picker-options去限制可选范围 代码如下 <el-date-pickerv-model"searchData.acceptTime"type"datetimerange"value-format"yyyy-MM-dd hh:mm:ss"styl…...
wordpress卸载 数据库/seo整站优化服务教程
点击蓝字关注我们UDExpo-Display2月28日消息 2020 年 6 月 19 日,三星电子向 WIPO(世界知识产权局)申请了一项名为 “包括子显示屏及其操作方法的电子设备”的专利,描述了一种手机,其前置摄像头部分可通过切换屏幕分层进行隐藏。该专利已于 1…...
兰州网站建设网站建设/合肥关键词排名提升
linux 时间子系统 二 时间系统的组成 时间轮,jiffies与HZ 时间轮是linux kernel处理内核低精度定时器的机制,由周期的定时器中断驱动。定时器中断以配置的HZ参数为频率产生,在中断中更新系统时间jiffies,摘取到期的定时器执行&a…...
pc开奖网站开发/网址缩短在线生成器
来源是:Text at LEFT如何更改CSS以使两个DIV看起来像?----------------------|Text at LEFT | ####|| | ####|| | ####|| | || | |----------------------即。文本在左侧DIV左上角,图像在右侧DIV右上方对齐。更新:我使用的是&…...
郑州网站建设 推广/石家庄网站建设
函数声明和函数表达式 1.函数声明的格式不再赘述; 2.函数表达式的定义:是其他表达式的一部分的函数(作为赋值表达式的右值,或者作为其他函数的参数)叫作函数表达式。函数表达式非常重要,在于它能准确地在我…...
烟台做网站系统/关键词三年级
在使用vxe-table 下拉选时遇到一个问题选中后值不显示(针对这个问题做一下记录)图:选择前选择后值不显示代码如下<解决方法:给下拉选加change事件 在事件触发时使单元格清除激活状态,然后立刻将该单元格设置为激活状态.<js代码selectChange效果:选择前选择后值显示了...
水果电商网站建设相关文献/搜索引擎优化服务公司哪家好
React是个啥 React 是一个用于构建用户界面的 JAVASCRIPT 库。 React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图)。 React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源。 …...