数据持续输出测试

第三节中最后虽然可以读取到雷达的角度和距离数据,但是每次后面读取的数据都会覆盖之前的数据,因此尝试使用动态的文件名,这样每次保存数据都会使用不同的文件名,数据就不会被覆盖。决定使用当前时间作为文件名,也便于后与的判断数据先后问题。参考获取当前系统时间和延迟等相关文章。修改官方提供sdk前,先做了一个测试程序test.cpp,如下:

#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
#include <time.h>
#include <unistd.h>using namespace std;int main()
{for (int j = 0; j < 50; j++){time_t timep;struct tm*p;char name[256]={0};//存储格式化后时间名time(&timep);p = localtime(&timep);//将时间格式化成字符串sprintf(name, "%d.%d.%d %d:%02d:%02d.csv",1900+p->tm_year,1+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);int count = 10;float tee = 2.333;ofstream oFile;oFile.open(name, ios::out|ios::trunc);for(int i = 0; i < count; i++){oFile<<"属性1"<<","<<"属性2"<<","<<"结果1"<<","<<"结果2"<<endl;oFile<< tee <<endl;oFile<<"0101"<<","<<"1 2 3"<<","<<"32.2.3;2"<<","<<"1"<<endl;}oFile.close();sleep(2); //sleep 2 senconds}
}

直接使用g++编译,并运行输出的a.out文件:

g++ test.cpp
./a.out

输出结果如下所示:

由于本文末尾加了2秒延迟,因此每次获取到的数据时间差为2秒,如果输出数据是通过重复的回调函数获取当下最新数据时,通过该代码改变输出中tee的赋值地址,即可实现数据的实时记录。文件命名格式可根据自身需求改成与时间相关的格式,如果需要每分钟记录一次数据,仅需要将时间精确到分钟即可,如下所示:

sprintf(name, "%d.%d.%d %d:%02d.csv",1900+p->tm_year,1+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min);

然后对思岚科技提供的client函数进行修改,代码如下:

#include "ros/ros.h"
#include "sensor_msgs/LaserScan.h"
/**/#include "fstream"
/**/#include "string"
/**/#include <stdio.h>
/**/#include <time.h>
/**/#include <unistd.h>
#define RAD2DEG(x) ((x)*180./M_PI)/**/using namespace std;void scanCallback(const sensor_msgs::LaserScan::ConstPtr& scan)
{int count = scan->scan_time / scan->time_increment;ROS_INFO("I heard a laser scan %s[%d]:", scan->header.frame_id.c_str(), count);ROS_INFO("angle_range, %f, %f", RAD2DEG(scan->angle_min), RAD2DEG(scan->angle_max));/**/time_t timep;/**/struct tm*p;/**/char name[256]={0};/**/time(&timep);   /**/p = localtime(&timep);/**/sprintf(name, "%d.%d.%d %d:%02d:%02d.csv",1900+p->tm_year,1+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);/**/ofstream oFile;/**/oFile.open(name,ios::out|ios::trunc);for(int i = 0; i < count; i++) {float degree = RAD2DEG(scan->angle_min + scan->angle_increment * i);ROS_INFO(": [%f, %f]", degree, scan->ranges[i]);/**/oFile<< degree <<","<< scan->ranges[i] <<endl;}oFile.close();
}int main(int argc, char **argv)
{ros::init(argc, argv, "rplidar_node_client");ros::NodeHandle n;ros::Subscriber sub = n.subscribe<sensor_msgs::LaserScan>("/scan", 1000, scanCallback);ros::spin();return 0;
}

文中/**/为修改部分,若修改后重命名,需要在cmakelist文件中修改链接。这样一来实现了持续输出二维雷达测量的距离和角度数据,还可以根据需要选择输出的频率,使得二维线性雷达的使用不仅仅局限于2维层面,加上纵坐标数据可以实现二维线性雷达的三维扫描。

RPLIDAR思岚雷达学习记录--4--雷达数据实时保存相关推荐

  1. MySQL学习记录 (三) ----- SQL数据定义语句(DDL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  2. MySQL学习记录 (二) ----- SQL数据查询语句(DQL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  3. 小样本学习记录————利用所有数据的元学习Few-shot Text Classification with Distributional Signatures

    小样本学习记录----利用所有数据的元学习Few-shot Text Classification with Distributional Signatures 在计算机视觉中,低水平的模式是可以跨学 ...

  4. RPLIDAR思岚雷达学习记录--5--串口调试解决--comtransmit工具

    通过串口理解RPLIDRA的通讯协议 主要介绍一下学习记录2中没有解决的问题,特别感谢思岚科技官方售后,非常负责. 在串口调试过程中,发现雷达连接到电脑上之后开始转动,但是一连接上串口调试工具就停止转 ...

  5. VQA任务学习记录1(附数据使用代码记录)

    0.前言 最近需要学习处理VQA任务特此记录,这个主要是对论文bottom-up and top-down()和bilinear attention network()中的代码部分的学习记录,目前也并 ...

  6. ROS学习-记录和回放数据

    本博客将介绍怎么使用ROS系统来记录数据到一个.bag文件中,然后回放数据,在运行系统中产生类似的效果. 记录数据(创建一个bag文件) 从一个运行的ROS系统中记录topic数据,并存储到bag文件 ...

  7. 海思开发板学习记录2----- 开发板配置tftp 服务

    前言: 虚拟机下通过tftp 将boot .kernel . root 镜像文件导入到开发板.之后通过烧录指令进行固件烧录 1.首先需要设置虚拟机,电脑,开发板处于同一个局域网内,这样才能通过tftp ...

  8. PCL学习记录--点云数据的获取与可视化

    1.获取点云数据 (1)点云定义 pointCloud = std::make_shared<pcl::PointCloud<pcl::PointXYZ>>(); (2)获取相 ...

  9. 数据库学习记录,(数据准备)

    工具:notepad++ 数据表示例 学生表 student{学号,姓名,性别,出生年月日,所在班级} 课程表course{客场号,课程名称,教师编号} 成绩表score{学号,课程号,成绩} 教师表 ...

最新文章

  1. python和anaconda的区别_anaconda和python区别
  2. java迭代器创建后mutx锁,多线程编程(10) - 多线程同步之 Mutex (互斥对象)
  3. hdu oj 2020 绝对值排序
  4. cs_EmailQueue_Failure///cs_Emails_Dequeue///cs_Emails_Enqueue
  5. axure没有团队页签_Axure教程:多页签可滚动的选项卡制作
  6. 20170125小测
  7. 11、如何开启慢日志查询?
  8. 【拓扑排序】【DP】旅行计划(luogu 1137)
  9. 最大素数有用吗?安全上网就靠它
  10. 58 SD配置-科目分配-定义科目代码
  11. python笔记之强制函数以关键字参数传参
  12. 力扣812.最大三角形面积
  13. Qt 5.14 稳定版发布,带来更好的 HiDPI 支持和改进 3D 模块
  14. layui select 修改_layui怎么修改select的值?
  15. 【数据泵】EXPDP导出表结构
  16. Linux中用户管理详解(上)-Linux学习日记
  17. 笔记:复杂度分析(上)
  18. 获取完整拼音中包含拼音的个数
  19. json格式的字符数据转换成map格式
  20. 倍加福编码器ENI58IL-H12BA5-1024UD1-RC5

热门文章

  1. java中的集合详解
  2. 乐教乐学各关的解(3-10)
  3. 数据分析师只适合男生吗,女生可不可以胜任?
  4. 刚体验完RabbitMQ?一文带你SpringBoot+RabbitMQ方式收发消息
  5. Python3基础教程
  6. Bloom Filter(布隆过滤器)
  7. RDO LOST / loss rdo
  8. RDO和VB数据库编程
  9. 《数据结构与算法》(二十)- 散列表查找
  10. 华南农业大学c语言怎么考,华南农业大学期末考试试卷 C语言考试合集