找回密码
 会员注册
查看: 33|回复: 0

ROS2快速入门Python篇-版本梳理、环境搭建、源码架构介绍

[复制链接]

5

主题

0

回帖

16

积分

新手上路

积分
16
发表于 2024-9-10 09:18:30 | 显示全部楼层 |阅读模式
文章目录1.ROS2版本说明及资料获取1.1ROS2版本更新记录1.2ROS1/ROS2各版本资料位置2.humble安装2.1使用Binary方式安装与测试2.2使用源码方式安装与测试2.2.1源码下载2.2.2源码编译2.2.3运行测试3.ROS架构体系3.1主要模块及其功能的概述3.2ros-core,ros-base,ros_desktop差异3.3DDS介绍1.ROS2版本说明及资料获取1.1ROS2版本更新记录https://docs.ros.org/en/foxy/Releases.htmlROS1版本更新记录https://wiki.ros.org/Distributions1.2ROS1/ROS2各版本资料位置https://docs.ros.org/en/?C=M;O=D本系列将使用humble来讲解Ros2的使用。2.humble安装两种方式:Binary安装和源码安装2.1使用Binary方式安装与测试binary安装支持UbuntuLinuxJammy(Ubuntu22.04)64-bitx86and64-bitARM,所以如果你装的是Ubuntu22.04,可以直接使用这种方式安装或者使用源码安装。WecurrentlysupportUbuntuLinuxJammy(22.04)64-bitx86and64-bitARM.安装与测试步骤参考:https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html2.2使用源码方式安装与测试如果是其他Linux系统,如树莓派4(RaspiOS基于DebianBullseye),可以选择源码安装方式。ThecurrentDebian-basedtargetplatformsforHumbleHawksbillare:.Tier1:UbuntuLinux-Jammy(22.04)64-bit.Tier3:UbuntuLinux-Focal(20.04)64-bit.Tier3ebianLinux-Bullseye(11)64-bitOtherLinuxplatformswithvaryingsupportlevelsinclude:.ArchLinux,seealternateinstructions.FedoraLinux,seealternateinstructions.OpenEmbedded/webOSOSE,seealternateinstructions安装步骤参考:https://docs.ros.org/en/humble/Installation/Alternatives/Ubuntu-Development-Setup.htmlUbuntu22.04源码安装步骤:2.2.1源码下载#https://docs.ros.org/en/humble/Installation/Alternatives/Ubuntu-Development-Setup.html#suitforubuntu22.04sudoaptinstallsoftware-properties-commonsudoadd-apt-repositoryuniversesudoaptupdate&sudoaptinstallcurl-ysudocurl-sSLhttps://raw.githubusercontent.com/ros/rosdistro/master/ros.key-o/usr/share/keyrings/ros-archive-keyring.gpgecho"deb[arch=$(dpkg--print-architecture)signed-by=/usr/share/keyrings/ros-archive-keyring.gpg]http://packages.ros.org/ros2/ubuntu$(./etc/os-release&echo$UBUNTU_CODENAME)main"|sudotee/etc/apt/sources.list.d/ros2.list>/dev/nullsudoaptupdate&sudoaptinstall-y\python3-flake8-docstrings\python3-pip\python3-pytest-cov\ros-dev-toolssudoaptinstall-y\python3-flake8-blind-except\python3-flake8-builtins\python3-flake8-class-newline\python3-flake8-comprehensions\python3-flake8-deprecated\python3-flake8-import-order\python3-flake8-quotes\python3-pytest-repeat\python3-pytest-rerunfailuressudoaptinstallpython3-colcon-common-extensions#downloadgitlistedinros2.repos(https://github.com/ros2/ros2.git)#codesize561Mmkdir-p./ros2_humble/srccdros2_humblevcsimport--inputhttps://raw.githubusercontent.com/ros2/ros2/humble/ros2.repossrc1234567891011121314151617181920212223242526272829303132333435国内网络访问raw.githubusercontent.com出现Connectionrefused问题处理如果遇到这样的错误$sudocurl-sSLhttps://raw.githubusercontent.com/ros/rosdistro/master/ros.key-o/usr/share/keyrings/ros-archive-keyring.gpgcurl7)Failedtoconnecttoraw.githubusercontent.comport443after70ms:Connectionrefused在网站https://sites.ipaddress.com/查询raw.githubusercontent.com的ip地址添加到/etc/hosts文件中2.2.2源码编译sudoaptupgradesudorosdepinitrosdepupdaterosdepinstall--from-pathssrc--ignore-src-y--skip-keys"fastcdrrti-connext-dds-6.0.1urdfdom_headers"cdros2_humble/colconbuild--symlink-install1234567sudorosdepinit遇到cannotdownloaddefaultsourceslistfrom问题$sudorosdepinitERROR:cannotdownloaddefaultsourceslistfrom:https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.listWebsitemaybedown.重试几次可成功,原因未知,可能是单纯的网络问题。$sudorosdepinitWrote/etc/ros/rosdep/sources.list.d/20-default.listRecommended:pleaserunrosdepupdate2.2.3运行测试初始化运行环境echo"source/ros2_humble/install/local_setup.bash">>~/.bashrc12新终端运行talker示例程序ros2rundemo_nodes_cpptalker1新终端运行listener示例程序ros2rundemo_nodes_pylistener1结果如图所示rosrun和ros2run区别rosrun和ros2run都是用于在ROS环境中运行节点的命令行工具,但它们分别适用于不同版本的ROS。rosrun:rosrun命令是用于在ROS1中运行节点的工具。它允许你直接指定要运行的ROS软件包中的节点,而不需要提前source或者setup.bashROS环境。它的使用方式是:rosrunpackage_namenode_name其中,package_name是要运行节点所属的ROS软件包的名称,node_name是要运行的节点的名称。ros2run:ros2run命令是用于在ROS2中运行节点的工具。它的功能类似于rosrun,但是针对ROS2环境。它允许你直接指定要运行的ROS软件包中的节点,而不需要提前source或者setup.bashROS环境。它的使用方式也是类似的:ros2runpackage_namenode_name其中,package_name是要运行节点所属的ROS软件包的名称,node_name是要运行的节点的名称。3.ROS架构体系3.1主要模块及其功能的概述模块功能rclcpp这是ROS2的C++客户端库。它提供了一个面向对象的接口,用于创建节点、发布和订阅主题、调用服务等。rclcpp提供了一个类似于ROS1的roscpp的接口,但是专门为ROS2的分布式架构设计。rclpy与rclcpp类似,rclpy是ROS2的Python客户端库。它允许开发者使用Python来编写ROS2节点,并与ROS2系统进行交互。rosidl这个模块用于ROS2中的消息和服务接口定义语言(IDL)。它允许定义ROS2中使用的消息和服务的结构,并生成用于序列化和反序列化这些消息的代码rclROS2的核心C语言实现。rcl提供了一个低级别的ROS2客户端库,用于与ROS2的中间件通信。rmwROSMiddlewareInterface(RMW)是ROS2与不同通信中间件之间的接口。ROS2支持多种不同的中间件,如FastRTPS、CycloneDDS等,而RMW模块允许ROS2与这些不同的中间件进行通信ros2cliROS2命令行工具的集合。这些工具用于管理ROS2节点、主题、服务等,以及执行其他与ROS2相关的任务。ros2launch这是ROS2中用于启动多个节点的工具。它允许用户使用XML或Python文件来描述节点的启动配置,并按照指定的配置启动这些节点。3.2ros-core,ros-base,ros_desktop差异安装ROS的时候,总会有不同的安装选项,如ros-core,ros-base,ros_desktop,区别只是不同选项所包含组件有的多,有的少些而已。ros_core:ros_core是ROS的核心组件,它包含了ROS的基本功能和工具,例如ROSMaster、rosout日志记录节点等。ros_core只包含最基本的ROS功能,适用于用户想要自定义自己的ROS环境的情况。ros_base:ros_base是一个比ros_core更大的安装选项,它包含了ros_core中的所有内容,同时还包含了一些额外的ROS软件包,如常用的ROS库、工具和一些常用的传感器和执行器的驱动程序。ros_base提供了一个较为完整的ROS环境,适用于大多数ROS应用。ros_desktop:ros_desktop是ROS安装的最完整的选项,它包含了ros_base中的所有内容,以及一些针对桌面用户的可视化工具和库,如rviz(ROS的三维可视化工具)、rqt(ROS的可视化工具集)等。ros_desktop适用于需要使用ROS进行开发和调试的桌面用户。因此,这三个选项之间的关系是:ros_desktop包含了ros_base,ros_base包含了ros_core。用户可以根据其需求选择合适的安装选项。具体差异可见:https://www.ros.org/reps/rep-2001.html#id23同样以humble版本为例3.3DDS介绍DDS指的是DataDistributionService(数据分发服务),是一种用于实时系统之间通信和数据共享的开放标准。在ROS2中,DDS用作ROS2的通信中间件,用于在不同的ROS2节点之间传输消息。ROS2中的DDS实现充当了ROS2架构的基础,负责节点之间的通信。ROS2支持多种DDS实现,例如FastDDS、CycloneDDS等。这些实现都遵循DDS标准,并提供了在ROS2中使用DDS进行通信所需的接口和功能。DDS提供了一种灵活而强大的消息传输机制,具有高度的可靠性和实时性。它允许开发者根据系统的需求配置通信参数,并支持多种通信模式,包括发布-订阅、请求-响应等。这使得DDS成为构建实时分布式系统的理想选择,也成为了ROS2作为机器人操作系统的核心通信技术。DDS(DataDistributionService)是一种用于实时系统之间通信和数据共享的开放标准。DDS标准由ObjectManagementGroup(OMG)制定和维护,是一种针对实时和嵌入式系统的数据通信协议。以下是DDS标准的主要特点和组成部分:发布-订阅模型(Publish-SubscribeParadigm):DDS使用发布-订阅模型,允许数据的发布者(Publishers)向感兴趣的订阅者(Subscribers)广播数据。这种模型允许松散的耦合和异步通信,使得系统更加灵活和可扩展。数据中心(Data-Centric):DDS是一种数据中心的通信协议,强调数据的传输和共享。数据被视为中心,而不是消息传输机制。这种方法允许系统中的各个部分直接共享数据,而不需要显式的点对点通信。实时性(Real-TimeCapabilities):DDS具有很好的实时性能,能够满足实时系统的要求。DDS的实现通常提供了可配置的QoS(QualityofService)参数,允许开发者根据系统的需求调整通信的实时性、可靠性和带宽利用率等方面的参数。自动发现和路由(AutomaticDiscoveryandRouting):DDS允许系统中的节点自动发现彼此,并建立通信连接。DDS还支持动态的路由机制,允许在系统运行时动态地调整通信路径。安全性(Security):DDS提供了安全性的支持,包括身份验证、访问控制、加密等功能,以确保通信数据的机密性和完整性。平台无关性(Platform-Independence):DDS是一种平台无关的通信协议,可以在各种不同的操作系统和硬件平台上使用。DDS标准的实现通常由各个厂商提供,包括开源实现和商业实现。在实时系统、嵌入式系统、大规模分布式系统等领域,DDS在提供高效、可靠的数据通信方面发挥着重要作用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-7 06:06 , Processed in 0.425525 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表