ROS机械臂——ROS结合OpenCV案例(含资源)

纲要

在这里插入图片描述

摄像头驱动

在这里插入图片描述

图像属性

在这里插入图片描述

图像压缩

在这里插入图片描述### Realsense摄像头
在这里插入图片描述

点云展示

在这里插入图片描述### 点云图像属性
在这里插入图片描述## 摄像头标定
在这里插入图片描述

摄像头标定流程

在这里插入图片描述

如何使用标定文件

在这里插入图片描述

OpenCV

在这里插入图片描述

ROS与OpenCV的集成框架

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b0ff143b710543839325d19c7a3c04c5.png

ROS+OpenCV 图像绘制(cpp)

#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <sensor_msgs/image_encodings.h>
#include <cv_bridge/cv_bridge.h>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>static const std::string OPENCV_WINDOW = "image_window";class ImageConverter{ros::NodeHandle nh;image_transport::ImageTransport it;image_transport::Subscriber image_sub;image_transport::Publisher image_pub;public:ImageConverter():it(nh){//订阅图像输入流 、发布图像输出流(话题名称,处理队列的大小为1,回调函数的名称,回调函数所处的类)image_sub = it.subscribe("/usb_cam/image_raw",1,&ImageConverter::imageCb,this);image_pub = it.advertise("cv_bridge_image",1);cv::namedWindow(OPENCV_WINDOW);}~ImageConverter(){cv::destroyWindow(OPENCV_WINDOW);}void imageCb(const sensor_msgs::ImageConstPtr& msg){//msg为图像信息在ROS中的地址cv_bridge::CvImagePtr cv_ptr;try{//创建一个图像数据的拷贝//toCvCopy复制数据并返回复制数据地址指针cv_bridge::CvImagePtr//将ROS图像消息转换为了CvImage以在OpenCV中使用//sensor_msgs::image_encodings::BGR8是”bgr8”字符串常量。cv_ptr = cv_bridge::toCvCopy(msg,sensor_msgs::image_encodings::BGR8);}catch (cv_bridge::Exception& e){ROS_ERROR("cv_bridge exception: %s",e.what());return;}//在opencv窗口画红圈if(cv_ptr->image.rows > 60 && cv_ptr->image.cols > 60)cv::circle(cv_ptr->image,cv::Point(50,50) , 10 , CV_RGB(255,0,0));//生成opencv窗口cv::imshow(OPENCV_WINDOW,cv_ptr->image);cv::waitKey(3);//将opencv生成的话题信息,转换为Image图像信息,通过iamge_pub发布出去,可以通过rqt_image_view订阅话题,查看opencv生成的红圈image_pub.publish(cv_ptr->toImageMsg());    }
};int main(int argc,char ** argv){ros::init(argc,argv,"image_converter");ImageConverter ic;ros::spin();return 0;}

ROS+OpenCV 图像绘制(python)

#!/usr/bin/env python
# -*- coding: utf-8 -*-import rospy
import cv2
from cv_bridge import CvBridge, CvBridgeError
from sensor_msgs.msg import Imageclass image_converter:def __init__(self):    # 创建cv_bridge,声明图像的发布者和订阅者self.image_pub = rospy.Publisher("cv_bridge_image", Image, queue_size=1)self.bridge = CvBridge()self.image_sub = rospy.Subscriber("/usb_cam/image_raw", Image, self.callback)def callback(self,data):# 使用cv_bridge将ROS的图像数据转换成OpenCV的图像格式try:cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")except CvBridgeError as e:print e# 在opencv的显示窗口中绘制一个圆,作为标记(rows,cols,channels) = cv_image.shapeif cols > 60 and rows > 60 :cv2.circle(cv_image, (60, 60), 30, (0,0,255), -1)# 显示Opencv格式的图像cv2.imshow("Image window", cv_image)cv2.waitKey(3)# 再将opencv格式额数据转换成ros image格式的数据发布try:self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image, "bgr8"))except CvBridgeError as e:print eif __name__ == '__main__':try:# 初始化ros节点rospy.init_node("cv_bridge_test")rospy.loginfo("Starting cv_bridge_test node")image_converter()rospy.spin()except KeyboardInterrupt:print "Shutting down cv_bridge_test node."cv2.destroyAllWindows()

ROS+OpenCV物体识别

在这里插入图片描述

源码

get2DLocation():获取桌面以及桌面物体的坐标
在这里插入图片描述
设置红色、绿色通道,通过像素点灰度值判断出黑色桌子的具体位置,将黑色像素点具体位置的二进制数值设置为255,非黑设置为0,计算出桌子中心点,最后将非0点画上方框
在这里插入图片描述找红点、画蓝框
在这里插入图片描述
识别绿色圆柱(contours:轮廓)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分析

在这里插入图片描述
在这里插入图片描述

结果

在这里插入图片描述

小结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405492.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GH】【EXCEL】P4: Chart

文章目录 data and chartdonut chart (radial chart)Radial Chart bar chartBar Chart line chartLine Chart Scatter ChartScatter Chart Surface ChartSurface Chart Chart DecoratorsChart Decorators Chart GraphicsChart Graphics data and chart donut chart (radial cha…

每日一问:深入理解JVM——结构与类的加载过程解析

每日一问&#xff1a;深入理解JVM——结构与类的加载过程解析 在Java的世界中&#xff0c;JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09;是一个核心概念。它是Java程序能够跨平台运行的基础&#xff0c;负责执行Java字节码&#xff0c;并为Java应用程…

海南云亿商务咨询有限公司助力抖音商家破浪前行

在当下这个短视频与直播电商风起云涌的时代&#xff0c;抖音作为头部平台&#xff0c;正以其庞大的用户基数和强大的算法推荐机制&#xff0c;成为众多品牌与商家竞相追逐的新蓝海。而在这片波澜壮阔的海洋中&#xff0c;海南云亿商务咨询有限公司如同一艘稳健的航船&#xff0…

OpenCV几何图像变换(1)映射转换函数convertMaps()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像变换映射从一种表示形式转换为另一种表示形式。 该函数将用于 remap 的映射对从一种表示形式转换为另一种表示形式。以下选项 ((map1.type…

43.x86游戏实战-XXX寻找吸怪坐标

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

VMware vSphere ESXi确定vmnic*网络适配器用途的方法

近期有VMware vSphere ESXi宿主机从VMware ESXi, 6.7.0, 17499825版本重装为VMware ESXi, 7.0.3, 21930508后&#xff0c;发现对应网卡的物理适配器名vmnic*发生变化&#xff0c;本文记录了如何确定网络适配器用途的方法。 一、问题描述 原宿主机为ESXi, 6.7.0, 17499825&am…

【YOLO5 项目实战】(4)红外目标检测

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO5 项目实战】&#xff08;1&#xff09;YOLO5 环境配置与测试 【YOLO5 项目实战】&#xff08;2&#xff09;使用自己的数据集训练目标检测模型 【YOLO5 项目实战】&#xff08;3&#xff09;P…

2、Unity【基础】Mono中的重要内容

Unity基础 MonoBehavior中的重要内容 文章目录 Mono中的重要内容1、延迟函数1、延迟函数概念2、延迟函数使用3、延迟函数受对象失活销毁影响思考1 利用延时函数实现计时器思考2 延时销毁 2、协同程序1、Unity是否支持多线程2、协同程序概念3、协同程序和线程的区别4、协程的使用…

西门子PLC12001500变量标签导入昆仑通态触摸屏

目录 新建DB测试数据块导出DB数据导出结构体类型触摸屏导入标签 新建DB测试数据块 新建DB1数据块&#xff0c;里面包含普通bool数据类型&#xff0c;以及结构体数据类型 同时需要取消优化的块访问 导出DB数据 DB1数据块右击——从块生成源——仅所选块 这里要注意的是导出文…

悟空降世 撼动全球

文&#xff5c;琥珀食酒社 作者 | 积溪 一只猴子能值多少钱&#xff1f; 答案是&#xff1a;13个小目标 这两天 只要你家没有断网 一定会被这只猴子刷屏 它就是咱国产的3A游戏 《黑神话&#xff1a;悟空》 这只猴子到底有多火&#xff1f; 这么跟你说吧 茅台见了它都…

备战秋招60天算法挑战,Day22

题目链接&#xff1a; https://leetcode.cn/problems/missing-number/ 视频题解&#xff1a; https://www.bilibili.com/video/BV1HS42197Hc/ LeetCode 268.丢失的数字 题目描述 给定一个包含 [0, n] 中 n 个数的数组 nums &#xff0c;找出 [0, n] 这个范围内没有出现在数组…

微服务注册中心

目录 一、微服务的注册中心 1、注册中心的主要作用 &#xff08;1&#xff09;服务发现 &#xff08;2&#xff09;服务配置 &#xff08;3&#xff09;服务健康检测 2、 常见的注册中心 二、nacos简介 1、nacos实战入门 &#xff08;1&#xff09;搭建nacos环境 &am…

Vue插值:双大括号标签、v-text、v-html、v-bind 指令

创建应用程序实例后&#xff0c;需要通过插值进行数据绑定。数据绑定是 Vue.js 最核心的一个特性。建立数据绑定后&#xff0c;数据和视图会相互关联&#xff0c;当数据发生变化时&#xff0c;视图会自动进行更新。这样就无须手动获取 DOM 的值&#xff0c;使代码更加简洁&…

外部环境连接kafka

修改配置文件外部环境连接kafka 1、kafka的docker官方镜像地址2、kafka官方介绍的三种连接方式3、方式一&#xff1a;Default configs默认配置4、方式二&#xff1a;File input&#xff08;文件输入&#xff1a;外部配置文件替换docker容器内的配置文件&#xff09;4.1、首先查…

自存实践本地访问 nginx放前端打包好的项目

nginx 部署前端项目_哔哩哔哩_bilibili 将打包好的dits文件放到 配置nginx.conf文件的location 启动命令 start nginx.exe 输入localhost即可访问打包好的项目 nginx的特点 1.静态资源 2.转发 设置代理转发请求 关闭nginx .\nginx.exe -s quit

分享从零开始学习网络设备配置--任务6.2 实现网络设备的远程管理

任务描述 某公司的网络管理员小赵负责公司办公网的管理工作&#xff0c;熟悉了公司内部设备运行情况&#xff0c;每天都需要保障公司内部网络设备的正常运行&#xff0c;同时进行办公网的日常管理和维护工作。 在安装办公网中&#xff0c;路由器和交换机放置在中心机房&…

【生日视频制作】教师节中秋节国庆节红色直升飞机AE模板修改文字软件生成器教程特效素材【AE模板】

红色直升飞机生日视频制作教程AE模板改文字广软件告生成器素材 怎么如何做的【生日视频制作】教师节中秋节国庆节红色直升飞机AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频…

【Python机器学习】NLP概述——词序和语法

词的顺序很重要&#xff0c;那些在词序列&#xff08;如句子&#xff09;中控制词序的规则被称为语言的语法&#xff08;也被称为文法&#xff09;。这是之前的词袋或词向量例子中所丢弃的信息。在大多数简短的短语甚至许多完整的句子中&#xff0c;上述词向量近似方法都可以奏…

电脑硬盘坏了怎么恢复数据?

在数字化时代&#xff0c;电脑硬盘作为存储核心&#xff0c;承载着我们的工作文档、学习资料、家庭照片以及无数珍贵的回忆。然而&#xff0c;硬盘作为机械设备&#xff0c;也有其寿命和脆弱性&#xff0c;一旦出现故障&#xff0c;数据恢复便成为了一个紧迫而棘手的问题。本文…

Centos7 message日志因dockerd、kubelet、warpdrive、containerd等应用迅速增长

问题&#xff1a;公司服务器在部署一套业务后&#xff0c;message日志记录大量的dockerd、kubelet、warpdrive、containerd应用日志&#xff0c;每天增加2G大小的日志 解决方案&#xff1a; 前期吐槽下&#xff1a;发现某个帖子&#xff0c;需要会员或者花钱才能看&#xff0c…