环境:opencv 3.4.15、 ROS melodic

ros中使用usb相机

首先创建一个工作空间:

$ mkdir -p ~/ros_ws/src
$ cd ~/ros_ws/
$ catkin_make
$ source devel/setup.bash

再建立一个功能包:

$ cd ~/ros_ws/src
$ catkin_create_pkg learning_image_transport roscpp std_msgs cv_bridge image_transport sensor_msgs 

然后在功能包learning_image_transport下的src目录中建立两个cpp文件:

$ cd ~/ros_ws/src/learning_image_transport/src/
$ gedit my_publisher.cpp

将下列代码复制进去:

#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>
#include <sstream> // for converting the command line parameter to integer  int main(int argc, char** argv)
{  // Check if video source has been passed as a parameter  if(argv[1] == NULL)   {  ROS_INFO("argv[1]=NULL\n");  return 1;  }  ros::init(argc, argv, "image_publisher");  ros::NodeHandle nh;  image_transport::ImageTransport it(nh);  image_transport::Publisher pub = it.advertise("camera/image", 1);  // Convert the passed as command line parameter index for the video device to an integer  std::istringstream video_sourceCmd(argv[1]);  int video_source;  // Check if it is indeed a number  if(!(video_sourceCmd >> video_source))   {  ROS_INFO("video_sourceCmd is %d\n",video_source);  return 1;  }  cv::VideoCapture cap(video_source);  // Check if video device can be opened with the given index  if(!cap.isOpened())   {  ROS_INFO("can not opencv video device\n");  return 1;  }  cv::Mat frame;  sensor_msgs::ImagePtr msg;  ros::Rate loop_rate(5);  while (nh.ok()) {  cap >> frame;  // Check if grabbed frame is actually full with some content  if(!frame.empty()) {  msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", frame).toImageMsg();  pub.publish(msg);  //cv::Wait(1);  }  }ros::spinOnce();  loop_rate.sleep();
}  

保存以后,继续创建my_subscriber.cpp:

$ gedit my_subscriber.cpp

复制下列代码:

#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>  void imageCallback(const sensor_msgs::ImageConstPtr& msg)
{  try  {  cv::imshow("view", cv_bridge::toCvShare(msg, "bgr8")->image); // cv::waitKey(30);  }  catch (cv_bridge::Exception& e)  {  ROS_ERROR("Could not convert from '%s' to 'bgr8'.", msg->encoding.c_str());  }
}  int main(int argc, char **argv)
{  ros::init(argc, argv, "image_listener");  ros::NodeHandle nh;  cv::namedWindow("view");  cv::startWindowThread();  image_transport::ImageTransport it(nh);  image_transport::Subscriber sub = it.subscribe("camera/image", 1,imageCallback);  ros::spin();  cv::destroyWindow("view");
}  

接下来要把涉及到的各种包和opencv在CMakeList中声明一下,回到程序包目录下。

$ cd ~/ros_ws/src/learning_image_transport/
$ gedit CMakeLists.txt

添加以下语句:

find_package(OpenCV REQUIRED)
# add the publisher example
add_executable(my_publisher src/my_publisher.cpp)  target_link_libraries(my_publisher ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})  # add the subscriber example
add_executable(my_subscriber src/my_subscriber.cpp)
target_link_libraries(my_subscriber ${catkin_LIBRARIES} ${OpenCV_LIBRARIES}) 

将这个包进行编译:

$ cd ~/ros_ws/
$ catkin_make  

接下来开始运行程序,首先启动ROS。

$ roscore 

运行my_publisher节点.(如果运行不起来,需要先source devel/setup.bash)。

$ rosrun learning_image_transport my_publisher 0 

这时候会看到我们的摄像头灯已经亮起来了,0代表默认摄像头,如果有多个摄像头,则第二个是1,依次类推。

接下来运行my_subscriber节点来接收图像。

$ rosrun learning_image_transport my_subscriber

ros订阅图像

ros编写发布/接收图片的结点(Python)

新建py文件 /AGV/src/image_processing/scripts/image_process.py

#!/usr/bin/env python2.7
#coding:utf-8import rospy
import cv2
from sensor_msgs.msg import Image
from cv_bridge import CvBridge,CvBridgeErrordef callback(data):             cv_image=CvBridge().imgmsg_to_cv2(data,"bgr8")cv2.imshow("view",cv_image)cv2.waitKey(1)if __name__ == '__main__':rospy.init_node('image_acquistion')rospy.Subscriber('camera/image', Image, callback)rospy.spin()cv2.destoryAllWindows()
rosrun image_processing image_process.py

JETSON AGX XAVIER GMSL2接口相机驱动相关推荐

  1. Nvidia Jetson Agx Xavier 在Ros中调用GMSL2相机

    一.背景 在ros中调用GMSL2摄像头,刚开始是通过修改官方驱动包ros-meloidc-usb-cam,可能是修改的地方不对,一直报错,调用失败,要是有大佬修改成功,希望能交流一下. 后来借鉴了一 ...

  2. ZED2代相机+nvidia jetson AGX xavier踩坑记录

    ZED2代相机+nvidia jetson AGX xavier踩坑记录 项目描述 nvidia jetson AGX xavier就不详细介绍了,jetson系列嵌入式开发板比一般的arrch64开 ...

  3. Jetson Agx Xavier平台调试AR0820相机分辨率缩放3848x2168 to 1920x1080

    1. 概述 环境: Board:Jetson AGX Xavier JetPack: 4.3 已经为MIPI-CSI GMSL2自定义相机开发了一个驱动程序, 使用AR0820作为图像传感器,后者的分 ...

  4. Nvidia Jetson AGX Xavier 硬件相关

    文章目录 前言 载板PCB层叠与阻抗 699-Pin连接器 以太网 M.2 PCIE 40-Pin扩展口 风扇接口 自动控制接口 电源域 按键和指示灯 音频接口 eSATA / USB 3.1 Typ ...

  5. 评测Jetson AGX Xavier性能

    NVIDIA Jetson AGX Xavier的GPU有512个核,是Jetson TX2的两倍,并且搭载了深度学习加速器,以及视觉加速器.Xavier的CPU表现也有了提升,从原来的6核提升到了8 ...

  6. NVIDIA Jetson AGX Xavier 安装 JetPack 注意事项

    NVIDIA Jetson AGX Xavier 安装 JetPack 注意事项 本文主要记录了我第一次接触Linux和为NVIDIA Jetson AGX Xavier安装JetPack时遇到的一些 ...

  7. NVIDIA JETSON AGX XAVIER DEVELOPER KIT刷机教程(各种踩雷篇)

    操作环境 英伟达JETSON AGX XAVIER开发套件(包含充电器,原装type-c转usb数据线) Ubuntu16.04或18.04系统 (双系统.虚拟机.单系统皆可,不清楚目前的JetPac ...

  8. 玩转NVIDIA Jetson AGX Xavier

    最近项目应用需要部署到边缘模块,所以就玩起了Xavier.感觉网上的资料不多,所以从头记录一下笔记,方便大家一起学习应用. 玩转NVIDIA Jetson AGX Xavier 1.刷机(安装sdkm ...

  9. jetson agx xavier 支持蓝牙耳机

    准备给软件加上音频采集及播放的功能,由于还没有去做扩展出音频接口的工作,我先使用蓝牙耳机作为声音输入吧. 支持还是比较简单的,按照下面网址提供的操作执行就可以了.关注链接标题 Enabling Blu ...

最新文章

  1. mysql 常用sql语句 简介
  2. Druid:一个用于大数据实时处理的开源分布式系统——大数据实时查询和分析的高容错、高性能开源分布式系统...
  3. java epoll select_春招|Java开发实习面经(口头offer),感谢快手给我这个双非一次机会!...
  4. Transformer升级之路:博采众长的旋转式位置编码
  5. matlab练习程序(PCASVD)
  6. Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例
  7. MAC VSCode Go代码第一次运行配置
  8. python echarts城市热力图_echarts绘制各省、市、区的热力图
  9. 数据库实验一:数据库与数据表定义(2)—— 数据表相关操作
  10. 类的创建以及使用(成员变量 成员方法)
  11. java 调用麦克风录音_Java 实现麦克风自动录音
  12. 刷酸记录(迪维维A酸乳膏)20190905
  13. C++vector容器使用sort排序(含升序以及降序)
  14. 用于视觉问答的基于关系推理和注意力的多峰特征融合模型《Multimodal feature fusion by relational reasoning and attention for VQA》
  15. VAX对多种格式增加支持
  16. Hi3518EV200的开发环境搭建,Hi3518E_V200R001C01SPC030
  17. 2021ubuntu更新源-最全(阿里,腾讯云,京东云,清华,百度,163,山大
  18. Redis入门——介绍及安装
  19. 区块链实战:发行自己的第一款NFT(Non-Fungible Token)数字藏品
  20. 计算机编程课要不要学,学完编程课还是不会写代码,问题到底出在哪?

热门文章

  1. seq2seq模型_具有注意力机制的seq2seq模型
  2. 斗地主的Java实现
  3. 【数据结构】387. 字符串中的第一个唯一字符
  4. iass、pass、saas
  5. Linux: Top命令查询结果参数详解
  6. 十字路口的交通灯控制电路
  7. 删除用户:userdel
  8. 凤凰系统虚拟机装卡_虚拟机安装凤凰系统(PhoenixOS)教程
  9. Day8——反转字符串、反转字符串||、替换空格、反转字符串里的单词、左旋字符串
  10. python读写、创建文件、文件夹