SLAM从入门到精通(camera数据读取)

news2024/9/27 15:34:19

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        实际ros开发的时候,现场有很多特征都可以用来进行采集和标定。比如说地面,对于外资企业或者管理比较规范的企业来说,一般robot行驶区域都是非常有特点的。这个时候如果利用lidar的slam不好做,可以使用camera图像去补充进行相关的slam操作。二维码导航就是这么来的。当然,要做到这一点,光源控制必须得到很好的解决才行。

        当然,上面说的都是slam,事实上camera还可以用来进行识别、定位、判断、检测,发挥用途的地方很多。它可以帮我们实现robot其他传感器所不具备的功能,建议可以好好掌握。今天我们就先学习下,应该怎么用ros捕捉到camera图像。

        处理图片基本都是基于opencv进行的,相关库的安装在前期执行./install_for_noetic.sh的时候,已经做好了。

1、编写cv_image_node.cpp文件


#include <ros/ros.h>
#include <cv_bridge/cv_bridge.h>
#include <sensor_msgs/image_encodings.h>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

void Cam_RGB_Callback(const sensor_msgs::ImageConstPtr& msg)
{
	cv_bridge::CvImagePtr cv_ptr;
	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;
	}

	Mat imgOriginal = cv_ptr->image;
	imshow("RGB", imgOriginal);
	waitKey(1);
}

int main(int argc, char* argv[])
{
	ros::init(argc, argv, "cv_image_node");

	ros::NodeHandle nh;
	ros::Subscriber rgb_sub = nh.subscribe("/kinect2/qhd/image_color_rect", 1, Cam_RGB_Callback);

	namedWindow("RGB");
	ros::spin();
}

        代码部分还是比较简单的,最主要的内容就是ng订阅了一个/kinect2/qhd/image_color_rect的话题,我们可以对这个话题注册一个Cam_RGB_Callback的回调函数。在这个函数里面,拿到imageOriginal的指针之后,就可以显示出图像来。

2、更新CMakeLists.txt

        需要编译cv_image_node.cpp文件,有三个地方需要修改一下。第一,确保CMake查找到cv_bridge、OpenCV,

## Find catkin and any catkin packages
find_package(catkin REQUIRED COMPONENTS message_generation roscpp rospy std_msgs genmsg tf cv_bridge)
find_package(OpenCV REQUIRED)

        第二,在include_directories里面,把OpenCV的头文件目录加进去,

include_directories(include ${OpenCV_INCLUDE_DIRS})

        第三,直接把cv_image_node.cpp的编译方法加进去,

add_executable(cv_image_node src/cv_image_node.cpp)
target_link_libraries(cv_image_node ${catkin_LIBRARIES} ${OpenCV_LIBS})
add_dependencies(cv_image_node beginner_tutorials_generate_messages_cpp)

3、catkin_make编译

        编译的方法也很简单,就是在catkin_ws的顶层,输入catkin_make即可。

4、调试和验证

        所有的环境都准备好了,下面就可以开始测试和验证了。首先,打开仿真环境,这一步可以通过rosluanch wpr_simulation wpb_balls.launch来解决。启动之后,如果不出意外的话,我们可以看到这样的画面,

        接下来,就可以继续输入rosrun beginner_tutorials cv_image_node。回车之后,就会有一个窗口弹出来,如果可以看到这样的图像,那么就代表camera已经ok了,

5、后续的开发和处理

        拿到camera的图像只是第一步,如果要把这个图像利用起来,后续还要对这个图像继续进行数字处理。常用的方法一般有滤波、二值化、边缘检测、腐蚀、膨胀等等,这些基础操作都结束之后,就可以通过轮廓、长宽比或者面积从图像中获取有价值的信息,为后续执行robot的任务打下一个坚实的基础。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UNet及其变体在医学图像分割中的性能分析

论文链接&#xff1a;https://arxiv.org/abs/2309.13013 机构&#xff1a;英国伦敦布鲁内尔大学 日期&#xff1a;20230922 因为太长了长达37页所以我也就记点重点内容了hhh,我重点关注的还是在Unet以及其变体上&#xff0c;不过感觉严格意义上来说里面提到的方法不算很新&a…

嵌入式C语言中整形溢出问题分析

整型溢出有点老生常谈了&#xff0c;bla, bla, bla… 但似乎没有引起多少人的重视。整型溢出会有可能导致缓冲区溢出&#xff0c;缓冲区溢出会导致各种黑客攻击。 今天分享一篇文章&#xff0c;希望大家都了解一下整型溢出&#xff0c;编译器的行为&#xff0c;以及如何防范&a…

【安全】 Java 过滤器 解决存储型xss攻击问题

文章目录 XSS简介什么是XSS?分类反射型存储型 XSS(cross site script)跨站脚本攻击攻击场景解决方案 XSS简介 跨站脚本( cross site script )为了避免与样式css(Cascading Style Sheets层叠样式表)混淆&#xff0c;所以简称为XSS。 XSS是一种经常出现在web应用中的计算机安全…

mistyR官网教程 空转spatial

Modeling spatially resolved omics with mistyR • mistyR (saezlab.github.io) mistyR and data formats • mistyR (saezlab.github.io) Heidelberg University and Heidelberg University Hospital, Heidelberg, Germany Jožef Stefan Institute, Ljubljana, Sloveniajov…

阿里5年经验之谈 —— 浅谈自动化测试方法!

导读 在当今快节奏的软件开发环境中&#xff0c;高质量的代码交付至关重要。而针对经过多次迭代&#xff0c;主要功能趋向稳定的产品&#xff0c;大量传统的重复性手动测试方法已经无法满足高效、快速的需求。为了提高测试效率保证产品质量&#xff0c;本文通过产品实践应用&a…

Python接口自动化测试之token参数关联

前言 在做自动化接口测试时&#xff0c;有时候会遇到token的动态关联&#xff0c;例如查询余额接口&#xff0c;需要关联登录接口的token动态值&#xff0c;如何利用python脚本进行接口token关联呢?今天我们爱学习一下吧&#xff01; 一&#xff1a;获取登录接口返回的token…

研发项目管理系统对比:找到最适合的高效工具

研发部门是企业非常重要的部门&#xff0c;代表着企业未来能否在市场上拥有优秀的技术&#xff0c;站稳市场份额。很多企业的研发方式往往是瀑布式的&#xff0c;所以项目的阶段规划&#xff0c;然后每个阶段的需求分配给开发人员&#xff0c;可以随时查看每个需求的开发进度和…

Redis学习5——有序集合Zset数据类型的操作

有序集合Zset 常用命令 数据结构 跳跃表 跳跃表

移远通信EM060K系列LTE-A Cat 6模组完成全球认证覆盖

近日&#xff0c;移远通信LTE-A Cat 6模组EM060K系列顺利完成全球认证覆盖&#xff0c;将以卓越的性能和品质助力海内外客户终端大规模部署&#xff0c;为其提供畅快的高速网络连接。同时&#xff0c;凭借着有竞争力的性能和成本优势&#xff0c;EM060K系列将加速释放海外固定无…

[架构之路-235]:目标系统 - 纵向分层 - 数据库 - 数据库系统基础与概述:数据库定义、核心概念、系统组成

目录 一、核心概念 1.1 什么是数据与信息 1.2 数据与数据库的关系 1.3 什么是数据库 1.4 数据库中的数据的特点 1.5 数据库与数据结构的关系 二、数据库系统 2.1 什么是数据库管理系统 2.2 什么是数据库系统 2.3 数据库相关的人员 2.4 数据库的主要功能 2.5 Excel表…

Vuex的基础使用存值及异步

目录 一、概述 ( 1 ) 讲述 ( 2 ) 概念 ( 3 ) 作用 二、取值 1. 安装 2. 菜单栏 3. 模块 4. 引用 三、改值 四、异步&后台请求 带来的获取 一、概述 ( 1 ) 讲述 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的…

【Linux初阶】多线程1 | 页表的索引作用,线程基础(优缺点、异常、用途),线程VS进程,线程控制,C++多线程引入

文章目录 ☀️一、深入理解页表☀️二、Linux线程概念&#x1f33b;1.什么是线程&#xff08;重点&#xff09;⚡&#xff08;1&#xff09;线程的概念⚡&#xff08;2&#xff09;线程库初识 &#x1f33b;2.线程的优点&#x1f33b;3.线程的缺点&#x1f33b;4.线程异常&…

为什么设置静态代理IP后无法正常上网,怎么解决?

静态代理IP是一个固定的IP地址&#xff0c;因为其出色的稳定性和安全性而得到广泛应用&#xff0c;常用于一些对网络质量要求高、需要长期稳定和持续可靠连接的业务。设置静态代理IP后无法上网是用户常见的网络问题&#xff0c;通常有多种原因&#xff1a; 1. 静态代理IP不可用…

【Flutter学习】AppBar

App Bar 可以视为页面的标题栏&#xff0c;在 Flutter 中用AppBar组件实现。 一个简单的AppBar实现代码如下&#xff1a; import package:flutter/material.dart;void main() {runApp(const AppBarTest()); }class AppBarTest extends StatelessWidget {const AppBarTest({Key…

【AGC】云托管新建站点时间过长的问题排查方法

【问题描述】 开发者按照指导文档使用云托管服务&#xff0c;已经申请了域名&#xff0c;在创建站点时页面显示证书配置最长需要12小时&#xff0c;然而&#xff0c;在等了两天后依然是激活中的状态&#xff0c;没有如期上线。 ​ 【解决方案】 卡在上线中的状态有以下几个原…

F. Vasilije Loves Number Theory

Problem - F - Codeforces 思路&#xff1a;分析一下题意&#xff0c;对于第一种操作来说&#xff0c;每次乘以x&#xff0c;那么nn*x&#xff0c;然后问是否存在一个a使得gcd(n,a)1并且n*a的约数个数等于n&#xff0c;有最大公约数等于1我们能够知道其实这两个数是互质的&…

圆满完成重保网络防护行动,持安科技获西南兵工致信感谢

近日&#xff0c;因积极协助西南兵工有限责任公司开展重保网络防护行动中&#xff0c;提供强大零信任网络安全产品和专业技术力量配合&#xff0c;持安科技收到了来自西南兵工有限责任公司的致信感谢。 持安为西南兵工提供的应用层零信任解决方案&#xff0c;是持安科充分吸取了…

Hibiki Run 市场火爆,“Listen to Earn”赛道的现象级应用?

在 9 月 18 日&#xff0c;以“Listen to Earn”为特点的 Web3 数字音乐类项目 Hibiki Run&#xff0c;在包括 DAOStarter、Spores Network、BitMart 在内的 三个平台&#xff0c;开启了实用通证 $HUT 的 IDO / IEO 活动。据悉&#xff0c;在本轮认购开启后的短时间内所有平台均…

Python 图形化界面基础篇:更改字体、颜色和样式

Python 图形化界面基础篇&#xff1a;更改字体、颜色和样式 引言 Tkinter 库简介步骤1&#xff1a;导入 Tkinter 模块步骤2&#xff1a;创建 Tkinter 窗口步骤3&#xff1a;创建文本标签步骤4&#xff1a;更改字体步骤5&#xff1a;更改颜色步骤6&#xff1a;更改样式 完整示例…

数字图像处理实验记录一(图像基本灰度变换)

文章目录 基础知识图像是什么样的&#xff1f;1&#xff0c;空间分辨率&#xff0c;灰度分辨率2&#xff0c;灰度图和彩色图的区别3&#xff0c;什么是灰度直方图&#xff1f; 实验要求1&#xff0c;按照灰度变换曲线对图像进行灰度变换2&#xff0c;读入一幅图像&#xff0c;分…