ros2 topic 源码解析
ros2 命令加载过程
ros2 topic代码位置:ros2\src\ros2cli\ros2topic
最终运作在ros2topic文件中
setup.py 定义挂载点,加载命令的执行函数
from setuptools import find_packages
from setuptools import setup
package_name = 'ros2topic'
setup(name=package_name,version='0.13.1',packages=find_packages(exclude=['test']),data_files=[('share/' + package_name, ['package.xml']),('share/ament_index/resource_index/packages',['resource/' + package_name]),],install_requires=['ros2cli'],zip_safe=True,author='Dirk Thomas',author_email='dthomas@osrfoundation.org',maintainer='Claire Wang, Mabel Zhang',maintainer_email='clairewang@openrobotics.org, mabel@openrobotics.org',url='https://github.com/ros2/ros2cli/tree/master/ros2topic',download_url='https://github.com/ros2/ros2cli/releases',keywords=[],classifiers=['Environment :: Console','Intended Audience :: Developers','License :: OSI Approved :: Apache Software License','Programming Language :: Python',],description='The topic command for ROS 2 command line tools.',long_description="""\
The package provides the topic command for the ROS 2 command line tools.""",license='Apache License, Version 2.0',tests_require=['pytest'],entry_points={'ros2cli.command': ['topic = ros2topic.command.topic:TopicCommand',],'ros2cli.extension_point': ['ros2topic.verb = ros2topic.verb:VerbExtension',],'ros2topic.verb': ['bw = ros2topic.verb.bw:BwVerb','delay = ros2topic.verb.delay:DelayVerb','echo = ros2topic.verb.echo:EchoVerb','find = ros2topic.verb.find:FindVerb','hz = ros2topic.verb.hz:HzVerb','info = ros2topic.verb.info:InfoVerb','list = ros2topic.verb.list:ListVerb','pub = ros2topic.verb.pub:PubVerb','type = ros2topic.verb.type:TypeVerb',],}
)
例如: ros2 topic list .会运行ros2topic.verb.list:ListVerb
先运行下面的main函数
from ros2cli.command import add_subparsers_on_demand
from ros2cli.command import CommandExtensionclass TopicCommand(CommandExtension):"""Various topic related sub-commands."""def add_arguments(self, parser, cli_name):self._subparser = parserparser.add_argument('--include-hidden-topics', action='store_true',help='Consider hidden topics as well')# add arguments and sub-commands of verbsadd_subparsers_on_demand(parser, cli_name, '_verb', 'ros2topic.verb', required=False)def main(self, *, parser, args):if not hasattr(args, '_verb'):# in case no verb was passedself._subparser.print_help()return 0extension = getattr(args, '_verb')# call the verb's main methodreturn extension.main(args=args)
下面执行 ros2\src\ros2cli\ros2topic\ros2topic\verb\list.py
from ros2cli.node.strategy import add_arguments as add_strategy_node_arguments
from ros2cli.node.strategy import NodeStrategy
from ros2topic.api import get_topic_names_and_types
from ros2topic.verb import VerbExtensionclass ListVerb(VerbExtension):"""Output a list of available topics."""# topic 后面参数解析def add_arguments(self, parser, cli_name):add_strategy_node_arguments(parser)parser.add_argument('-t', '--show-types', action='store_true',help='Additionally show the topic type')parser.add_argument('-c', '--count-topics', action='store_true',help='Only display the number of topics discovered')# duplicate the following argument from the command for visibilityparser.add_argument('--include-hidden-topics', action='store_true',help='Consider hidden topics as well')parser.add_argument('-v', '--verbose', action='store_true',help='List full details about each topic')@staticmethoddef show_topic_info(topic_info, is_publisher):message = ('Published' if is_publisher else 'Subscribed') + ' topics:\n'for (topic_name, topic_types, pub_count, sub_count) in topic_info:count = pub_count if is_publisher else sub_countif count:topic_types_formatted = ', '.join(topic_types)count_str = str(count) + ' ' + ('publisher' if is_publisher else 'subscriber') \+ ('s' if count > 1 else '')message += f' * {topic_name} [{topic_types_formatted}] {count_str}\n'return messagedef main(self, *, args):topic_info = []# NodeStrategy包括两个实现DirectNode和DaemonNode,DaemonNode在localhost 11511+domain 端口上,DirectNode#下面代码走DaemonNode分支 with NodeStrategy(args) as node:topic_names_and_types = get_topic_names_and_types(node=node,include_hidden_topics=args.include_hidden_topics)for (topic_name, topic_types) in topic_names_and_types:if args.verbose:pub_count = node.count_publishers(topic_name)sub_count = node.count_subscribers(topic_name)topic_info.append((topic_name, topic_types, pub_count, sub_count))else:topic_info.append((topic_name, topic_types, 0, 0))#输出发现主题个数, -cif args.count_topics: print(len(topic_names_and_types))elif topic_names_and_types:# 列出有关每个主题的完整详细信息 -vif args.verbose:print(self.show_topic_info(topic_info, is_publisher=True))print(self.show_topic_info(topic_info, is_publisher=False))else:# ros2 topic list 默认输出for (topic_name, topic_types, _, _) in topic_info:msg = '{topic_name}'topic_types_formatted = ', '.join(topic_types)if args.show_types:msg += ' [{topic_types_formatted}]'print(msg.format_map(locals()))
列如
ros2 topic list -c
ros2 topic list -v
ros2 topic list -t
ros2 topic list --include-hidden-topics
ros2 topic 源码解析相关推荐
- ros2 代码结构及源码解析
一.ros2 软件架构 ROS 2 Documentation: Rolling 这部分网上内容很多 ROS2应用开发框架 消息数据流 二.ros2 命令代码解析 ros2 加载过程 ros2 act ...
- RocketMQ源码解析:Filtersrv
???关注微信公众号:[芋艿的后端小屋]有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表 RocketMQ / MyCAT / Sharding-JDB ...
- Kafka核心源码解析 - KafkaController源码解析
在进入源码解析之前,我先来介绍一些KafkaController在Kafka集群中的作用. (1)负责监听zookeeper上所有的元数据变更请求: (2)负责topic的partition迁移任务分 ...
- 【kafka】Kafka 源码解析:Group 协调管理机制
1.概述 转载:Kafka 源码解析:Group 协调管理机制 在 Kafka 的设计中,消费者一般都有一个 group 的概念(当然,也存在不属于任何 group 的消费者),将多个消费者组织成一个 ...
- 跟我学RocketMQ之批量消息发送源码解析
上篇文章 跟我学RocketMQ之消息发送源码解析 中,我们已经对普通消息的发送流程进行了详细的解释,但是由于篇幅问题没有展开讲解批量消息的发送.本文中,我们就一起来集中分析一下批量消息的发送是怎样的 ...
- loraserver 源码解析 (六) lora-app-server
目录 下载源码 升级 npm 安装一些必要的依赖库 pq_trgm extension run 调用 handleDataDownPayloads 开启一个Goroutine G1 run再调用 s ...
- 6、RocketMQ 源码解析之 Broker 启动(上)
上面一篇我们介绍了 RocketMQ 的元数据管理,它是通过自定义一个 KV 服务器.并且其它服务在 NameServer 注册服务信息的时候都是全量注册.如果 RocketMQ 的拓扑图当中有多台 ...
- hashmap与concurrenthashmap源码解析
hashmap源码解析转载:http://www.cnblogs.com/ITtangtang/p/3948406.html 一.HashMap概述 HashMap基于哈希表的 Map 接口的实现.此 ...
- Kafka生产者和消费者分区策略部分源码解析
之前我在看其他的博客时,发现对于kafka consumer的RoundRobin的缺点分析中,有两种观点,一种认为缺点在于如果消费者组中消费者消费的主题不同,或者消费者线程数不同,那么会造成消费者消 ...
- Semantic SLAM源码解析
这个语义SLAM建图是基于ROS的 下面上源码解析: 首先从semantic_cloud.py出发,这里接收相机读入的topic, 会得到RGB图和深度图, 同时会起orb_slam2计算位姿,我们这 ...
最新文章
- Toronto-3D:用于城市道路语义分割的大规模移动激光雷达数据集
- 【二级java】二叉树序列
- 功能测试怎么学?阿里测试工程师教你4个步骤
- java Executor实例_Executor框架+实例
- 转:java中static、final、static final的区别
- uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系
- notepad++是什么软件_对比国外更优秀的五款国产软件,却不被国人所熟悉
- Spring简化Java开发_第1章—Spring之旅—简化Spring的java开发
- 英文文献中常见拉丁字母缩写
- 公园智慧路灯解决方案
- ai训练 样本大小_成本低、周期短,小样本学习能否成为AI落地的速效药?
- 利用antd进行轻量级表单开发,获取验证码
- 1.1 pug常用命令
- 一个域名引发的血案……
- 洛谷P4598 解高次方程,数论
- uva 10306 e-Coin
- 微信平台 签名生成工具
- Java中的RSA加解密工具类:RSAUtils
- 工信部通报下架60款APP:关联有赞、三六零、唯品会等上市公司
- 在安装了Sql2000的基础上安装Sql2005的详细过程
热门文章
- MacBook Air 2013全新安装Win7
- 计算机应用后期影音制作,影音制作工具(ImTOO Movie Maker)
- 解决Ubuntu 20.04 虚拟机克隆出多台造成的IP地址冲突的问题
- Java 中的 String、StringBuffer、StringBuilder
- 谈谈人们常说的“一时糊涂,鬼迷心窍”!
- oracle lob函数,Oracle可以处理LOB字段的常用字符函数
- 亲测有效,解决C盘空间不足问题
- 各双拼输入方案之间有明显的优劣之分吗?
- Android 梯形TextView
- echart-pie