【ROS教程 005】ROS可视化_ros 可视化程序编写_DaveBobo的博客-程序员秘密

技术标签: ROS机器人  

在ROS系统中它可以通过一些通用工具轻松绘制标量数据图,它要求对每一个标量字段数据分别绘制成二维曲线。
(1)用rxplot画出时间趋势曲线
在ROS系统中,标量数据可以根据消息中提供的时间戳作为时间序列绘制图形,然后我们能够在y轴上使用rxplot工具绘制标量数据。为了展示rxplot工具我们使用example4节点。它在两个不同的主题中分别发布一个标量和一个矢量(非标量),这两个主题分别是温度(temp)和加速度(accel)。在这些消息中的值是随机生成的,所以它们没有实际意义,仅用于示范曲线绘制。首先运行节点

$ rosrun chapter3_tutorials example4

通过rostopic list能够看到两个活动主题temp和accel。对于标量数据,我们通常使用data作为字段名来表示实际的值。对于temp主题,以Int32为数据格式,使用命令:

$ rxplot /temp/data

如果节点正常运行,我们能够看到消息中的数值随时间变化的图形
这里写图片描述
在示例节点提供的accel主题里,我们看到一个Vector3的消息,我们可以在一个plot图中分别绘制三个字段的曲线,这是rxplot的优势,命令为:

$ rxplot /accel/x:y:z

这里写图片描述
我们还可以将每个字段分开绘制,运行

$ rxplot /accel/x /accel/y /accel/z

这里写图片描述
(2)显示单一图片
在ROS系统中我们可以创建一个节点,在节点中展示来自即插即用摄像头的图像。这里我使用罗技摄像头来完成这项工作。在example6节点中,通过调用OpenCV库插入一段基本的摄像头捕捉程序,在后在ROS中将采集到的cv::Mat图像转换到ROS图像,这样就可以在主题中发布了,这个节点会在/camera主题里发布图像帧。
example6.cpp中的程序:

#include <ros/ros.h>

#include <image_transport/image_transport.h>
#include <cv_bridge/cv_bridge.h>
#include <sensor_msgs/image_encodings.h>

#include <opencv2/highgui/highgui.hpp>

int main( int argc, char **argv )
{

  ros::init( argc, argv, "example6" );

  ros::NodeHandle n;

  // Open camera with CAMERA_INDEX (webcam is typically #0).
  const int CAMERA_INDEX = 0;
  cv::VideoCapture capture( CAMERA_INDEX );
  if( not capture.isOpened() )
  {
  ROS_ERROR_STREAM(
  "Failed to open camera with index " << CAMERA_INDEX << "!"
  );
  ros::shutdown();
  }

  image_transport::ImageTransport it( n );
  image_transport::Publisher pub_image = it.advertise( "camera", 1 );

  cv_bridge::CvImagePtr frame = boost::make_shared< cv_bridge::CvImage >();
  frame->encoding = sensor_msgs::image_encodings::BGR8;

  while( ros::ok() ) {
  capture >> frame->image;

  if( frame->image.empty() )
  {
  ROS_ERROR_STREAM( "Failed to capture frame!" );
  ros::shutdown();
  }

  frame->header.stamp = ros::Time::now();
  pub_image.publish( frame->toImageMsg() );

  cv::waitKey( 3 );

  ros::spinOnce();
  }

  capture.release();

  return EXIT_SUCCESS;

}

example6.launch中内容:

<?xml version="1.0" encoding="UTF-8"?>

<launch>
  <!-- Example 6 -->
  <node pkg="chapter3_tutorials" type="example6" name="example6"
  output="screen"/>
</launch>

manifest.xml中的内容需要添加我们用到的其他库

<package>
  <description brief="chapter3_tutorials">

  chapter3_tutorials

  </description>
  <author>Enrique</author>
  <license>BSD</license>
  <review status="unreviewed" notes=""/>
  <url>http://ros.org/wiki/chapter3_tutorials</url>
  <depend package="std_msgs"/>
  <depend package="geometry_msgs"/>
  <depend package="sensor_msgs"/>
  <depend package="visualization_msgs"/>
  <depend package="rospy"/>
  <depend package="roscpp"/>
  <depend package="opencv2"/>
  <depend package="cv_bridge"/>
  <depend package="image_transport"/>
  <depend package="pcl"/>
  <depend package="pcl_ros"/>

</package>

CMakeLists.txt增加相关内容并编译通过后,我们将使用launch文件运行节点并进行图像捕捉和发布工作。
启动节点

$ roslaunch chapter3_tutorials example6.launch

显示单一图片

$ rosrun image_view image_view image:=/camera

这里写图片描述
(3)3D可视化
ROS系统中的rviz工具集成了能够完成3D数据处理的OpenGL接口,能够将传感器数据在模型化世界中展示。用以下命令来启动rviz

$ rosrun rviz rviz

Add部分参数项如下图所示:
这里写图片描述
(4)保存和回放数据
ROS能够存储所有节点通过主题发布的消息,消息记录包正是一个包含各个主题所发消息的容器,用于记录机器人各个节点间的会话过程。
step1 使用rosbag在包文件中记录数据,先运行节点

$ rosrun chapter3_tutorials example4

现在有两个选择,一个是记录所有的主题

$ rosbag record -a

第二是仅记录一些特定(用户自定义)的主题

$ rosbag record /temp /accel

step2 回放消息记录文件,移动到想要回放消息记录包文件所在的文件夹下,并输入以下命令:

$ rosbag play filename

References:
[1]. Aaron Martinez Enrique Fern andez, ROS机器人程序设计[B], P59-74, 2014.

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

智能推荐

android 可以上下左右滑动的界面布局_android上下左右滑动布局_I'm the future的博客-程序员秘密

1.我使用的是ScrollView嵌套HorizontalScrollView让ScrollView负责上下滑动HorizontalScrollView负责左右滑动2.以下代码提供了思路和完成手段,请根据具体业务去进行修改,我试过使用recyclerview进行自定义,发现一旦有了复杂业务之后会掉帧卡顿所以使用了这种方法XML布局&amp;lt;?xml version=&quot;1.0&quot; encoding...

angularjs表单验证_使用ngMessages在AngularJS中轻松进行表单验证_dingshi7798的博客-程序员秘密

angularjs表单验证 去年秋天,随着Angular 1.3的发布, ngMessages模块被推出。 这增加了对向用户显示消息的增强支持-通常是来自表单验证的错误消息。 在ngMessages发行之前,开发人员被迫依靠ng-class和ng-show ng-class指令来显示这些错误。 这导致代码混乱,重复。 但是,现在, ngMessages提供了显示自定义错误消息的功能,而不必违反...

有故事,带项目的flask教程(2)---flask的路由管理_flask路由集中管理_毕老编程的博客-程序员秘密

一大早,离公司上班还有两个小时,老项和小王已经在公司了。因为他们昨天就约好了,以后每天都早点到公司,趁还没上班,老项就给小王讲解flask和项目的东西,顺便帮小王看看前一天的任务完成的如何。“小王啊,我问你,如果要你做一个网站,你能想到需要做哪些工作?”老项首先问道。小王思考了一下说:“我觉得肯定要先做网站的页面,当然页面上面展示的数据应该是从服务器上数据库查到的,那应该还要做数据库相关的...

SpringBoot整合Mybatis源码解析_spring整合mybatis源码_哼哼爸比的博客-程序员秘密

目录一、示例代码1.核心依赖2.配置(application.yml)3.核心代码二、源码分析SpringBoot整合Mybatis的过程1.SpringBoot集成Mybatis2.创建MapperScannerConfigurer的bean定义及扫描mapper接口3.实例化SqlSessionFactory、SqlSessionTemplate及mapper三个bean3.1. 实例化SqlSessionFactory3.2. 实例化sqlSessionTemp

rz命令上传文件乱码,无关be参数_rz上传文件乱码_Mr. me的博客-程序员秘密

可能你遇到了和我一样的问题,maven打包项目为jar,使用rz命令上传至服务器出现乱码无法上传文件。

JAVA算法:猴子吃桃子(JAVA版本算法)_梅森上校的博客-程序员秘密

JAVA算法:猴子吃桃子(JAVA版本算法)问题描述猴子吃桃子 有一只猴子第一天摘了很多桃,觉得很高兴就立刻吃了桃总数的一半,然后觉得没吃饱又吃了3个。猴子感觉这样吃桃会立刻没有,于是就定下一个规矩:每次在奇数天吃剩余桃总数的一半再多加3个 每次在偶数天吃剩余桃的总数的一半再多吃一个。请输入一个天数,使得该天数的剩余桃数正好为1,请输出猴子第一天共摘了多少个桃?问题分析我...

随便推点

oracle 安装失败,未找到文件_苡菁的博客-程序员秘密

将win64_11gR2_database_2of2解压出的文件,win64_11gR2_database_2of2\database\stage\Components中的内容直接剪切到win64_11gR2_database_1of2\database\stage\Components目录下即可。然后再安装。...

JIRA的使用介绍(一)- 概念篇(笔记)_jira中的fe是什么_木子夏_欣儿的博客-程序员秘密

JIRA的使用介绍(一)- 概念篇jIRA这个工具接触有好几年了,在多个海外项目上都用过这个工具。去年又在项目上深度使用后就有点爱不释手了,回国后也在找机会推荐给其它项目上用。最近正好有新项目需要用,借这个机会把JIRA的配置学习的过程记录下来。JIRA和Atlassian公司JIRA是Atlassian公司的产品。Atlassian公司于2002在澳大利亚悉尼成立,提供面...

前端发展趋势技术讲解-PWA_前端前沿技术_吴迪98的博客-程序员秘密

一、背景从2018年到现在,作为号称下一代web应用模型的PWA,逐渐成为了一个各大前端厂商争先恐后进行涉足,布局的一个新的技术, 其主要的对标物Native app,作为现在最主流的移动端应用,它的安全,性能,用户体验的确明显领先于其他互联网载体,但是原生App始终有一些缺点,比如:昂贵开发成本软件上线,版本更新都需要发布到不同的商店,并通过审核有些APP你可能使用频率特别少,但是你...

ADS1.2下建立自己的Lib库文件_lovenessless的博客-程序员秘密

转自:http://blog.chinaunix.net/uid-20607586-id-1916009.html 一.生成Lib库文件1.首先,新建Lib工程(lib_tst_gliethttp.mcp)File-New-ARM Object Library2.建立一个c文件,输入测试函数int get_name(void){     for(;;)printf(

Keras ImageDataGenerator参数_keras imagegenerator 参数_AI视觉网奇的博客-程序员秘密

from keras.preprocessing.image import ImageDataGeneratorkeras.preprocessing.image.ImageDataGenerator(featurewise_center=False, samplewise_center=False, featurewise_std_normalization = False,

kinect 2.0 学习笔记_实时平滑Kinect深度帧(像素滤波器)_kinect输出视频掉帧_快乐成长吧的博客-程序员秘密

参考:https://blog.csdn.net/jiaojialulu/article/details/53192887?locationnum=15&amp;amp;fps=1(jiaojialulu)https://www.codeproject.com/Articles/317974/KinectDepthSmoothing      今天我们解决一个问题:如何平滑深度图的噪声点(深度值为0)。 ...

推荐文章

热门文章

相关标签