【轻量级开源ROS 的机器人设备(5)】--(3)拟议的框架——µROS节点

news2025/3/10 21:32:38

前文链接:(2条消息) 【轻量级开源ROS 的机器人设备(5)】--(2)拟议的框架——µROS节点

五、静态栈分析

        在处理运行多个资源的严格受限平台时线程,重要的是将堆栈使用保持在最低限度。这甚至
在利用具有同质堆栈大小的线程池时更为重要,因为这个大小取决于它的任何一个达到的最大堆栈深度工作线程。一个静态堆栈分析工具可以方便地进行估算,如果准确地说,是一组感兴趣的函数的堆栈使用。堆栈分析µROSnode 提供的工具是 urosstan,由 urosstan.py 实现Python 脚本。

5.1 分析流程

        编译流程的示意图如图 5.4 所示。用户供给配置文件(清单 B.12 中的实际示例)和静态分析
输出到工具。对于每个入口点,它构建调用图,并且它跟踪具有最大堆栈使用率的路径。该工具然后输出列表未解析的符号、每个入口点的报告和摘要。

5.2 配置

        用户必须提供一个配置文件,其中指定了分析选项,以及入口点集、自定义终止符号和源文件映射。

5.3 入口点

        对每个入口点进行分析(全局函数名称)在入口点集中列出。每个入口点都分配了一个值,该值表示进入前的堆栈深度。

5.4 终止符

        用户可能想要切断一些调用图分支,或者手动定义未解析符号的堆栈使用。例如,外部无法分析库函数或汇编调用,但用户仍然可以提供由这些调用触发器分配的最大字节数。这个方式,调用图分析在到达任何终止符时停止用户提供的符号。

5.5 文件映射

        堆栈分析器依赖于 GCC 工具链生成的静态分析。映射集将每个源文件映射到 .gkd、.su 和 .nm 输出;分别是 GCC RTL 转储、GCC 堆栈使用报告和 GNU nm 对象符号。

六、关于有效性的观察

        尽管它很有用,但经常存在严重的障碍,这会降低静态分析的有效性。首先,它分析的输出文件GCC 工具链仅适用于 C/C++ 源文件。外部库和程序集GCC 静态分析无法跟踪代码,因此无法构建完整的调用图,或利用一些堆栈使用报告。
        此外,在运行时分配的间接函数不能被静态跟踪分析工具。这就是为什么用户应该意识到提供一个有意义的入口点列表。
        然而,递归是静态分析无法消除的障碍。工具可以在调用图中发现循环,因此鼓励用户分析他们的循环对运行时堆栈使用的影响。

        无论如何,该工具对于发现堆栈上意外深度分配的路径,或者更好地了解所分析代码的整体堆栈使用情况仍然非常有用。这样,用户可以优化局部变量的分配,或尽可能协调堆栈分配。当可以完全访问完全用 C/C++ 编写的源代码时,该工具显示出它的最佳用途。顺便说一句,如果在配置文件中指定所有汇编程序和库函数的使用,仍然可以达到最大精度。如果某些信息丢失但已知被绑定,例如通过它们的全覆盖运行时分析数据,那么分析至少可以报告保守的结果。需要指出的是,urosstan 目前仅支持 C/C++ 代码库的 GCC 工具链,因为这是我们在整个项目开发过程中使用的工具链。如果用户只对整体堆栈分配感兴趣,那么可以使用 GCC 编译纯 C/C++ 代码库并且不进行任何优化,仍然提供粗略的保守分析。如果目标工具链不同,目标代码的等价性很粗糙,但对于初步分析仍然有效。

七、 示范工程

        包中提供了一个turtlesim demo,几乎等同于turtlesim_node [7] 官方 ROS 节点。它支持其所有主题、服务和参数,利用了现实生活中 Node.js 所需的几乎所有功能。
        海龟的最大数量受 MAX_TURTLES 常量限制。这海龟姿势以 1kHz 更新,并以 100Hz 流式传输。
        消息类型和处理程序首先使用配置文件生成如清单 5.18 所示。由于 turtleX/* 主题和服务的名称随着海龟的变化,它们的创建和删除被移动到应用程序(应用程序)模块。该模块处理海龟生成和杀死操作,如以及 /rosout 消息的生成。
        静态堆栈分析配置文件如清单 B.12 所示。
        该演示分为两个端口:一个是仅使用 POSIX API 开发的,另一个是第二个使用 LWIP 网络堆栈在 ChibiOS/RT 下运行。包含 Eclipse 项目文件。

7.1 项目:turtlesim-posix演示

        该演示的所有低级功能都遵循 POSIX 标准。它是在标准笔记本电脑上使用 Linux Mint 14 Nadia 和 Raspbian Wheezy 进行测试在具有 256 MB RAM 的 Raspberry Pi 模型 B 上(参见第 6.1.3节)。当 /turtlesim 节点关闭时,应用程序将退出。

1 # urosgen.py configuration file for turtlesim
2
3 [Options]
4 author = Andrea Zoppi <texzk@email.it>
5 licenseFile = ../../../COPYING
6 includeDir = ../include
7 sourceDir = ../src
8 nodeName = turtlesim
9 fieldComments = false
10
11 [PubTopics]
12 rosout = rosgraph_msgs/Log
13 turtleX/pose = turtlesim/Pose
14 turtleX/color_sensor = turtlesim/Color
15
16 [SubTopics]
17 turtleX/command_velocity = turtlesim/Velocity
18
19 [PubServices]
20 clear = std_srvs/Empty
21 kill = turtlesim/Kill
22 spawn = turtlesim/Spawn
23 turtleX/set_pen = turtlesim/SetPen
24 turtleX/teleport_absolute = turtlesim/TeleportAbsolute
25 turtleX/teleport_relative = turtlesim/TeleportRelative
26
27 [CallServices]
28 # none
Listing 5.18: Turtlesim configuration file for urosgen.py

7.2 项目:turtlesim-chibios+lwip

        该演示结合使用了 ChibiOS/RT RTOS 和 LWIP 网络堆栈,并且可以在 ARM Cortex M4 内核上运行。具体是测试过的使用 ChibiOS/RT 2.5.2 和 LWIP 1.4.1。处理器是STM32F407具有以太网功能的定制板(参见第 6.1 节),通过使用 DP83848RM II 模式下的 PHY。 USB口作为串口终端/shell模拟器。当 /turtlesim 节点关闭时,只有 Node 停止运行,而董事会的其他功能继续运行。

八 与用户应用程序集成

µROSnode 被开发为以低的成本集成到用户应用程序中 努力。下面说明了一般的集成要求。

8.1 Makefile 脚本

        µROSnode 包提供了一组 Makefile 脚本包含在根 Makefile 中;它们可以在 mk 文件夹中找到。这主脚本 uros.mk 定义了核心源文件和头文件的列表,其中是必要的。

        此外,用户必须包含用于目标平台的脚本,这些脚本定义了低级驱动程序源文件和头文件的列表。如果目标平台的某个子系统还不支持,可以通过template/src/lld文件夹中的模板文件进行开发;标有 TODO 的注释给出了正确实施的说明。

8.2 配置 µROSnode

        需要为用户应用程序进行配置。应用程序必须包含共享头文件 urosconf.h,并且为 µROSnode 子系统提供设置。模板可以在µROSnode 包的模板/包含文件夹。评论协助
用户调整所需的设置。

8.3 回调

        用户模块(参见第 5.2.7 节)需要在 urosUser.c 应用程序源文件中定义一些回调函数。 template/src 中的模板文件有助于开发此类回调函数。

8.4 处理函数

         用户应该创建消息类型和处理模块(参见第 5.2.8 节和第 5.2.9 节),以便 µROSnode 可以正确处理主题和服务的消息流。此任务由代码生成器工具协助完成,详见第 5.3.1 节。

8.5 初始化

        µROSnode 框架必须通过调用初始化urosInit(),它初始化全局状态。这应该在什么时候完成平台已完全初始化。
        实际用户应用程序一运行,节点就会启动。这是通过调用 urosNodeCreateThread() 创建节点线程来完成,它跟踪节点的生命周期;主题、服务和参数是由 Node 线程注册和注销。该线程退出时节点已关闭。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

技嘉电脑怎么开启vt模式?

电脑开启vt模式后&#xff0c;可以提高主板的运行速率&#xff0c;提高性能。那就有一些使用技嘉电脑的用户问技嘉主板怎么开启vt模式&#xff1f;下面小编就来教教大家技嘉电脑开启vt模式的方法。 Intel芯片组的技嘉主板 1、一般情况下&#xff0c;也就是在电脑开机的时候&…

计算机网络、操作系统刷题笔记15

计算机网络、操作系统刷题笔记15 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c;尤其sq…

差分详细讲解(C++)

每日一句:平凡的我在人多的地方曾极力小心翼翼&#xff0c; 但不知从何时起 &#xff0c;我不太在意别人的目光了。比起被人觉得是个怪人&#xff0c;我现在更害怕浪费时间。 差分一、一维差分二、二维差分一、一维差分 差分就是前缀和的逆运算,如果你不懂什么是前缀和,看这里…

移动技术在仓库运营管理中的作用

作者&#xff1a;Mike Kay&#xff0c;Mendix公司合作伙伴The Config Team渠道客户经理 市面上出现越来越多的仓库管理系统&#xff08;WMS&#xff09;以满足企业更好地管理供应链的需求。想要充分挖掘WMS的优点&#xff0c;一般可以通过移动解决方案来将关键的供应链运作进…

浪潮信息工程师:带你了解设备透传虚拟机的快速启动技术优化方案

编者按&#xff1a;将物理设备通过 vfio 透传给虚拟机是虚拟化常用的技术&#xff0c;但当为虚拟机分配比较大的内存时&#xff0c;虚拟机的启动时间会明显变慢&#xff0c;可能由十几秒延长至数分钟&#xff0c;严重影响用户使用体验。本文整理自龙蜥大讲堂 51 期&#xff0c;…

小林coding阅读笔记:计算机网络基础篇-TCP\IP模型

前言 参考/导流&#xff1a; 小林coding - 2.1 TCP/IP 网络模型有哪几层&#xff1f;学习意义 学习分层设计思想构建网络层次以及各层协议作用知识体系为网络编程奠定理论基础&#xff0c;对于RPC框架or分布式系统通信都是极为重要的一节&#xff0c;是提升整个系统效率的关键…

ubunt配置samba服务器,匿名访问

1. 环境 ubuntu14.04 2. 安装samba服务器 sudo apt-get install samba 3. 配置samba文件 vim /etc/samba/smb.conf 在最后添加如下内容 [muchx]comment Shared Folder with username and passwordpath /home/muchx/sharepublic yeswritable yesvalid users muchxcre…

二、基于kubeadm安装kubernetes1.25集群第一篇

1、概述 Kubeadm 是一个提供了 kubeadm init 和 kubeadm join 的工具&#xff0c; 作为创建 Kubernetes 集群的 “快捷途径” 的最佳实践。 kubeadm 通过执行必要的操作来启动和运行最小可用集群。 按照设计&#xff0c;它只关注启动引导&#xff0c;而非配置机器。同样的&…

虹科分享 | 硬件加密U盘 | 管理密码安全的四大工具

随着网络攻击变得越来越突出&#xff0c;密码安全变得越来越重要。为了为每个帐户创建安全密码&#xff0c;许多人正在转向密码管理工具来帮助防止敏感数据的泄露。 考虑到这一点&#xff0c;以下是一些顶级密码管理工具。 领先的密码管理工具 Keeper密码管理器和数字保险库 …

kali linux手动编译网卡驱动(以mt7612u为例)

〇、linux常用命令 《Linux入门与基础》课程教案_小王小王指定辉煌的博客-CSDN博客_linux入门与基础教案 linux常用命令笔记&#xff08;二&#xff09;_小王小王指定辉煌的博客-CSDN博客 一、下载源码 查看系统版本号 uname -r uname -a cat /proc/version 或/lib/module…

手撕红黑树的构建与验证

上篇文章我们介绍了AVL树的构建与适用场景&#xff0c;我们知道了AVL树虽然查找效率很高&#xff0c;但是不适合频繁插入或删除的场景。为了解决这个问题又诞生了新的数据结构&#xff1a;红黑树 那么本篇文章就着重介绍红黑树的性质与如何构建。 1.红黑树的性质 1.结点颜色非黑…

邓俊辉 《数据结构》笔记1 绪论

邓俊辉 《数据结构》笔记1 绪论 CSDN转图床总是崩&#xff0c;如果全写完再上传一次要调好多&#xff0c;感觉很麻烦&#xff0c;所以写一点更新一点&#xff0c;会持续更新 提前发出来还有个好处就是push自己更新不会咕咕咕&#xff0c;哈哈 参考资料 MOOC 数据结构上MOOC 数…

【计算机考研408】磁盘的初始化过程

该图是磁盘物理图 关于磁盘存储器&#xff0c;[柱面号盘面号扇区号]⇔外存块号 注&#xff1a;柱面是相对位置相同的磁道所构成的面 磁盘初始化 低级初始化&#xff08;也称物理格式化&#xff09; &#xff08;1&#xff09;分扇区 &#xff08;2&#xff09;用特殊数据结构…

linux后台自定义后台服务service(以filebeat举例)

文章目录一、配置攥写1&#xff09;安装filebeat和配置相关修改2&#xff09;常用命令二、启动顺序1&#xff09;命令循序2&#xff09;systemctl添加自定义系统服务&#xff08;服务填写指南&#xff09;3&#xff09;linux的systemctl命令详解及使用教程三、遇到的坑点和报错…

谁再要你自学网络安全,请给他一大B兜

前言 作为一名6年网安工程师老菜鸟来说&#xff0c;我实在想不通&#xff0c;开发岗位那么多&#xff0c;为什么要来学网安? 在这里必须给那些准备入坑的同学泼几盆冷水&#xff01;零基础自学网络安全&#xff1f;劝你还是别做梦了&#xff01; 基础确实很简单&#xff0c…

2023火爆共享购商业模式概念、框架、基础制度

各位企业家及创业者朋友们&#xff0c;你们好。我是微三云&#xff08;陈志坤&#xff09;&#xff0c;在你打开这个文章的时候&#xff0c;先不要急&#xff0c;因为任何一个能够长久、安稳、盈利的平台&#xff0c;背后肯定有一位看准宏观方向且耐心的人。这是一个极具颠覆性…

算法图论篇

文章目录一、DFS1.排列数字&#xff08;全排列&#xff09;2.n皇后3.树的重心二、BFS1.走迷宫2.八数码3.图中点的层次三、拓扑排序1.有向图的拓扑序列四、最短路1.Dijkstra2. bellman-ford3.spfa4.floyd五、求最小生成树1.Prim算法2.Kruskal算法六、二分图1.染色法判定二分图2.…

UWB汽车钥匙介绍

汽车钥匙经历了机械钥匙、遥控钥匙、PEPS、数字钥匙四个阶段&#xff0c;而数字钥匙又分为BLE/NFC/UWB三种技术路线。 由于UWB安全性、定位精度、作用范围明显好于BLE和NFC&#xff0c;因此成为汽车数字钥匙的最优技术。 PEPS与数字钥匙: PEPS是指无钥匙进入/无钥匙启动系统&a…

【爬虫】JS调试解决反爬问题系列2

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

ubuntu arm架构各版本源整理

目录 一、x86机构 1、ubuntu 20.04 2、ubuntu 18.04 3、ubuntu 21.10 4、ubuntu 22.04 二、arm机构 1、ubuntu 20.04 2、ubuntu 18.04 3、ubuntu 21.10 4、ubuntu 22.04 三、出现的问题 1、换成国内源后报https证书问题 2、如果选择国内开源站 ​3、提示the publi…