ROS源码分析-week5

本文详细分析了ROS中topic publisher和subscriber的注册过程。通过阅读源码,了解到publisher如何通过rospy.Publisher构造函数完成注册,包括名称解析和资源分配。同时,subscriber的构造过程也进行了简单说明。总结了ROS topic注册的简洁设计,为后续理解发布和接收流程奠定了基础。

2021SC@SDUSC

1. 本周工作目标

这周继续ros通信部分的源码,侧重点在于注重"topic是怎么注册的?publisher是怎么注册的?"。结合实际情况,本周的工作目标如下:

  • 根据talker and listener样例,调试阅读ros core topic注册部分代码

2. ros里topic publisher的注册

我们先看ros_catkin_ws/install_isolated/share/rospy_tutorials/001_talker_listener/talker.py文件的内容:

 可以看到示例代码很简洁,除去开头的注释,内容只有19行。注意阅读第43行,这里往ros core里注册了一个名为chatter的topic,发布std_msgs.String类型的消息。那么,它具体是怎么进行发布的呢?这里我们用调试模式,看看消息的发布究竟干了什么。

打上断点,从43行代码开始往下一路追踪,发现它先调用了rospy.Publisher的构造函数,而后者又调用了父类Topic的构造函数,第一个关键点在Topic的构造函数里:

这里发现了一个事实:rospy允许在节点初始化之前,先初始化节点所要发布的t

Note, selecting 'ros-foxy-shape-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros2bag' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rmw-implementation' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros2cli' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-foonathan-memory-vendor' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-composition-interfaces' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-typesupport-fastrtps-cpp' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rcpputils' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-urdfdom-headers' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-unique-identifier-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-launch-xml' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-default-generators' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-urdfdom' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros2doctor' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cpplint' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rcl-interfaces' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-geometry-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake-ros' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-lint-cmake' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-runtime-py' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-domain-coordinator' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rcl-logging-spdlog' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-typesupport-c' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-io-context' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-tf2-tools' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rmw-implementation-cmake' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-typesupport-cpp' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-flake8' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-sros2-cmake' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosbag2' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rcutils' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosapi-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rclcpp-lifecycle' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-nav-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosapi' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake-copyright' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros2service' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-urdf' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-fastcdr' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros-workspace' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-yaml-cpp-vendor' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-lint-common' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake-cppcheck' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros2node' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-stereo-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosbag2-converter-default-plugins' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-parser' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosbag2-compression' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros-environment' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rpyutils' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-gmock-vendor' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-gtest-vendor' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-typesupport-connext-c' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-zstd-vendor' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosbag2-storage-default-plugins' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-shared-queues-vendor' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cppcheck' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-tf2-py' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-pep257' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros2component' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros2launch' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-eigen3-cmake-module' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros2pkg' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-index-python' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-urg-node' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake-export-targets' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-adapter' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-tracetools' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-runtime-c' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake-gtest' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake-xmllint' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros2run' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-statistics-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-trajectory-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-cartographer-ros-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-tf2-geometry-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-package' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-cartographer' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-tf2-bullet' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rcl-action' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-typesupport-connext-cpp' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-serial-driver' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-kdl-parser' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-launch-testing' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-generator-c' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake-export-link-flags' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-fastrtps' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-typesupport-introspection-c' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosbag2-transport' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-launch-testing-ament-cmake' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-libyaml-vendor' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-default-runtime' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros2action' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-orocos-kdl' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-cartographer-ros' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-class-loader' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-diagnostic-updater' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-tf2-eigen' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosbag2-storage' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rclcpp' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-launch' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros2lifecycle' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-launch-testing-ros' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-sdl2-vendor' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake-pytest' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-urg-c' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-cmake' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros2topic' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-diagnostic-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake-cpplint' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-tf2-kdl' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-fastrtps-cmake-module' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake-lint-cmake' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-urg-node-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-typesupport-fastrtps-c' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rclpy' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake-auto' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosbridge-library' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rosidl-typesupport-introspection-cpp' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rmw-fastrtps-shared-cpp' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-example-interfaces' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake-python' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-uncrustify' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake-version' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-libstatistics-collector' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-sensor-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-cmake-gmock' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rclcpp-components' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ament-lint-auto' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-test-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-std-msgs' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-ros2param' for glob 'ros-foxy-*' Note, selecting 'ros-foxy-rmw-fastrtps-cpp' for glob 'ros-foxy-*' Package 'ros-foxy-rmw-connext-cpp' is not installed, so not removed Package 'ros-foxy-rosidl-typesupport-connext-c' is not installed, so not removed Package 'ros-foxy-rosidl-typesupport-connext-cpp' is not installed, so not removed E: Unable to locate package ros2-* E: Couldn't find any package by glob 'ros2-*'
最新发布
08-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值