JETSON AGX XAVIER GMSL2接口相机驱动
环境: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接口相机驱动相关推荐
- Nvidia Jetson Agx Xavier 在Ros中调用GMSL2相机
一.背景 在ros中调用GMSL2摄像头,刚开始是通过修改官方驱动包ros-meloidc-usb-cam,可能是修改的地方不对,一直报错,调用失败,要是有大佬修改成功,希望能交流一下. 后来借鉴了一 ...
- ZED2代相机+nvidia jetson AGX xavier踩坑记录
ZED2代相机+nvidia jetson AGX xavier踩坑记录 项目描述 nvidia jetson AGX xavier就不详细介绍了,jetson系列嵌入式开发板比一般的arrch64开 ...
- Jetson Agx Xavier平台调试AR0820相机分辨率缩放3848x2168 to 1920x1080
1. 概述 环境: Board:Jetson AGX Xavier JetPack: 4.3 已经为MIPI-CSI GMSL2自定义相机开发了一个驱动程序, 使用AR0820作为图像传感器,后者的分 ...
- Nvidia Jetson AGX Xavier 硬件相关
文章目录 前言 载板PCB层叠与阻抗 699-Pin连接器 以太网 M.2 PCIE 40-Pin扩展口 风扇接口 自动控制接口 电源域 按键和指示灯 音频接口 eSATA / USB 3.1 Typ ...
- 评测Jetson AGX Xavier性能
NVIDIA Jetson AGX Xavier的GPU有512个核,是Jetson TX2的两倍,并且搭载了深度学习加速器,以及视觉加速器.Xavier的CPU表现也有了提升,从原来的6核提升到了8 ...
- NVIDIA Jetson AGX Xavier 安装 JetPack 注意事项
NVIDIA Jetson AGX Xavier 安装 JetPack 注意事项 本文主要记录了我第一次接触Linux和为NVIDIA Jetson AGX Xavier安装JetPack时遇到的一些 ...
- NVIDIA JETSON AGX XAVIER DEVELOPER KIT刷机教程(各种踩雷篇)
操作环境 英伟达JETSON AGX XAVIER开发套件(包含充电器,原装type-c转usb数据线) Ubuntu16.04或18.04系统 (双系统.虚拟机.单系统皆可,不清楚目前的JetPac ...
- 玩转NVIDIA Jetson AGX Xavier
最近项目应用需要部署到边缘模块,所以就玩起了Xavier.感觉网上的资料不多,所以从头记录一下笔记,方便大家一起学习应用. 玩转NVIDIA Jetson AGX Xavier 1.刷机(安装sdkm ...
- jetson agx xavier 支持蓝牙耳机
准备给软件加上音频采集及播放的功能,由于还没有去做扩展出音频接口的工作,我先使用蓝牙耳机作为声音输入吧. 支持还是比较简单的,按照下面网址提供的操作执行就可以了.关注链接标题 Enabling Blu ...
最新文章
- mysql 常用sql语句 简介
- Druid:一个用于大数据实时处理的开源分布式系统——大数据实时查询和分析的高容错、高性能开源分布式系统...
- java epoll select_春招|Java开发实习面经(口头offer),感谢快手给我这个双非一次机会!...
- Transformer升级之路:博采众长的旋转式位置编码
- matlab练习程序(PCASVD)
- Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例
- MAC VSCode Go代码第一次运行配置
- python echarts城市热力图_echarts绘制各省、市、区的热力图
- 数据库实验一:数据库与数据表定义(2)—— 数据表相关操作
- 类的创建以及使用(成员变量 成员方法)
- java 调用麦克风录音_Java 实现麦克风自动录音
- 刷酸记录(迪维维A酸乳膏)20190905
- C++vector容器使用sort排序(含升序以及降序)
- 用于视觉问答的基于关系推理和注意力的多峰特征融合模型《Multimodal feature fusion by relational reasoning and attention for VQA》
- VAX对多种格式增加支持
- Hi3518EV200的开发环境搭建,Hi3518E_V200R001C01SPC030
- 2021ubuntu更新源-最全(阿里,腾讯云,京东云,清华,百度,163,山大
- Redis入门——介绍及安装
- 区块链实战:发行自己的第一款NFT(Non-Fungible Token)数字藏品
- 计算机编程课要不要学,学完编程课还是不会写代码,问题到底出在哪?