gpt4 book ai didi

c++ - ROS 中的 VISP - 无法显示相机提要

转载 作者:行者123 更新时间:2023-11-28 06:51:21 25 4
gpt4 key购买 nike

我正在尝试将已经用 ROS 编写的代码与一些基本的 Visp 行集成,以便使用 Visp 功能显示相机提要。我是 visp 的初学者,因此我正在尝试一些基本的东西。我在这里附上相关的代码行

//Lots of lines of code above and blow this code block
cv::Mat src_gray;

cv::cvtColor(imageLeft, src_gray, CV_RGB2GRAY );//imageLeft is a colour image got from the camera through another node

vpImage<unsigned char> I;


vpImageConvert::convert(src_gray,I) ;
vpDisplayOpenCV display;

if(this->lt == false)//this if loop is to prevent from infinite windows coming out
{display.init(I, 100, 100, "Line tracking");
this->lt = true;}

vpDisplay::display(I);
vpDisplay::flush(I);

让我向您保证这段代码在回调中,因此除非进程停止,否则它等同于无限 while 循环。

我无法在窗口中获取相机输出。当我运行节点时,窗口打开但没有图像。有什么想法吗?

最佳答案

ViSP-ROS 接口(interface)最近一直在变化。同时ViSP Bridge提供 ROS 和 ViSP 之间的低级接口(interface),Visp ROS是一个更好更高级别的接口(interface)。从那里你可以到达这个 tutorial修改常规 ViSP 代码以使用 ROS。

和你的类似的ViSP代码:

#include <visp/vp1394TwoGrabber.h>
#include <visp/vpDisplayX.h>
#include <visp/vpImage.h>

int main()
{
#ifdef VISP_HAVE_DC1394_2
try {
vpImage<unsigned char> I; // Create a gray level image container
bool reset = true; // Enable bus reset during construction (default)
vp1394TwoGrabber g(reset); // Create a grabber based on libdc1394-2.x third party lib

g.setVideoMode(vp1394TwoGrabber::vpVIDEO_MODE_640x480_MONO8);
g.setFramerate(vp1394TwoGrabber::vpFRAMERATE_60);
g.open(I);

std::cout << "Image size: " << I.getWidth() << " " << I.getHeight() << std::endl;

#ifdef VISP_HAVE_X11
vpDisplayX d(I);
#else
std::cout << "No image viewer is available..." << std::endl;
#endif

while(1) {
g.acquire(I);
vpDisplay::display(I);
vpDisplay::flush(I);
if (vpDisplay::getClick(I, false))
break;
}
}
catch(vpException e) {
std::cout << "Catch an exception: " << e << std::endl;
}
#endif
}

以及启用 ROS 的代码:

#include <visp/vpDisplayX.h>
#include <visp/vpImage.h>
#include <visp_ros/vpROSGrabber.h>

int main()
{
try {
//vpImage<unsigned char> I; // Create a gray level image container
vpImage<vpRGBa> I; // Create a color image container
vpROSGrabber g; // Create a grabber based on ROS

g.setCameraInfoTopic("/camera/camera_info");
g.setImageTopic("/camera/image_raw");
g.setRectify(true);
g.open(I);
std::cout << "Image size: " << I.getWidth() << " " << I.getHeight() << std::endl;

#ifdef VISP_HAVE_X11
vpDisplayX d(I);
#else
std::cout << "No image viewer is available..." << std::endl;
#endif

while(1) {
g.acquire(I);
vpDisplay::display(I);
vpDisplay::flush(I);
if (vpDisplay::getClick(I, false))
break;
}
}
catch(vpException e) {
std::cout << "Catch an exception: " << e << std::endl;
}
}

希望这对您有所帮助!

关于c++ - ROS 中的 VISP - 无法显示相机提要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23895639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com