技术标签: 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.
1.我使用的是ScrollView嵌套HorizontalScrollView让ScrollView负责上下滑动HorizontalScrollView负责左右滑动2.以下代码提供了思路和完成手段,请根据具体业务去进行修改,我试过使用recyclerview进行自定义,发现一旦有了复杂业务之后会掉帧卡顿所以使用了这种方法XML布局&lt;?xml version="1.0" encoding...
angularjs表单验证 去年秋天,随着Angular 1.3的发布, ngMessages模块被推出。 这增加了对向用户显示消息的增强支持-通常是来自表单验证的错误消息。 在ngMessages发行之前,开发人员被迫依靠ng-class和ng-show ng-class指令来显示这些错误。 这导致代码混乱,重复。 但是,现在, ngMessages提供了显示自定义错误消息的功能,而不必违反...
一大早,离公司上班还有两个小时,老项和小王已经在公司了。因为他们昨天就约好了,以后每天都早点到公司,趁还没上班,老项就给小王讲解flask和项目的东西,顺便帮小王看看前一天的任务完成的如何。“小王啊,我问你,如果要你做一个网站,你能想到需要做哪些工作?”老项首先问道。小王思考了一下说:“我觉得肯定要先做网站的页面,当然页面上面展示的数据应该是从服务器上数据库查到的,那应该还要做数据库相关的...
目录一、示例代码1.核心依赖2.配置(application.yml)3.核心代码二、源码分析SpringBoot整合Mybatis的过程1.SpringBoot集成Mybatis2.创建MapperScannerConfigurer的bean定义及扫描mapper接口3.实例化SqlSessionFactory、SqlSessionTemplate及mapper三个bean3.1. 实例化SqlSessionFactory3.2. 实例化sqlSessionTemp
可能你遇到了和我一样的问题,maven打包项目为jar,使用rz命令上传至服务器出现乱码无法上传文件。
JAVA算法:猴子吃桃子(JAVA版本算法)问题描述猴子吃桃子 有一只猴子第一天摘了很多桃,觉得很高兴就立刻吃了桃总数的一半,然后觉得没吃饱又吃了3个。猴子感觉这样吃桃会立刻没有,于是就定下一个规矩:每次在奇数天吃剩余桃总数的一半再多加3个 每次在偶数天吃剩余桃的总数的一半再多吃一个。请输入一个天数,使得该天数的剩余桃数正好为1,请输出猴子第一天共摘了多少个桃?问题分析我...
将win64_11gR2_database_2of2解压出的文件,win64_11gR2_database_2of2\database\stage\Components中的内容直接剪切到win64_11gR2_database_1of2\database\stage\Components目录下即可。然后再安装。...
JIRA的使用介绍(一)- 概念篇jIRA这个工具接触有好几年了,在多个海外项目上都用过这个工具。去年又在项目上深度使用后就有点爱不释手了,回国后也在找机会推荐给其它项目上用。最近正好有新项目需要用,借这个机会把JIRA的配置学习的过程记录下来。JIRA和Atlassian公司JIRA是Atlassian公司的产品。Atlassian公司于2002在澳大利亚悉尼成立,提供面...
一、背景从2018年到现在,作为号称下一代web应用模型的PWA,逐渐成为了一个各大前端厂商争先恐后进行涉足,布局的一个新的技术, 其主要的对标物Native app,作为现在最主流的移动端应用,它的安全,性能,用户体验的确明显领先于其他互联网载体,但是原生App始终有一些缺点,比如:昂贵开发成本软件上线,版本更新都需要发布到不同的商店,并通过审核有些APP你可能使用频率特别少,但是你...
转自: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(
from keras.preprocessing.image import ImageDataGeneratorkeras.preprocessing.image.ImageDataGenerator(featurewise_center=False, samplewise_center=False, featurewise_std_normalization = False,
参考:https://blog.csdn.net/jiaojialulu/article/details/53192887?locationnum=15&amp;fps=1(jiaojialulu)https://www.codeproject.com/Articles/317974/KinectDepthSmoothing 今天我们解决一个问题:如何平滑深度图的噪声点(深度值为0)。 ...