ROS机械臂开发:从入门到实践---学习笔记(8)_Hey_amov的博客-程序员宅基地

技术标签: 笔记  机器学习  ROS  机械臂  

第八章作业
第一题 安装ROS摄像头驱动功能包,驱动笔记本摄像头,并使用ROS可视化工具显示图像
1.1 安装驱动功能包
ROS中有通用USB摄像头的驱动功能包——usb_cam,安装后很快就可以把摄像头跑起来,在该功能包的wiki上我们可以看到详细的接口说明,最终的图像将通过<camera_name>/image发布出来,订阅后就可以看到图像了。
在终端输入依次输入:

sudo apt-get install ros-melodic-usb-cam
roslaunch usb_cam usb_cam-test.launch
rqt_image_view

第一条命令是安装摄像头的驱动,第二条命令是启动摄像头程序,第三条命令是测试摄像头能否正常使用。效果如图1-1所示。
在这里插入图片描述

图1-1 驱动摄像头

第二题 识别白色物体,将其边缘绘制出来,并在ROS中显示识别结果
ROS本身并没有图形处理能力,需要借助OpenCV等开源库实现,由于不同库中的图像数据定义不同,ROS定义了一个“Bridge”来做桥接,CvBridge就是完成ROS图像消息和OpenCV图像数据转换的“桥”。如图2-1所示。
在这里插入图片描述

图2-1 ROS与OpenCV的集成框架
2.1 OpenCV库
OpenCV库是一个基于BSD许可发行的跨平台开源计算机视觉库,可以直接访问硬件摄像头,并且还提供一个简单的GUI系统——highgui。基于OpenCV库,我们可以快速开发机器视觉方面的应用,而且ROS中 已经集成了OpenCV库和相关的接口功能包,使用以下命令即可安装:Sudo apt-get install ros-melodic-vision-opencv libpencv-dev python-opencv。
2.2 在ROS中使用OpenCV
在终端输入roslaunch probot_gazebo probot_anno_with_gripper_ gazebo_world.launch、rosrun probot_vision vision_manager以及rqt_ image_view。即可得到如图2-2所示内容。(内容都是修改过的,命令没变)
在这里插入图片描述

图2-2 物体识别

下面分析实现该程序的关键部分

image_sub_ = it_.subscribe("/probot_anno/camera/image_raw", 1, &VisionManager::imageCb, this);
image2_pub_ = it_.advertise("/table_detect", 1);

首先定义一个Subscriber接收原始图像消息,再定义一个Publisher发布OpenCV处理后的图像消息。

try
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;

然后利用CvBridge功能将ROS图像消息转换成OpenCV图像数据。

cv::Mat binaryImage = denoiseImage;
for (int i = 0; i < binaryImage.rows; i++)
for (int j = 0; j < binaryImage.cols; j++)
int editValue = binaryImage.at<uchar>(i, j);
int editValue2 = gray_image_green.at<uchar>(i, j);
if ((editValue >= 0) && (editValue < 50) && (editValue2 >= 0) && (editValue2 < 20))
{
     // check whether value is within range.
binaryImage.at<uchar>(i, j) = 0;
else
binaryImage.at<uchar>(i, j) = 255;

再就是利用OpenCV中的算法对从ROS中转换过来的图像进行处理了,主要是通过图像通道的分离和阈值判断识别不同的颜色来确定物体的像素位置,再通过一个简单的线性变换计算图像坐标系下的实际位置。

// Output modified video stream
image1_pub_.publish(cv_ptr_->toImageMsg());

最后将OpenCV的图像转换成ROS图像消息发布出来,就可以再ROS中看到结果了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45777375/article/details/116571872

智能推荐

Nikto2漏洞扫描工具使用_jims666666的博客-程序员宅基地

简介:Nikto2 是一款使用perl语言写的多平台扫描软件,是一款命令行模式的工具,它可以扫描指定主机的WEB类型主机名、特定目录、Cookie、特定CGI漏洞、XSS漏洞、sql注入漏洞、返回主机允许的http方法等安全问题。位置:/pentest/web/nikto用法 1:./nikto.pl  -h  主机IP或域名  -o  扫描结果用法 2:./nik

学习新技术,需要付费上培训班吗?_勇敢的仙人掌的博客-程序员宅基地

知识是免费的,运用是收费的1. 知识是免费的只要能上网,就能找到所有的理论、教程、文章、论坛。。。完全免费。这些学习资料,可以让你入门、打基础。2. 运用是收费的具体的项目经验,在网上很难找到。最新的项目经验都在各种培训班、网络课程里。。。需要付费。只有掌握了项目经验,才能找到工作。尤其是打算转行的。3. 选择培训班的标准不要急着上培训班,先把网上能够找到的免费知识学好,搞明白来龙...

JavaScript基础题、练习题、考试题、面试题(一)_程序媛墨小紫的博客-程序员宅基地

JavaScript基础题、练习题、考试题、面试题(一)1.以下代码执行后,分别弹出来的值是:var num1=1; function testf1(){ num1=2; var num1; alert(num1); } function testf2(){ alert(num1); } testf1(); testf2();A 2,1B 2,2C undefined,undefined...

maven于eclipse集成-2_草上飞的羊的博客-程序员宅基地

打开eclipse,选择windows ——>  Preferences 搜索maven。(1)

CNN练习_小小白在路上的博客-程序员宅基地

(1)README操作指示文档;(2)下载matconvnet并进行配置;(3)运行extractCNN提取图片特征;(4)运行quaryInDatabase,更改查询ID更改查询图片进行检索;小结:1.database是才裁剪过得图片,可以查询返回所有相似图片;如果是图片没有裁剪,比如谢霆锋那张图片查询不能返回阴影很大的那一张,还是考虑采用裁剪过得图片作为数据库;2.未裁剪的图...

android bundle封装传递map对象_你猜是不是我的博客-程序员宅基地

创建一个继承Serializable的类,用于传递不同的mappublic class SerializableMap implements Serializable { private Map<String,String> stringMap; private Map<String,int[]> intsMap; public Map<String, String> getS

随便推点

android 处理鼠标滚轮事件_IT互联网大叔的博客-程序员宅基地

android处理滚轮事件,并不是如下函数:1)  public boolean onKeyDown(int keyCode, KeyEvent event)  2)     public boolean dispatchKeyEvent(KeyEvent event) 3)     public boolean onTouchEvent(MotionEvent event)

HIDL最全编译流程_Gunder的博客-程序员宅基地_hidl编译

想了解HIDL介绍的可以参考《HIDL概述》,本篇文章主要介绍HIDL的详细编译流程及简单的客户端应用(C++跟Android客户端的应用)。一、准备工作整一套源码,Android O或者Android P的 保证全套代码已经全编译,原生代码全编译命令source build/envset.sh lunch make   3、hidl-gen工具已经安装,安装命令make h...

python 找出列表中出现次数最多的数据_top啦它的博客-程序员宅基地_python求出数列出现最多次是几次

test = [1,2,33,33,4,4,4,'a','a','a','a']print(max(set(test),key = test.count))输出:a

r roc函数_R语言中绘制ROC曲线_weixin_39942318的博客-程序员宅基地

两种方法:第一种,摘自别人的方法:ROC曲线,做分类时经常会用到的一种结果表现方法。诸如此类的工作,首选工具当然是R。在CRAN上搜了一下,找到一个叫ROCR的包。尽管这个包已经很久没更新了,但用起来还是很爽的。先看一下我画的ROC曲线。里面是三份预测结果的ROC曲线。ROCR包中主要是两个class:prediction和performance。前者是将预测结果和真实标签组合在一起,生成一个pr...

python-redis最详细操作_jiepeng2453的博客-程序员宅基地_python redis-cli

1、安装1.1 安装sudo apt-get install redis-server1.2服务端启动sudo /etc/init.d/redis-server status | start | stop | restart1.3客户端连接redis-cli -h IP地址 -p 端口redis-cli # 默认连接本机的6379端口127.0.0.1:6379&gt;ping...

[Android]实现静默安装APK的两种方法_jingwen3699的博客-程序员宅基地_安卓静默安装软件

Android上的静默安装似乎是个很诱人的功能,好多人都问这个问题。今天分享下实现静默安装的两种方法,但当看完这篇文章后,仍会让一些人失望滴。      Android把所有的Permission依据其潜在风险(属性名为protectionLevel )划分为四个等级,即"normal "、"dangerous "、 "signature "、 "signatureOrSystem "。

推荐文章

热门文章

相关标签