1.编译源码所在工作空间时报错:
‘cvIplImage’ was not declared in this scope
错误本身含义:编译器在当前作用域内找不到名为cvIplImage的类型声明。
去网上搜索,说是当前opencv版本没有cvIplImage()这个函数。
我的opencv版本是(查看版本方法如图):
大家普遍两种解决方法:
①在出错的.cpp文件中增加头文件(该法对我无用):
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/imgproc/types_c.h>
#include <opencv2/highgui/highgui_c.h>
②卸载原来的opencv版本,重新下载新的(版本更低的)opencv。
但到底要低到多少呢,我没有找到明确的说法。
而且网上安装opencv指定版本的方法一堆,基本都有很多步骤,十分麻烦,过程中也容易出错。
我想直接pip3 install opencv-python==(版本号)
,但下载过程总是卡很久。
这种感觉似曾相识,于是我翻之前的博客,在3.部署yolov5和搭建Astra Pro深度相机环境(成功版)树莓派4B+Ubuntu18.04+ROS1-Melodic中遇到过一模一样的情况。
我简要再写一下(需要参考这篇):
<1>去https://pypi.org/找到符合自己python版本的opencv版本号
<2>安装对应版本
我安装的是3.4.18.65
而且它会直接帮你卸载之前的版本。
搞完opencv的安装后,再次尝试编译,‘cvIplImage’ was not declared in this scope的错误依旧存在。
于是又踏上搜寻之路,经历了漫长的寻找之后,终于找到了我的正解:
是这篇,原理是一样的,只不过他的情况和我相反。
大概意思就是:
opencv3.8之前版用:IplImage z_ipl = z;
≥3.8用:IplImage z_ipl = cvIplImage(z);
(这正是我的报错语句)
下图是我修改后的样子:
然后再次编译就成功啦。
2.运行launch文件时出错
报错内容有:
RLException: while processing /home/pi/orbbec_ws/src/orbbec-ros-sdk/launch/orbbec_camera.launch: Invalid tag: environment variable ‘CAMERA_TYPE’ is not set.
Arg xml is <arg doc="astraproplus,gemini2" name="camera_type" value="$(env CAMERA_TYPE)"/>
(这段不放代码块好像显示不出来)
意思就是说:CAMERA_TYPE这个环境变量没有被设置。
于是去查看出错文件:
该launch文件会根据环境变量CAMERA_TYPE的值来选择astra.launch或gemini2.launch,以启动相应类型的相机。
我的相机是前者,于是我就去添加了该环境变量:
①sudo vim ~/.bashrc
②在最后一行添加export CAMERA_TYPE=astraproplus
(i插入,esc退出编辑模式,:wq保存并退出)
③刷新:source ~/.bashrc
然后再次运行roslaunch astra_tracker KCFTracker.launch
就可以成功出画面了:X,Y表示框内中心点在整个画面中的位置,Z表示距离,单位m。