本文档详细描述本地传感器数据转发工具(本文档简称转发工具)的使用方法以及常见的问题解答。
本文档主要适用于以下工程师:
读者必须具备以下经验和技能:
在本文中可能出现下列标志,它们所代表的含义如下。
本地传感器数据转发工具是MDC平台提供的一款视频/图片/点云数据解析与发布的开发工具,其支持在MDC平台环境或者X86环境中解析本地的激光雷达数据文件(格式pcd),视频数据文件(格式h264,h265,YUV)图片数据文件(格式jpg,jpeg)等6种格式文件,并通过转发工具将消息发布,供上层应用程序调用。
在开发应用的过程中,需要使用开源或第三方的传感器录制数据包中的pcd、视频、图像等数据,MDC平台提供的转发工具可以让用户规避繁琐的数据转换过程,直接通过CM消息的方式订阅工具转发的pcd等文件。
图1展示了转发工具的运行机制。
说明:
- 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环境:在当前目录下执行export LD_LIBRARY_PATH=./lib/。
MDC环境:在任意目录下执行export LD_LIBRARY_PATH=/opt/usr/root/usr/lib/。
使用转发工具前需要进行的环境配置操作包括第三方库的安装、配置交叉编译环境、安装MDS工具等。
MDC 610提供了基于X86环境运行的软件包,无需MDC 610硬件设备即可进行应用程序的开发和调试。MDC X86平台基础包可以实现离线开发应用和调测,可编译、运行MDC 610 Sample和用户自行开发的APP应用程序。
安装方法参见产品文档中《X86平台软件调测指南》的“安装与启停”章节。
在X86环境中运行工具所需要安装的第三方库列表如表1所示。
表 1 第三方库及下载地址
说明: X86环境下H.264与H.265是通过ffmpeg进行解码,MDC系统上是通过vdec进行解码。
用途: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
用途说明:X86安装ffmpeg用于X86解码H.264/H.265。
安装方法:
cd ffmpeg-4.3.4
./configure --enable-shared
make -j12
sudo make install
安装方法:
cd boost_1_65_1
./bootstrap.sh --with-libraries=system,regex,chrono,thread,filesystem,date_time,iostreams
sudo ./b2 install
安装方法:
cd eigen-3.3.7
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ../
make -j12
sudo make install
源码安装方法:
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
处理方法:
新建一个empty.cpp文件。
touch src/cpp/empty.cpp
修改“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库用于解析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第三方库用于解析yaml配置文件。
安装方法:
cd yaml-cpp-yaml-cpp-0.6.3
mkdir build && cd build
cmake ../
make -j12
sudo make install
配置交叉编译环境需要获取与安装MDC SDK软件包和第三方库软件包。
参见《产品文档》中”平台调测与二次开发->编译构建指南->搭建编译环境->安装SDK(Development版本)“章节
安装方法参见产品文档中《编译构建指南》中的“安装SDK”章节。
安装方法参见产品文档中《编译构建指南》中的“安装第三方库”章节。
编译local_sensor_data_sender程序使用的IDE为MDC Development Studio(简称MDS)工具,MDS的安装与使用请参照产品文档《MDC Development Studio 使用指南》。
生成依赖文件需要使用MDC平台的示例包platform_sample,并通过MDS工具进行编译。
打开MDS工具,点击菜单栏的File,选择导入选项"Import"。
在Import界面选择"MDC"下的"Import as a MDC Project"后点击"next"。
在浏览对话框中选择"PLATFORM_Sample"文件夹,点击"next"。
在"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
X86环境与交叉编译的arxml文件配置不一样,参见《X86平台软件调测指南》的“DSHM数据包的回放处理”章节。
在X86环境下将rawbuffer名称修改为UdpData,数据类型CameraDecodedMbufStruct修改为/HuaweiMDC/PlatformServiceInterface/CameraInternalDataMsgDataType/Uint8Vector
右键PLATFORM_Sample示例,选择“Generate From Arxml”。
说明: 接收程序也要进行相应的配置。参见《X86平台软件调测指南》的“DSHM数据包的回放处理”章节。
完成配置arxml后,生成后的文件分别位于PLATFORM_Sample/generate目录与PLATFORM_Sample/outputcfg/MdcADpGeaMachine/camera_a_cm_receive目录。
说明: 上述生成的文件是camera对应的配置文件,lidar对应的配置文件位于 local_sensor_data_sender_x86 /bin/local_sensor_data_sender_x86/LidarCmProcess下
打开MDS工具,将local_sensor_data_sender_x86或local_sensor_data_sender_mdc工程放入到PLATFORM_Sample/modules目录下。
根据环境类型(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"
用MDS工具进行cmake编译,并构建生成可执行文件。
说明: 若需要在发送时保存文件,则在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 运行转发工具。
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 配置文件参数说明
说明:
- 同一个文件目录下建议存放同一种类型的文件,且存在多个文件时,所有文件宽高应保持一致。 若同一个文件目录下放不同类型的文件,接收端只接收与配置文件中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文件夹到local_sensor_data_sender所在目录。
LidarCmProcess目录下的文件中的network值需要替换成当前机器的IP。
进入到LidarCmProcess目录,执行:
sed -i "s/xxx/yyy/g" `grep xxx -rl ./`
xxx表示原IP,yyy表示新IP。
MDC环境不需要拷贝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 运行参数列表
|
|||
说明:
- -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
在通过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
在通过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
在通过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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。