ROS下配置OpenCV+一些错误解决(段错误,核心已转储)

这篇具有很好参考价值的文章主要介绍了ROS下配置OpenCV+一些错误解决(段错误,核心已转储)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ROS下使用OpenCV详细步骤+一些错误解决(段错误,核心已转储!!)

1.OpenCV环境配置和路径设置

进入opencv文件夹,创建编译文件夹

mkdir build
cd build
cmake ..
cmake-gui   //先行下载gui版本cmake

ros1安装opencv依赖的时候报错,RM视觉导航学习,opencv,webpack,javascript,ubuntu

选择OpenCV源码所在路径编译文件所在路径,单击【Configure】按钮,默认选项即可,单击【Finish】后,在cmake界面会出现很多变量。

BUILD_opencv_world和OPENCV_ENABLE_NONFREE两个变量,在其后面的方框上打勾。

OPENCV_EXTRA_MODULES_PATH变量,选择路径为opencv_contrib中的module文件夹

再次Configue,Configuring done后generate

sudo make
sudo make install
sudo gedit /etc/ld.so.conf.d/opencv.conf

在空白文件输入以下路径

/usr/local/lib

打开终端,使路径生效

sudo ldconfig

配置bshrc

sudo gedit /etc/bash.bashrc

在打开的文件最末尾添加以下代码并保存,保存后退出

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH  

继续在终端执行以下命令使得配置生效

source /etc/bash.bashrc

2.OpenCV测试程序

mkdir -p ros_opencv/src
 cd ros_opencv/src
 catkin_init_workspace
 catkin_create_pkg opencv_test sensor_msgs cv_bridge roscpp std_msgs image_transport

修改opencv_test目录下的CMakeLists.txt
主要在find_package加上

find_package(OpenCV REQUIRED)        //单独写,不然可能会报错

以及加上

include_directories(include ${OpenCV_INCLUDE_DIRS})
include_directories(include ${catkin_INCLUDE_DIRS})

add_executable(opencv_test_node src/opencv_test_node.cpp)
target_link_libraries(opencv_test_node ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
add_dependencies(opencv_test_node opencv_test_gencpp)     //这个后面如果报错,是因为你的环境不是gencpp

然后你需要下载一张图片放在一个已知的位置,为读取图片做准备

touch opencv_test_node.cpp         //看上面的CMakeLists.txt的节点名字
#include <ros/ros.h>
#include <stdio.h>
#include <image_transport/image_transport.h>
#include <cv_bridge/cv_bridge.h>
#include <sensor_msgs/image_encodings.h>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

static const char WINDOW[] = "Image window";
static void help()
{
    printf("\nThis program demonstrates converting OpenCV Image to ROS Image messages  \n"
        );

}

int main(int argc, char** argv)
{
  help();
  ros::init(argc, argv, "image_converter");

  //Reading an image from the file
  cv::Mat cv_image = cv::imread("图片路径");
  if(cv_image.empty() )
    {
        ROS_ERROR("Read the picture failed!");
        return -1;
    }

  //Convert OpenCV image to ROS message
  ros::NodeHandle node;
  image_transport::ImageTransport transport(node);
  image_transport::Publisher image_pub; 
  image_pub=transport.advertise("OutImage", 1);
  ros::Time time=ros::Time::now(); 

  cv_bridge::CvImage cvi;
  cvi.header.stamp = time;
  cvi.header.frame_id = "image";
  cvi.encoding = "bgr8";
  cvi.image = cv_image;

  sensor_msgs::Image im;
  cvi.toImageMsg(im);
  image_pub.publish(im);
  ROS_INFO("Converted Successfully!");

  //Show the image
  cv::namedWindow(WINDOW);
  cv::imshow(WINDOW,cv_image);
  cv::waitKey(0);

  ros::spin();
  return 0;
}

3.编译

cd ros_opencv
catkin_make

可能遇到编译错误:

1.could not find opencv

解决方案:

确认是否正确安装opencv

再看第一部分使用cmakeGUI配置和路径设置是否成功

CMake Error at CMakeLists.txt:xx (find_package):
By not providing "xx.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "OpenCV", but
CMake did not find one.
Could not find a package configuration file provided by "OpenCV" with any
of the following names:
OpenCVConfig.cmake
opencv-config.cmake
Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set
"OpenCV_DIR" to a directory containing one of the above files. If "OpenCV"
provides a separate development package or SDK, be sure it has been
installed.

解决方案:

将opencv安装目录添加到CMAKE_PREFIX_PATH

例如,按照错误信息指示,在CMakeLists.txt中加入一行list,路径要改成自己的opencv安装路径

list(APPEND CMAKE_PREFIX_PATH "/home/xx/opencv版本号/")
find_package(OpenCV REQUIRED)

设置OpenCV_DIR为一个包含OpenCVConfig.cmake或者opencv-config.cmake的目录

CMakeLists.txt中加入一行set OpenCV_DIR,以opencv4为例,后面的路径要改成你的路径,注意不是安装根目录,是安装目录中包含OpenCVConfig.cmake的文件夹路径

set(OpenCV_DIR /opt/opencv版本号/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)

3.could not find gencpp

在CMakeLists.txt最后一行将 add_dependencies(opencv_test_node opencv_test_gencpp) 删掉

或者不冲突的话,将CMakeLists.txt的第一行改为

cmake_minimum_required(VERSION 2.8.3)

4.运行

roscore
source devel/setup.bash
rosrun opencv_test opencv_test_node

运行时遇到错误:

1.检查bashrc是否有source环境变量

sudo  gedit ~/.bashrc
//在文件末加上
source ~/工作空间/devel/setup.bash
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/工作空间/
//重启bashrc
source ~/.bashrc
//查看ros路径是否添加上
echo $ROS_PACKAGE_PATH

2.报错:段错误,核心已转储

原因大致上是;访问不存在的内存地址、访问系统保护的内存地址和访问只读的内存地址

在这里这是因为ros有自带了的opencv,与本地版本有冲突会出现以上错误,可能性太多了,所以讲解思路:

(1)设置core文件,找到段错误生成的core文件

(2)利用core文件,使用GDB测试找到问题所在

到运行这一步,你可以直接在相关路径下的终端启动gdb测试,可以看到对内存出现非法访问时将收到段错误信号SIGSEGV下面就是出错的位置,我们然后使用backtrace回溯定位问题(gdb/bt)

最后,你找到出调用库时出问题的路径,把版本改为你调用的opencv库的版本,问题解决

运行成功
ros1安装opencv依赖的时候报错,RM视觉导航学习,opencv,webpack,javascript,ubuntu

原文链接:https://blog.csdn.net/qq_28306361/article/details/851421923文章来源地址https://www.toymoban.com/news/detail-840980.html

到了这里,关于ROS下配置OpenCV+一些错误解决(段错误,核心已转储)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 非法指令 (核心已转储) 彻底解决方案

    之前在Nano上,经常运行程序的时候,遇到一个问题:非法指令 (核心已转储)。 在/usr/lib/python3/dist-packages/这个路径下,Nano自带了很多配置的包。在这里,numpy的版本是1.13.1(这个包现在已经直接pip安装不了了),但是后面我们自己pip安装的时候,(比如配置pytorch)安装了高版

    2024年02月15日
    浏览(39)
  • 树莓派安装Ubuntu18.04+ROS1详细教程(解决start4.elf: is not compatible报错)

    树莓派三代是32位系统的,四代是64位系统的,所以我们安装镜像时要看清楚是树莓派几代的,多少位系统的。 树莓派4B是64位系统 ,我所使用的是树莓派4B,这里安装Ubuntu18.04. 好像Ubuntu16.04太早就不维护更新了,就没有64位系统了。 提一句: 虚拟机下载的是后缀为.iso的镜像

    2024年02月04日
    浏览(82)
  • 优化ROS2 Python编译环境,解决版本不匹配和C++配置错误

    在编译ROS2的Python环境时遇到的版本不匹配问题,并提供了解决方案。同时,还讨论了可能出现的C++配置错误,并给出了优化细节以确保同时支持C++11和C++14。通过遵循本文中的步骤,读者将能够优化ROS2编译环境,解决版本不匹配和C++配置错误,从而顺利进行开发工作。

    2024年02月07日
    浏览(152)
  • 【已解决】terminate called after throwing an instance of ‘cv::Exception‘,已放弃 (核心已转储)

    这是运行高翔slambook2的代码出现的错误 terminate called after throwing an instance of ‘cv::Exception’ what(): OpenCV(3.4.15) /home/diyu/opencv-3.4.15/modules/imgproc/src/resize.cpp:4051: error: (-215:Assertion failed) !ssize.empty() in function ‘resize’ 已放弃 (核心已转储) 问题原因就在于代码中的文件路径找不到,所

    2024年02月09日
    浏览(59)
  • 【ROS知识】比较ROS1和ROS2在处理launch的不同

            在处理launch过程中,ROS1和ROS2还是有些差别的,因为文件结构不同,不能直接搬用。这里将两者建立过程做一个比对,以提升概念的清晰度。         在ROS2中,单独的launch文件是一个python文件,因此脱离ros2环境也能启动,问题是,如果launch文件添加到ros2的包内,如

    2024年02月09日
    浏览(45)
  • ROS2系列(03):ROS1和ROS2的区别【01/2】

    目录 1 提要 2 从架构上说  2.1 通信协议不同 2.2 架构不同 2.3 ROS2多了一个rcl

    2024年02月06日
    浏览(45)
  • 从ROS1到ROS2无人机编程实战指南

    亲爱的读者们,我今天非常荣幸地向大家推荐一本本人的全新力作——《从ROS1到ROS2无人机编程实战指南》。这本书站在初学者的角度,从入门到进阶,再到实战,循序渐进,是学习ROS1和ROS2的最佳选择。如今已在全国范围内上市,购书即可享受次日达的快捷服务! 本书的创

    2024年02月10日
    浏览(46)
  • Ubuntu20.04同时安装ROS1和ROS2

    每版的Ubuntu系统版本都有与之对应ROS版本的,每一版ROS都有其对应版本的Ubuntu版本,不可随便装,ubuntu20.04对应ROS1 noetic和ROS2 foxy版本。_ros1和ros2共存 文章目录 Ubuntu20.04同时安装ROS1和ROS2共存 一、换源 1.1 通过软件更新 1.2 通过修改源文件(建议) 二、安装ROS1(noetic) 三、安

    2024年02月09日
    浏览(66)
  • Ubuntu20.04同时安装ROS1和ROS2共存

    每版的Ubuntu系统版本都有与之对应ROS版本的,每一版ROS都有其对应版本的Ubuntu版本,不可随便装,ubuntu20.04对应ROS1 noetic和ROS2 foxy ROS2 Galactic版本。当然最方便的是使用鱼香ROS一键安装: 但我们接下来使用手动安装。 老规矩,先换源 打开软件更新 选择Download from-Other,找到C

    2024年02月08日
    浏览(45)
  • 机器人项目:从 ROS2 切换到 ROS1 的原因

             机器人操作系统ROS是使用最广泛的机器人中间件平台。它在机器人社区中使用了10多年,无论是在业余爱好者领域还是在工业领域。ROS可用于各种微控制器和计算机,从Arduino到Raspberry Pi再到Linux工作站,它为电机控制器,视觉传感器,深度摄像头和激光扫描仪提供

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包