RPLIDAR思岚雷达学习记录--3--rplidar_ros-master修改保存csv格式数据

2023-05-16

rplidar_ros-master

下载rplidar_ros-master包源后在ros工作空间内打开,并编译,详细过程及下载地址见学习记录–1

本文介绍的过于繁琐,考虑到还有一些新接触到ros的同学,大佬勿怪

在这里插入图片描述
下载的源码编译后应该没有build文件夹,我在当前目录下在进行编译了一遍所以才出现build文件,launch文件夹内部存放一些我们可以调用的launch文件,rviz就一个rviz配置文件,scripts这个文件我也不知道干啥用的,应该时提供一些规则,sdk是官方提供的sdk我们可以直接调用,不用细看内部代码。后面的src内有两个cpp文件,分别为client.cpp和node.cpp。client中主要定义了一个输出角度和距离信息的scancallback函数:


#include "ros/ros.h"
#include "sensor_msgs/LaserScan.h"
#define RAD2DEG(x) ((x)*180./M_PI)

void scanCallback(const sensor_msgs::LaserScan::ConstPtr& scan)
{
    int count = scan->scan_time / scan->time_increment;//一圈359个点
    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));//输出信息
    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]);//输出角度和距离数据
    }
}

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

而node.cpp中对雷达的工作参数,状态等进行设定,具体可参考文章进行学习。

根据学习记录1我们发现可以通过终端读取到角度和距离数据,其在client函数中主要是下列几行代码:

 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]);//输出角度和距离数据

其中degerr为角度数据,scan->ranges为距离数据,可以在此处添加保存命令对数据进行保存。其中scancallback函数代码作如下修改:

#include "ros/ros.h"
#include "sensor_msgs/LaserScan.h"
/**/#include "fstream"
/**/#include "string"
#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)); 
    /**/ofstream oFile;
    /**/oFile.open("leidadate.csv",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();
}
.........

主函数不需要变动,修改内容已经用/**/进行标注,增加了fstream、string头文件、引入了一个std工作空间,使用ofile命令打开一个csv格式文件,并对数据进行保存

/**/oFile<< degree <<","<< scan->ranges[i] <<endl;

其中“,”为换列,需要endl结尾。然后运行学习记录1中命令后,会生成leidadate.csv格式文件,如果需要txt文件,可以按照类似方式进行修改。

在这里插入图片描述

测试后发现该方法后面的数据会覆盖前面的数据,无论运行多久,leidadate文件中数据只有359个数据,因为每次都通过open打开相同的文件,可以通过增加一个时间戳,并将文件名命名为动态文件名,这样即可保存到运行期间所有的激光雷达数据。由于ros系统还不够熟悉,这部分代码后续更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RPLIDAR思岚雷达学习记录--3--rplidar_ros-master修改保存csv格式数据 的相关文章

随机推荐

  • emWin - Movie篇

    STemWin版本 xff1a 544 xff08 ST购买了emWin的license xff0c 可以在ST芯片中使用emWin工具包 xff0c 就叫STemWin xff09 emWin开发工具包可以转换JPG BMP GIF等各种
  • 芯片端子的多路复用

    嵌入式软件的开发 xff0c 经常要和芯片打交道 xff0c 和个人电脑的通用平台的CPU使用X86或X64架构不同 xff0c 嵌入式电子产品使用的主控芯片是各种各样的 xff0c 从8051单片机 xff0c 到ARM Cortex M
  • 小说三要素和六要素

    小说是以刻画人物为中心 xff0c 通过完整的故事情节和具体的环境描写反映社会生活的一种文学体裁 或通过情节的展开和环境的渲染反映社会生活的一种文学体裁 小说有三个要素 xff1a 人物形象 故事情节 典型环境 xff08 自然环境和社会环
  • POV写作手法

    POV xff08 Point of View xff09 xff0c 一种写作手法 xff0c 即 视点人物写作手法 xff0c 在叙述同一件事可以自由选取最丰厚的角度 xff0c 大大加强了叙述的灵活性 xff0c 在讲述故事的同时作者
  • 工具说明书 - 搜索引擎推荐

    Yandex 俄罗斯人用的多 Yet Another Indexer 34 xff08 另一个索引 xff09 把定位改到美国 xff0c 再把搜索设置为无限制 www yandex com CC Search 查一些版权免费的图片和音视频
  • 嵌入式 - 在嵌入式软件开发中使用stdint.h头文件

    在嵌入式系统软件开发上 xff0c 对不同的平台 xff0c 其每个机器字长都可能不同 在这个硬件平台上使用int xff0c 可能是4个字节 xff0c 你做一个很大整数的运算也没问题 但换个硬件平台 xff0c int可能变成了2个字节
  • 编程参考 - C语言中将字符串转换为整数

    C语言 xff0c 主要有两种方法可以将字符串转为整数 xff1a atoi 和 strtol 1 xff0c atoi Syntax int atoi const char str 包含的头文件是 xff1a stdlib h 给定字符串
  • 工具及方法 - Excel插件XLTools

    立即开始使用XLTools XLTools是一个功能强大的Excel插件 xff0c 专为商业用户设计 它将帮助您在Excel中更快 更容易地准备数据 跟踪变化和实现任务自动化 无论您是刚刚开始免费试用还是购买了终身许可证 xff0c 本介
  • Linux - Ubuntu里安装Python的包

    在Ubuntu中 xff0c apt install python xff0c 默认是安装python2 要安装python3 要使用apt install python3 安装后运行python python2 xff0c 调用的都是py
  • CURL访问HTTPS证书登录

    curl cacert test crt https abc com test crt指服务端公钥 若服务端要求客户端认证 xff0c 需要将pfx证书转换成pem格式 openssl pkcs12 clcerts nokeys in ce
  • 司空见惯 - 体彩中奖交多少税

    体彩中奖交多少税 彩票只有大盘彩如双色球 大乐透等才在中奖1万元以上的情况下交20 的意外所得税 xff0c 小盘彩如3D 排列三等无论中多少都是不用交税的 对于中奖金额在1万元以下的 xff0c 是可以享受免征个人所得税福利政策的 对于中
  • 司空见惯 - 一树春风

    一树春风有两般 南枝向暖北枝寒 现前一段西来意 一片西飞一片东 xff08 一片东来一片西 xff09 了元 一树春风 了元是谁 xff1f 了元 xff0c 字觉老 xff0c 号佛印 xff0c 浮梁王氏子 北宋著名诗僧 xff0c 禅
  • 知识点滴 - 世界化工企业百强

    2022年7月25日 xff0c 美国 化学与工程新闻 xff08 C amp EN xff09 发布2022年全球化工企业50强名单 2022 09 21日附近 xff0c 国际石化市场信息服务商安迅思ICIS发布了最新世界化工企业100
  • 工具及方法 - 安装播放器pot player

    官网下载 xff1a potplayer daum net 可能国内访问有问题 xff0c 还有一个网站 xff1a Global Potplayer 或者为了纯净安全些 xff0c 找下国外可下载网站 xff1a PotPlayer 23
  • cpprestsdk应用实例

    RESTful REST全称是Representational State Transfer xff0c 通常译为表述性状态转移 xff0c 是一种网络应用程序的设计风格和开发方式 它首次出现在2000年Roy Fielding的博士论文中
  • VS2013中如何安装NuGet插件

    1 点击菜单栏的工具 gt 拓展和更新 2 点击左边的联机 xff0c 在右边的输入框中输入NuGet Package Manager xff0c 在中间栏中显示结果 xff0c 点击安装按钮即可完成安装 我这里已经安装过了 xff0c 所
  • vs2013中如何安装OpencvSharp并使用

    1 使用本方法前请确保你的vs已经安装了NuGet插件 xff0c 如果没有安装可以根据下面链接方法进行安装 VS2013中如何安装NuGet插件 2 右击你的项目 xff0c 选择 管理NuGet工具包 3 在弹出的窗口左边点击 联机 x
  • I2C 基础原理详解

    今天来学习下I2C通信 I2C Inter Intergrated Circuit 指的是 IC Intergrated Circuit 之间的 Inter 通信方式 如上图所以有很多的周边设备都是用I2C通信方式进行通信的 I2C Int
  • 简单一招破解网站内容不能复制+图片不能右击(naver blog有效)

    很多网站为了保护权利设置了内容不可复制 xff0c 并且图片右击无法获取图片链接或者是下载图片 xff0c 网上看了很多方法 xff0c 获取针对别的网站有效 xff0c 但是韩国的naver blog不行 今天一大早又谷歌了一下 xff0
  • RPLIDAR思岚雷达学习记录--3--rplidar_ros-master修改保存csv格式数据

    rplidar ros master 下载rplidar ros master包源后在ros工作空间内打开 xff0c 并编译 xff0c 详细过程及下载地址见学习记录 1 本文介绍的过于繁琐 xff0c 考虑到还有一些新接触到ros的同学