# local_sensor_data_sender **Repository Path**: liumengProject/local_sensor_data_sender ## Basic Information - **Project Name**: local_sensor_data_sender - **Description**: 传感器本地数据仿真 支持在MDC环境下,读取pcd文件,视频文件,并以cm的消息将其转发出来 支持在X86环境下,读取pcd文件,视频文件,并以cm的消息将其转发出来 - **Primary Language**: C++ - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2023-07-07 - **Last Updated**: 2023-07-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 前言 ## 概述 本文档详细描述本地传感器数据转发工具(本文档简称转发工具)的使用方法以及常见的问题解答。 ## 读者对象 本文档主要适用于以下工程师: - 智能驾驶应用研发工程师 - 生态伙伴技术支持工程师 - 华为技术支持工程师 - 维护工程师 读者必须具备以下经验和技能: - 熟悉AUTOSAR规范。 - 熟悉MDC智能驾驶软件系统。 - 熟悉华为MDC Development Studio(MDS)工具的使用。 ## 符号约定 在本文中可能出现下列标志,它们所代表的含义如下。

符号

说明

表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。

表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。

表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。

用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。

“须知”不涉及人身伤害。

对正文中重点信息的补充说明。

“说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。

## 修改记录

文档版本

发布日期

修改说明

01

2022-09-30

第一次正式发布。

# 概述 本地传感器数据转发工具是MDC平台提供的一款视频/图片/点云数据解析与发布的开发工具,其支持在MDC平台环境或者X86环境中解析本地的激光雷达数据文件(格式pcd),视频数据文件(格式h264,h265,YUV)图片数据文件(格式jpg,jpeg)等6种格式文件,并通过转发工具将消息发布,供上层应用程序调用。 ## 应用场景 在开发应用的过程中,需要使用开源或第三方的传感器录制数据包中的pcd、视频、图像等数据,MDC平台提供的转发工具可以让用户规避繁琐的数据转换过程,直接通过CM消息的方式订阅工具转发的pcd等文件。 ## 功能介绍 - 读取jpg图片文件并解析成yuv420sp通过CM转发。 - 读取jpeg图片文件并解析成yuv420sp通过CM转发。 - 读取yuv420sp视频通过CM转发。 - 读取h264视频文件并解析成yuv420sp通过CM转发。 - 读取h265视频文件并解析成yuv420sp通过CM转发。 - 在转发视频/图片时分CameraDecodedMbufStruct和CameraPublishImageDataStruct两种结构。 - 在X86环境下解析rosbag中的sensor\_msg/pointcloud2数据类型保存成pcd格式文件。 - 在X86环境下解析rosbag中的sensor\_msgs/Image数据类型保存成jpg格式文件。 - 读取pcd点云文件通过CM以简化版本或者标准版本转发。 ## 运行机制 [图1](#fig35261514193819)展示了转发工具的运行机制。 **图 1** 本地传感器数据转发工具运行机制 ![](figures/本地传感器数据转发工具运行机制.png "本地传感器数据转发工具运行机制") >![](public_sys-resources/icon-note.gif) **说明:** >- rosbag需要先通过rosbag2ImageAndPcd.py解析转换成jpg或pcd文件,再将解析完成的jpg或pcd文件通过本地传感器数据转发工具进行转发。 >- rosbag2ImageAndPcd.py只支持将rosbag中topics为sensor\_msgs/PointCloud2和sensor\_msgs/Image解析成pcd和jpg文件。 >- 使用rosbag2ImageAndPcd.py需要提前获得待解析的rosbag中的sensor\_msgs/PointCloud2和sensor\_msgs/Image的topics名称,将其写入到rosbag2ImageAndPcd.py文件中的pcd\_topic\_list和img\_topic\_list中,如 > ``` > extractor.extract_pcd_img(pcd_topic_list=['/kitti/velo/pointcloud'], > img_topic_list=['/kitti/camera_color_left/image_raw']) > ``` ## 环境要求 - 操作系统:Ubuntu18.04或者MDC 610系统环境。 - 需要获取MDC平台产品文档包,便于查询MDC平台相关信息。 - 运行环境中需要安装相应的MDC工具、SDK包、示例工程软件包以及三方库文件。 - SDK包,示例工程软件包与mdc设备的版本均需配套,mdc设备可通过MDC Installer进行升级至相应的版本。mdc installer工具使用可参考产品文档中的工具指南下的MDC Installer使用指南 **表 1** 所需SDK及工具列表

名称

文件名

备注

X86环境源码路径

https://gitee.com/mdc_opensource/local_sensor_data_sender/ local_sensor_data_sender_x86

X86环境下的转发工具源码文件。

MDC环境源码路径

https://gitee.com/mdc_opensource/local_sensor_data_sender/ local_sensor_data_sender_mdc

MDC环境下的转发工具源码文件。

MDS工具

MDC_Development_Studio-{version}-Ubuntu{osversion}.tar.gz

需根据开发环境Ubuntu版本选择对应版本的软件包。

MMC工具

MDC_Manifest_Configurator-{version}-Ubuntu{osversion}.tar.gz

需根据开发环境Ubuntu版本选择对应版本的软件包。

MDC 示例工程软件包

MDC_Sample-{version}.tar.gz

-

交叉编译SDK包

MDC_SDK-{version}-Ubuntu{osversion}-gcc-{type}.tar.gz

MDC_SDK-{version}-Ubuntu{osversion}-llvm-{type}.tar.gz

需根据开发环境Ubuntu版本和编译器类型选择对应版本的软件包。

X86平台调测包

MDC_X86-{version}-Ubuntu{osversion}-gcc.tar.gz

需根据开发环境Ubuntu版本选择对应版本的软件包。

单板升级包

MDC_SDK-{version}-Ubuntu{osversion}-gcc-{type}.tar.gz

MDC_Upgrade_Package-{version}-llvm-{type}.tar.gz

需根据开发环境Ubuntu版本和编译器类型选择对应版本的软件包。

交叉编译第三方库

MDC_AOS_rpmlist-{version}-gcc-{type}.tar.gz

MDC_AOS_rpmlist-{version}-llvm-{type}.tar.gz

需根据开发环境Ubuntu版本和编译器类型选择对应版本的软件包。

# 工具使用流程 1. 进入转发工具所在目录。 2. 创建需要转发文件的目录,并放置待待转发的传感器数据文件。 3. [配置Yaml文件](配置Yaml文件.md)。 4. 设置环境变量,X86环境:在当前目录下执行**export LD\_LIBRARY\_PATH=./lib/**。 MDC环境:在任意目录下执行**export LD\_LIBRARY\_PATH=/opt/usr/root/usr/lib/**。 5. [运行转发工具](运行转发工具.md)。 # 环境配置 使用转发工具前需要进行的环境配置操作包括第三方库的安装、配置交叉编译环境、安装MDS工具等。 ## X86环境搭建 ## X86平台软件调测 MDC 610提供了基于X86环境运行的软件包,无需MDC 610硬件设备即可进行应用程序的开发和调试。MDC X86平台基础包可以实现离线开发应用和调测,可编译、运行MDC 610 Sample和用户自行开发的APP应用程序。 安装方法参见产品文档中《X86平台软件调测指南》的“安装与启停”章节。 ## X86环境第三方库获取与安装 在X86环境中运行工具所需要安装的第三方库列表如[表1](#table74621423111614)所示。 **表 1** 第三方库及下载地址

opencv-4.5.2

https://codeload.github.com/opencv/opencv/zip/refs/tags/4.5.2

ffmpeg-4.3.4

https://ffmpeg.org/releases/ffmpeg-4.3.4.tar.xz

boost-1.65.1

https://www.boost.org/users/history/version_1_65_1.html

eigen-3.3.7

https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.gz

flann

https://codeload.github.com/flann-lib/flann/zip/refs/heads/master

pcl-1.11.1

https://codeload.github.com/PointCloudLibrary/pcl/tar.gz/refs/tags/pcl-1.11.1

yaml-cpp-0.6.3

https://codeload.github.com/jbeder/yaml-cpp/tar.gz/refs/tags/yaml-cpp-0.6.3

>![](public_sys-resources/icon-note.gif) **说明:** >X86环境下H.264与H.265是通过ffmpeg进行解码,MDC系统上是通过vdec进行解码。 ## opencv-4.5.2 - 用途:opencv第三方库将rgb格式的jpg转为yuv420sp。 - 安装方法 **cd opencv-4.5.2** **mkdir build && cd build** **cmake -DCMAKE\_CXX\_FLAGS=-s -DCMAKE\_BUILD\_TYPE=Release -DCMAKE\_SHARED\_LINKER\_FLAGS=-Wl,--build-id=none -DOPENCV\_VCSVERSION=mviz\_release -DOPENCV\_PYTHON\_SKIP\_DETECTION=true -DWITH\_IPP=OFF -DWITH\_ADE=OFF -DCMAKE\_SKIP\_INSTALL\_RPATH=true -DCMAKE\_SKIP\_RPATH=true -DCMAKE\_SHARED\_LINKER\_FLAGS="-Wl,-z,now" ..** **make -j12** **sudo make install** ## ffmpeg-4.3.4 - 用途说明:X86安装ffmpeg用于X86解码H.264/H.265。 - 安装方法: **cd ffmpeg-4.3.4** **./configure --enable-shared** **make -j12** **sudo make install** ## boost-1.65.1 安装方法: **cd boost\_1\_65\_1** **./bootstrap.sh --with-libraries=system,regex,chrono,thread,filesystem,date\_time,iostreams** **sudo ./b2 install** ## eigen-3.3.7 安装方法: **cd eigen-3.3.7** **mkdir build && cd build** **cmake -DCMAKE\_BUILD\_TYPE=Release ../** **make -j12** **sudo make install** ## flann - 源码安装方法: **cd flann-master** **mkdir build && cd build** **cmake -DCMAKE\_BUILD\_TYPE=Release ../** **make -j12** **sudo make install** - 编译异常处理 若在编译flann时显示以下错误: ``` CMake Eroor at src/cpp/CMakeLists.txt:91 (add_library): No SOURCES given to target: flann ``` 或者 ``` CMake Eroor at src/cpp/CMakeLists.txt:33 (add_library): No SOURCES given to target: flann_cpp ``` 处理方法: 1. 新建一个empty.cpp文件。 **touch src/cpp/empty.cpp** 2. 修改“src/cpp/CMakeList.txt“文件。 第33行:将`add_library(flann_cpp SHARED "")` 修改为`add_library(flann_cpp SHARED empty.cpp)` 第91行:将`add_library(flann SHARED "")` 修改为 `add_library(flann SHARED empty.cpp)` 若源码安装还是失败,可尝试使用下面的“在线安装方法” - 在线安装方法: sudo apt install libflann-dev ## pcl-1.11.1 - 用途说明:pcl库用于解析PCD文件。 - 安装方法 **cd pcl-pcl-1.11.1** **mkdir build && cd build** **cmake ../ -DBUILD\_SHARED\_LIBS:BOOL=ON -DWITH\_VTK=FALSE -DWITH\_OPENGL=FALSE -DWITH\_DOCS=OFF -DWITH\_CUDA=OFF -DWITH\_TUTORIALS=ON -DBUILD\_apps=OFF -DBUILD\_global\_tests=OFF -DLIB-INSTALL\_DIR=lib64 -DPCL\_ENABLE\_SSE=OFF -DBUILD\_documentation=OFF -DCMAKE\_SKIP\_RPATH=ON -DBUILD\_TESTS=OFF -DBUILD\_examples=OFF -DBUILD\_features=OFF -DBUILD\_filters=OFF -DBUILD\_genmetry=OFF -DBUILD\_io=ON -DBUILD\_kdtree=OFF -DBUILD\_keypoints=OFF -DBUILD\_octree=ON -DBUILD\_registration=OFF -DBUILD\_sample\_consensus=OFF -DBUILD\_search=OFF -DBUILD\_segmentation=OFF -DBUILD\_tools=OFF -DBUILD\_tracking=OFF -DBUILD\_visualization=OFF -DBUILD\_apps\_cloud\_composer=OFF -DBUILD\_apps\_modeler=OFF -DBUILD\_apps\_point\_cloud\_editor=OFF -DBUILD\_apps\_in\_hand\_scanner=OFF** **make -j12** **sudo make install** ## yaml-cpp-0.6.3 - 用途说明:yaml第三方库用于解析yaml配置文件。 - 安装方法: **cd yaml-cpp-yaml-cpp-0.6.3** **mkdir build && cd build** **cmake ../** **make -j12** **sudo make install** ## 配置MDC交叉编译环境 配置交叉编译环境需要获取与安装MDC SDK软件包和第三方库软件包。 参见《产品文档》中”平台调测与二次开发-\>编译构建指南-\>搭建编译环境-\>安装SDK(Development版本)“章节 ## 安装MDC SDK 安装方法参见产品文档中《编译构建指南》中的“安装SDK”章节。 ## 交叉编译环境安装第三方库 安装方法参见产品文档中《编译构建指南》中的“安装第三方库”章节。 ## MDC Development Studio工具安装 编译[local\_sensor\_data\_sender](https://gitee.com/luronggui/cm_x86/tree/master/local_sensor_data_sender)程序使用的IDE为MDC Development Studio(简称MDS)工具,MDS的安装与使用请参照产品文档《MDC Development Studio 使用指南》。 ## 生成依赖文件 生成依赖文件需要使用MDC平台的示例包platform\_sample,并通过MDS工具进行编译。 ## 前提条件 - 已获取MDC\_Sample-_\{version\}_.tar.gz示例工程包。 - 解压MDC\_Sample-_\{version\}_.tar.gz包,复制出PLATFORM\_Sample文件夹,为了减少编译时间,建议删除不需要的文件。 - 删除modules下除了CMakeLists.txt的其他文件。 ## 操作步骤 1. 打开MDS工具,点击菜单栏的File,选择导入选项"Import"。 2. 在Import界面选择"MDC"下的"Import as a MDC Project"后点击"next"。 3. 在浏览对话框中选择"PLATFORM\_Sample"文件夹,点击"next"。 4. 在"Import as MDC Project"对话框中配置SDK,在SDK对应的下拉菜单中选择相应的SDK。 交叉编译选择"clang-aos\_gea-aarch64-/usr/local/mdc\_sdk\_llvm/dp\_gea/mdc\_cross\_compiler",X86环境编译选择"gcc-linux-x86-/opt/platform/mdc\_platform"。若在x86平台下生成依赖文件,请先执行步骤5与步骤6。若是交叉编译环境,则直接执行步骤7 5. X86环境与交叉编译的arxml文件配置不一样,参见《X86平台软件调测指南》的“DSHM数据包的回放处理”章节。 6. 在X86环境下将rawbuffer名称修改为UdpData,数据类型CameraDecodedMbufStruct修改为/HuaweiMDC/PlatformServiceInterface/CameraInternalDataMsgDataType/Uint8Vector 7. 右键PLATFORM\_Sample示例,选择“Generate From Arxml”。 >![](public_sys-resources/icon-note.gif) **说明:** >接收程序也要进行相应的配置。参见《X86平台软件调测指南》的“DSHM数据包的回放处理”章节。 8. 完成配置arxml后,生成后的文件分别位于PLATFORM\_Sample/generate目录与PLATFORM\_Sample/outputcfg/MdcADpGeaMachine/camera\_a\_cm\_receive目录。 >![](public_sys-resources/icon-note.gif) **说明:** >上述生成的文件是camera对应的配置文件,lidar对应的配置文件位于 local\_sensor\_data\_sender\_x86 /bin/local\_sensor\_data\_sender\_x86/LidarCmProcess下 ## local\_sensor\_data\_sender工程编译 1. 打开MDS工具,将[local\_sensor\_data\_sender\_x86](https://gitee.com/liuxiangkun123/local_sensor_data_sender/tree/master/local_sensor_data_sender_x86)或[local\_sensor\_data\_sender\_mdc](https://gitee.com/liuxiangkun123/local_sensor_data_sender/tree/master/local_sensor_data_sender_mdc)工程放入到PLATFORM\_Sample/modules目录下。 2. 根据环境类型(MDC和X86)需要选择相应的sdk。 在MSDS工具上,右键项目PLATFORM\_Sample,在”Change SDK”菜单上,交叉编译选择"clang-aos\_gea-aarch64-/usr/local/mdc\_sdk\_llvm/dp\_gea/mdc\_cross\_compiler",X86环境编译选择"gcc-linux-x86-/opt/platform/mdc\_platform" 3. 用MDS工具进行cmake编译,并构建生成可执行文件。 >![](public_sys-resources/icon-note.gif) **说明:** >若需要在发送时保存文件,则在src/CMakeLists.txt下修改“OPTION\(SAVE\_SENDER\_FILE\_MACRO "Build the project using macro,save local file set as ON,otherwise set OFF" OFF\)”中的SAVE\_SENDER\_FILE\_MACRO开关,将OFF修改成ON,再进行编译程序。 ## 运行程序 详见章节5 [运行转发工具](运行转发工具.md)。 # 配置Yaml文件 Yaml配置文件每种数据格式的配置项主要包含数据存放路径、实例ID,文件高度和宽度。 配置文件示例: ``` - dir: "image" instanceId: 21 width: 1200 height: 800 - dir: "image1" instanceId: 22 width: 1200 height: 800 - dir: "video" instanceId: 23 width: 480 height: 270 - dir: "yuv" instanceId: 24 width: 1200 height: 800 - dir: "pcd" instanceId: 7 width: 0 height: 0 ``` **表 1** 配置文件参数说明

字段

说明

dir

转发数据文件所在路径的目录名称。在可执行程序同一级目录下。

instanceId

转发数据类型的实例值:

  • jpg,jpeg,yuv,h264,h265对应instanceId范围[21,35]

    或[1021,1034]

  • pcd对应instanceId范围[3,7]

height

转发文件高度。

width

转发文件宽度。

>![](public_sys-resources/icon-note.gif) **说明:** >- 同一个文件目录下建议存放同一种类型的文件,且存在多个文件时,所有文件宽高应保持一致。 > 若同一个文件目录下放不同类型的文件,接收端只接收与配置文件中instancedId相同的目录下的转发文件。 >- pcd文件不涉及宽高,但是由于yaml格式要求宽高参数不能为空,建议都设置为0。 >- jpg和jpeg文件只接受宽高为偶数的图片,yaml对应宽高参数应与图片实际宽高保持一致。 >- Yaml配置文件可存放在任意位置,建议放在与可执行程序同一级目录下,若放在其他位置,执行时指定yaml路径即可,如:“./local\_sensor\_data\_sender -f jpeg -c /dir/config.yaml“ # 运行转发工具 在local\_sensor\_data\_sender程序路径下执行local\_sensor\_data\_sender转发程序。 ## 准备工作 - 配置环境变量。 X86环境:在当前目录下执行**export LD\_LIBRARY\_PATH=./lib/** MDC环境:在任意目录下执行**export LD\_LIBRARY\_PATH=/opt/usr/root/usr/lib/** - X86环境中需要的准备工作 - 拷贝[LidarCmProcess](https://gitee.com/liuxiangkun123/local_sensor_data_sender/tree/master/local_sensor_data_sender_x86/bin/LidarCmProcess)文件夹到local\_sensor\_data\_sender所在目录。 - [LidarCmProcess](https://gitee.com/liuxiangkun123/local_sensor_data_sender/tree/master/local_sensor_data_sender_x86/bin/LidarCmProcess)目录下的文件中的network值需要替换成当前机器的IP。 进入到[LidarCmProcess](https://gitee.com/liuxiangkun123/local_sensor_data_sender/tree/master/local_sensor_data_sender_x86/bin/LidarCmProcess)目录,执行: **sed -i "s/xxx/yyy/g" \`grep xxx -rl ./\`** xxx表示原IP,yyy表示新IP。 - MDC环境不需要拷贝[LidarCmProcess](https://gitee.com/liuxiangkun123/local_sensor_data_sender/tree/master/local_sensor_data_sender_x86/bin/LidarCmProcess)文件夹,直接读取MDC系统下的“/opt/platform/mdc\_platform/manual\_service/lidar\_a\_cm/etc/LidarCmProcess“和“/opt/platform/mdc\_platform/manual\_service/camera\_a\_cm/etc/CameraProcess“配置。 ## 运行参数 执行前需了解运行的参数。 **表 1** 运行参数列表

参数

是否必填

取值

说明

h

-

获取帮助信息,单独使用且不用输入任何值。

f

jpg,jpeg,yuv,h264,h265或pcd

指定转发的数据类型。

m

decoded,image,standard或simple

  • 当转发jpg,jpeg,yuv,h264,h265数据时,m取值范围:decoded,image,不设则默认decoded。
  • 当转发pcd数据时,m取值范围:standard,simple,不设置则默认standard。

c

配置文件名

指定Yaml配置文件名。

t

yyyy-MM-dd HH:mm:ss

指定第一次发送的时间。

r

(0,100]

指定发送频率(Hz)。

l

-

设置是否需要循环发送。

>![](public_sys-resources/icon-note.gif) **说明:** >- -c参数后输入yaml配置文件名称,配置文件若与转发工具在同一路径下,无需指定路径,否则需指定配置文件的路径。 >- 转发数据类型为jpg,jpeg,yuv,h264,h265数据时,MDC环境下:若m为decoded,则instanceId范围\[21,35\],若m为image,则instanceId范围\[1021,1034\]。X86环境下instanceId范围\[21,35\]。 >- -f参数后只支持输入一种数据类型。 ## 运行示例 - 获取帮助信息。 **./local\_sensor\_data\_sender -h** ``` --usage: ./local_sensor_data_sender -f [fileType] -c [configFile] -m [transMode] for example:./local_sensor_data_sender -f jpg -c config.yaml -m decoded -r 30 --option: -f:[jpg/jpeg/yuv/h264/h265/pcd], requirement -c:[configFile], requirement -m:[decoded/image/simple/standard], option -t:[yyyy-MM-dd HH:mm:ss], option -r:[hz], option -l, for loop, option -h, for help, option ``` - 通过local\_sensor\_data\_sender解析并转发jpg文件。 **./local\_sensor\_data\_sender -f jpg -c config.yaml** ``` begin to parse config file: config.yaml Parse config file finished. parse finished. [main] Image sender Configs: dir instanceId width height xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx image 21 1200 800 image1 22 1200 800 video 23 480 270 yuv 24 1200 800 pcd 7 0 0 dir :image has no jpg file dir :video has no jpg file dir :yuv has no jpg file dir :pcd has no jpg file Begin register normal image sender. Begin to Register to publish instance id:22 Publish to instance id:22 succeed! Finished to register normal image sender. dir : image1 postfix :jpg Begin send image. seq:0 frameID:sender_22 path:image1/test1.jpg Begin send image. seq:0 frameID:sender_22 path:image1/test2.jpg ``` # FAQ ## 如何处理报错“-f File type is error:\*\*\*”或“'-f File type' can not be empty!” ## 问题现象 在通过local\_sensor\_data\_sender解析并转发文件时,出现报错:“-f File type is error:\*\*\*”或“'-f File type' can not be empty!”,应该如何处理? ## 原因分析 在通过local\_sensor\_data\_sender解析并转发文件时,-f参数为必填项,且有效值为:jpg,jpeg,yuv,h264,h265或pcd,当-f参数为空时出现报错信息:“'-f File type' can not be empty!”,-f参数为异常值时会出现报错信息:“-f File type is error:\*\*\*”。 ## 处理方式 输入有效的-f参数,例如: **./local\_sensor\_data\_sender -f jpg -c config.yaml** ## 如何处理报错“\*\*\* file is not exist!”或“'-c Config file' can not be empty!” ## 问题现象 在通过local\_sensor\_data\_sender解析并转发文件时,出现报错:“\*\*\* file is not exist!”或“'-c Config file' can not be empty!”,应该如何处理? ## 原因分析 在通过local\_sensor\_data\_sender解析并转发文件时,-c参数为必填项,且有效值为:可执行程序目录下存在的Yaml配置文件名,当-c参数为空时出现报错信息:'-c Config file' can not be empty!,-c参数为异常值时会出现报错信息:“\*\*\* file is not exist!”。 ## 处理方式 输入有效的-c参数,例如: **./local\_sensor\_data\_sender -f jpg -c config.yaml** ## 如何处理报错“-r frequency must be \(0 < frequency <= 100\)” ## 问题现象 在通过local\_sensor\_data\_sender解析并转发文件时,出现报错:“-r frequency must be \(0 < frequency <= 100\)”,应该如何处理? ## 原因分析 在通过local\_sensor\_data\_sender解析并转发文件时,-r参数有效值为:(0,100\],当-r参数为异常值时出现报错信息:“-r frequency must be \(0 < frequency <= 100\)”。 ## 处理方式 输入有效的-r参数,例如: **./local\_sensor\_data\_sender -f jpg -c config.yaml -r 30**