Linux下eCal测试计划及进度记录

news/2024/9/19 12:23:30/文章来源:https://www.cnblogs.com/xcywt/p/18413954

完整的源代码包:

# 安装依赖
sudo apt-get install git cmake doxygen graphviz build-essential zlib1g-dev
sudo apt-get install libhdf5-dev libprotobuf-dev libprotoc-dev protobuf-compiler 
sudo apt-get install libcurl4-openssl-dev libqwt-qt5-dev libyaml-cpp-dev# 解压
tar -xzf dros_ecal_all_no_git.tar.gz# 编译
# Ubuntu16.04上需要升级cmake,到3.16.0及以上版本
cd dros_ecal_all_no_git
mkdir build
cmake ..
make -j4
 

下面是完整源码下载及安装步骤:ecal5.12.0

git clone https://github.com/eclipse-ecal/ecal.git
cd ecal
git checkout v5.12.0
git submodule init# 这一步耗时会有点长,有些可能需要多次尝试才成功
# 若一直不成功,可以跳过,等cmake报错时根据报错的提示手动处理,见下文cmake报错的处理
git submodule update# 如果出现qtbase5-dev依赖报错,可以不安装qtbase5-dev
sudo apt-get install git cmake doxygen graphviz build-essential zlib1g-dev qtbase5-dev
sudo apt-get install libhdf5-dev libprotobuf-dev libprotoc-dev protobuf-compiler 
sudo apt-get install libcurl4-openssl-dev libqwt-qt5-dev libyaml-cpp-dev# 进CMakeLists.txt
# 63行下增加一行,内容: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
# 72行, HAS_QT5选项改为OFF
# 76行, HAS_FTXUI选项改为OFF, 这个依赖C++17,Ubuntu16.04上编不过
# 115行, ECAL_THIRDPARTY_BUILD_PROTOBUF选项改为ON# Ubuntu16.04上需要升级cmake,到3.16.0及以上版本# protobuf 切换到3.14.0版本
cd thirdparty/protobuf
git checkout v3.14.0
cd ../..# asio 切换到1.12.1版本
cd thirdparty/asio
git checkout asio-1-12-1
cd ../..
mkdir build
cd build
cmake .. 
make -j4# cmake报错缺少的thirdparty中的模块
# 直接进thirdparty,先删除对应模块的文件夹,然后从github上手动clone对应的工程代码# demo 测试
# 打开一个终端
cd ecal/build/bin
./ecal_sample_person_snd# 打开另一个终端
cd ecal/build/bin
./ecal_sample_person_rec
 
 

附:ecal5.12.0 thirdparty各工程原依赖版本

# ecal-5.12.0 thirdparty各工程默认依赖版本# asio: v1.24.0,            commit-147f722
# curl: v7.81.0,            commit-801bd51
# finetftp-server:          commit-9ff999d
# ftxui: v4.0.0,            commit-d301fab
# googletest: v1.11.0,      commit-e2239ee
# hdf5:                     commit-eaebce0
# libssh2:                  commit-159d4c8
# protobuf: v3.11.4         commit-d0bfd52
# recycle:                  commit-c542570
# simpleini: v4.19          commit-9b3ed7e
# spdlog: v1.11.0           commit-ad0e89c
# tclap: v1.2.4             commit-349170a
# tcp_pubsub: v1.0.2        commit-f59da78
# termcolor:                commit-b3cb0f3
# tinyxml2: v9.0.0          commit-1dee28e                 
# udpcap:                   commit-07bede4
# yaml-cpp:                 commit-c73ee34
# zlib: v1.2.11             commit-cacf7f1

 

自带工具使用笔记:

工具在dros/thirdparty/ecal/bin/文件夹下

ecal_mon_cli:

# 显示所有的topic
./ecal_mon_cli -l
# 对某个string_msg 发布消息
./ecal_mon_cli -m "msg" -p topic_name
# 显示某个topic的占用带宽
./ecal_mon_cli -b topic_name

ecal_rec:

# 采集数据,-r duration 表示采集时长为 duration秒,-d rec_dir 指定数据保存目录
# 会自动在rec_dir下新建以时间戳开头的文件夹,保存数据
./ecal_rec -r duration(sec) -d rec_dir# 黑名单选项, list格式用逗号分隔, eg: "Topic1,Topic2"
--blacklist <list>
# 白名单选项, list格式用逗号分隔, eg: "Topic1,Topic2"
--whitelist <list>

一些细节点:

  • Subscriber初始化线程不安全,多线程并行初始化Subscriber会崩溃,貌似和初始化时一些全局变量有关
    • 复现方式:
      • 主线程中在没有初始化任何Subscriber的情况下,连续启动多个子线程,每个子线程一进入就进行各自的Subscriber初始化,会在第二个子线程的Subscriber初始化里头挂掉,如下图
  • 避免方式:
    • 在开启任何子线程之前,先在主线程初始化一个Subscriber
    • 或者,在第一个子线程开启后sleep数百毫秒
  • protobuf::message 不能循环修改和发送,否则会有内存泄漏
    • 复现方式:
    • protobuf_publisher pub;
      lidar_scan_message msg;
      Loop:add a point to msg;pub.Send(msg);
  • 避免方式:
  • protobuf_publisher pub;
    Loop:lidar_scan_message msg;add points to msg;pub.Send(msg);


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/799197.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

闯关提交01

任务:完成SSH连接与端口映射并运行 hello_world.py

Vue3.5中解构props,让父子组件通信更加丝滑

前言 在Vue3.5版本中响应式 Props 解构终于正式转正了,这个功能之前一直是试验性的。这篇文章来带你搞清楚,一个String类型的props经过解构后明明应该是一个常量了,为什么还没丢失响应式呢?本文中使用的Vue版本为欧阳写文章时的最新版Vue3.5.5 关注公众号:【前端欧阳】,给…

【python爬虫案例】利用python爬取豆瓣电影TOP250评分排行数据!

【python爬虫案例】利用python爬取豆瓣电影TOP250评分排行数据,并导出为excel文档一、爬取对象-豆瓣电影TOP250 今天给大家分享一期豆瓣读书TOP排行榜250的python爬虫案例 爬取的目标网址是:https://movie.douban.com/top250咱们以目标为驱动,以兴趣为导向,先来看下爬虫程序…

Ros2 - Moveit2 - DeepGrasp(深度抓握)

MoveIt 深度把握 本教程演示了如何在 MoveIt 任务构造器中使用抓握姿势检测 (GPD)和 Dex-Net 。 GPD(左)和 Dex-Net(右)用于生成拾取圆柱体的抓取姿势。 https://moveit.picknik.ai/main/_images/mtc_gpd_panda.gif 入门 如果您还没有这样做,请确保您已经完成入门指南中…

(装)K8s 总体架构及目录结构

原文:https://www.guoshaohe.com/cloud-computing/kubernetes-source-read/12491. kubernetes 总体架构目前想对kubernetes 1.21 的源码进行一次阅读分析,本篇文章是对k8s的整体架构进行一个大致分析,先要搞清楚每个组件的功能和任务,在根据不同的组件进行深度的源码分析。…

[C++ Daily] calloc 与 malloc

转载 C++ 面试突破 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 Kind BorglQI的评论

贼好用!五分钟搭建一个美观且易用的导航页面!

Pintree 是一个开源项目,旨在将浏览器书签导出成导航网站。通过简单的几步操作,就可以将书签转换成一个美观且易用的导航页面。大家好,我是 Java陈序员。 今天,给大家介绍一个贼好用的导航网站搭建工具,只需通过几步操作,就能搭建出个性化导航网站!关注微信公众号:【Ja…

26.删除有序数组中的重复项 Golang实现

题目描述:给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以…

Hadoop(十一)HDFS 读写数据流程

HDFS读写数据流程 一、写数据流程1、客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在 2、NameNode返回是否可以上传 3、客户端请求第一个Block上传到哪几个DataNode服务器上 4、NameNode返回3个DataNode节点,分…

产品经理的日常工作

杜工库 声明 欢迎转载,但请保留文章原始出处:) 博客园:https://www.cnblogs.com/chenxiaomeng/ 如出现转载未声明 将追究法律责任~谢谢合作

Hadoop(十一)HDFS 写数据流程

HDFS写数据流程 一、写数据流程1、客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在 2、NameNode返回是否可以上传 3、客户端请求第一个Block上传到哪几个DataNode服务器上 4、NameNode返回3个DataNode节点,分别…

windows定时执行python程序

先写个 bat 脚本,执行 Python 程序 :: 根据实际情况修改 Python 解释器的路径 set PYTHON=D:\python\python.exe set CODE_DIR=D:\code\projectcd /d "%CODE_DIR%" :: 启动 Python 程序 echo Running main.py... %PYTHON% main.py > nohup.log 2>&1echo A…