ROS2入门之节点与指令

文章目录

  • 前言
  • 一、初识ROS2
    • 1.ROS简介
    • 2.ROS系统框架
  • 二、ROS2创建节点(CPP)
    • 1.创建工作空间
    • 2.创建功能包
    • 3.创建节点
    • 4.配置CMakeLists
    • 5.编译运行节点
      • 🍓编译节点
      • 🍊source环境
      • 🍎 运行节点
    • 报错解决
  • 三、ROS2常用指令
    • 1.ros2 pkg create
    • 2.ros2 pkg list
    • 3.ros2 pkg executables
    • 4.点运行工具 ros2 run
    • 5.ros2 node list
    • 6.ros2 node info
  • 结束语


  • 💂 个人主页:风间琉璃
  • 🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助欢迎关注点赞收藏(一键三连)订阅专栏

前言


一、初识ROS2

待定…

1.ROS简介

在这里插入图片描述
ROS(Robot Operating System)是一个开源的机器人操作系统框架,最初由Willow Garage公司于2007年发起。ROS提供了一套工具和库,用于构建和开发机器人应用程序。其特点包括基于消息传递的中间件、通信模型、工具集以及开源的性质。ROS的通信机制采用发布-订阅模型和服务调用,使得不同组件(节点)能够实现信息交流。ROS在学术界和工业界都得到广泛应用,但在大规模系统中可能存在通信效率和实时性方面的挑战。

ROS 2是ROS的下一代版本,旨在解决ROS的一些限制和缺点。ROS 2保留了ROS的核心思想,但进行了一些重大改进。ROS 2的特点包括更灵活的通信机制、更好的实时性能、支持多种中间件、更好的安全性和可扩展性等。ROS 2的发展旨在满足更广泛的应用需求,包括工业自动化、军事应用等。它是一个更为先进、适用范围更广泛的机器人操作系统框架。 ROS 2被设计为兼容ROS,并提供了平滑的过渡路径,使得用户可以逐步迁移到ROS 2,同时保留现有的ROS代码。

2.ROS系统框架

二、ROS2创建节点(CPP)

1.创建工作空间

节点需要存在于功能包当中,功能包需要存在于工作空间当中,因此,想要想创建一个节点,就必须先创建一个工作空间,然后再创建功能包。本质上工作空间就是我们所熟知的文件夹。

mkdir -p node_test/src

2.创建功能包

进入src目录下,创建example_cpp功能包,使用ament-cmake作为编译类型,并为其添加rclcpp依赖。

ros2 pkg create example_cpp --build-type ament_cmake --dependencies rclcpp

在这里插入图片描述
使用tree查看目录结构:
在这里插入图片描述

ros2 pkg create 是用于在ROS 2中创建新包的命令。下面是该命令的主要参数以及它们的作用:

ros2 pkg create <package_name> --build-type <build_type> --dependencies <dependencies>
  • <package_name>: 指定功能包名称。替换<package_name>为你想要的包名称。
  • –build-type <build_type>: 这个选项指定了包的构建系统类型。ROS 2支持不同的构建系统,其中常见的选项包括:

ament_cmake: 使用CMake作为构建系统。
ament_python: 使用Python作为构建系统。
ament_cmake_python: 使用CMake和Python混合作为构建系统。

  • –dependencies : 这个选项指定了新包的依赖项。你可以列出包需要依赖的其他ROS 2包,以确保你的包能够使用它们的功能。在前面提到的例子中,–dependencies rclcpp 表示新包依赖于 ROS 2 的 C++ 客户端库 rclcpp。

这些参数一起允许你根据你的项目需求创建具有适当构建系统和依赖项的ROS 2包。创建包后,你可以在其中添加节点、服务、话题等ROS 2的组件,从而构建你的机器人应用程序。

3.创建节点

接着在example_cpp/src下创建一个node1.cpp文件,创建完成后的目录结构如下:
在这里插入图片描述
编写ROS2节点的一般步骤

1.导入库文件
2. 初始化客户端库
3. 新建节点对象
4. spin循环节点
5. 关闭客户端库

node.cpp文件源程序

#include "rclcpp/rclcpp.hpp"         // 1.导入库文件/*** @brief 创建一个类节点,名字叫做Node1, 继承自Node。* */
class Node1 : public rclcpp::Node
{
private:/* data */
public:Node1(std::string name) : Node(name){// 打印一句RCLCPP_INFO(this->get_logger(), "大家好,我是%s.",name.c_str());}
};int main (int argc , char **argv)
{// 2. 初始化客户端库rclcpp::init(argc, argv);// 3.新建节点对象auto node = std::make_shared<Node1>("node5");RCLCPP_INFO(node->get_logger(), "node5节点已经启动.");// 4.spin循环节点:运行节点,并检测退出信号 Ctrl+Crclcpp::spin(node);// 5.关闭客户端库: 停止运行rclcpp::shutdown();return 0;
}

4.配置CMakeLists

设置添加为可执行文件,并使用install指令将其安装到install目录。

# 生产可执行程序
add_executable(nodes src/node.cpp)
ament_target_dependencies(nodes rclcpp)# 使用install指令将其安装到install目录
install(TARGETSnodesDESTINATION lib/${PROJECT_NAME}
)

5.编译运行节点

注意以下都是在node_test的工作空间下执行的。

🍓编译节点

colcon build 是一个用于构建ROS 2工作区中所有包的命令。它是Colcon(CMake-based construction)构建工具的一部分,用于构建ROS 2项目。

colcon build

这个命令会在当前工作区中构建所有的ROS 2包。Colcon会检测工作区中的所有包,解决它们之间的依赖关系,并使用适当的构建系统(比如CMake或者ament_cmake)构建这些包
在这里插入图片描述
在构建过程中,Colcon会生成构建系统所需的构建文件,编译源代码,并生成可执行文件、库和其他构建产物。构建成功后,就可以运行你的ROS 2节点或者其他组件。

🍊source环境

当构建ROS 2软件包时,构建工具(Colcon)会将构建输出(编译生成的可执行文件、库等)安装到一个目录中,通常是 install 目录。然后,通过运行 source install/setup.bash 命令,可以将这些已经安装的软件包的路径添加到当前终端的环境变量中,使得 ROS 2 系统能够找到这些软件包。

source install/setup.bash

🍎 运行节点

在运行 source install/setup.bash 后,可以直接运行ROS 2软件包中的节点、服务等。注意这里的节点是在CMakeLists.txt中添加的可执行程序的名字的,即可执行节点

ros2 run example_cpp nodes
在这里插入图片描述

在程序中设置的节点名称是终端打印输出的。
在这里插入图片描述
ros2 run 是用于在ROS 2中运行可执行节点的命令。下面是该命令的结构和作用:

ros2 run <package_name> <executable_name>

  • <package_name>: 这是包含你要运行的节点的ROS 2功能包的名称。

  • <executable_name>: 这是要运行的节点的可执行文件的名称。

报错解决

  • rclcpp头文件找不到解决办法:
    将鼠标放在报错的#include “-------------------” 处,出现灯泡则点击灯泡图标,或者出现快速修复,则点击快速修复,并保存,然后修改如下文件,添加rclcpp的文件路径:/opt/*(不同的版本第三个名字不同的)
    在这里插入图片描述
  • No module named catkin_pkg.package
    解决文章链接:No module named catkin_pkg.package

三、ROS2常用指令

1.ros2 pkg create

命令功能:创建功能包,指定包名、编译方式、依赖项、节点名等
命令格式:ros2 pkg create <package_name> --build-type <build_type> --dependencies
具体参数作用参照前文。

2.ros2 pkg list

命令功能:查看系统中功能包列表
命令格式:ros2 pkg list

3.ros2 pkg executables

命令功能:查看包内可执行文件列表
命令格式: ros2 pkg executables <package_name>

4.点运行工具 ros2 run

命令功能:运行包内节点功能
命令格式:ros2 run <package_name> <node_name>

5.ros2 node list

命令功能: 查看当前域内(ROS_DOMAIN_ID相同的节点组)活动的节点列表
命令格式: ros2 node list

6.ros2 node info

命令功能: 查看节点详细信息,包括订阅、发布的消息,开启的服务和动作等
命令格式:ros2 node info <node_name>

结束语

感谢阅读吾之文章,今已至此次旅程之终站 🛬。

吾望斯文献能供尔以宝贵之信息与知识也 🎉。

学习者之途,若藏于天际之星辰🍥,吾等皆当努力熠熠生辉,持续前行。

然而,如若斯文献有益于尔,何不以三连为礼?点赞、留言、收藏 - 此等皆以证尔对作者之支持与鼓励也 💞。

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

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

相关文章

mac 使用brew卸载node

1.查看当前的node版本 node -v 2.查看使用brew 安装的版本&#xff0c;可以看到本机装了14、16、18版本的node brew search node 3.卸载node brew uninstall node版本号 --force 如分别删除14、16、18版本的node命令如下 brew uninstall node14 --force brew uninstall no…

使用AutoDL云计算平台训练并测试Pytorch版本NeRF代码

文章目录 前言一、数据集及代码获取二、租用并设置服务器三、Pycharm远程开发四、训练并测试代码 前言 因为第一次在云服务器上跑代码&#xff0c;所以在这里记录一下。 一、数据集及代码获取 nerf-pytorch项目是 NeRF 的忠实 PyTorch 实现&#xff0c;它在运行速度提高 1.3 倍…

PLM系统功能、彩虹PLM系统功能、产品数据管理系统

彩虹PLM系统的功能 产品数据管理 产品数据管理是 PLM 系统的核心功能之一&#xff0c;它主要包括以下几个方面&#xff1a; &#xff08;1&#xff09;数据存储&#xff1a;将产品的设计数据&#xff08;如 CAD 模型、图纸、BOM 等&#xff09;存储在统一的数据库中&#xf…

springmvc内嵌tomcat、tomcat整合springmvc、自研国产web中间件

springmvc内嵌tomcat、tomcat整合springmvc、自研国产web中间件 这是由于公司老项目转化springboot存在太多坑&#xff0c;特别是hibernate事务一条就坑到跑路&#xff0c;你又不想搞没听说过的国产中间件兼容&#xff0c;又不想搞weblogic、WebSphere等中间件的适配&#xff…

Gitlab中的CICD的使用方法

一、CI/CD执行机制 二、离线安装gitlab-runner 下载相应版本的gitlab-runner &#xff08;下载地址&#xff1a;https://packages.gitlab.com/runner/gitlab-runner&#xff09; dpkg -i gitlab-runner_12.8.0_amd64.debgitlab-runner register第3步中需要的信息可从下图所示…

AMEYA360报导:瑞萨宣布收购Transphorm,大举进军GaN

全球半导体解决方案供应商瑞萨电子与全球氮化镓(GaN)功率半导体供应商Transphorm, Inc.(以下“Transphorm”)于今天宣布双方已达成最终协议&#xff0c;根据该协议&#xff0c;瑞萨子公司将以每股5.10美元现金收购Transphorm所有已发行普通股&#xff0c;较Transphorm在2024年1…

Next.js 学习笔记(六)——缓存

缓存 Next.js 可通过缓存渲染工作和数据请求来提高应用程序的性能并降低成本。本页将深入介绍 Next.js 缓存机制、可用于配置这些机制的 API 以及它们之间的交互方式。 需要知道&#xff1a;本页将帮助你了解 Next.js 的工作原理&#xff0c;但这并不是使用 Next.js 提高工作效…

【VMware】Windows部署单机OA项目---图文并茂详细讲解

目录 一 准备工作 二 安装JDK 三 tomcat安装 ​四 MySQL安装 ①解压MySQL压缩包 ②my文件拷贝mysql安装根目录下 ③ 修改my文件 ④ 安装MySQL 4.1 注册mysql服务 4.2 初始化 4.3 启动MySQL 4.4 登入MySQL 4.5 修改默认的MySQL密码 五 连接MySQL 5.1 虚拟机连接MyS…

便携式灯具的UL测试标准UL153介绍

UL153标准&#xff1a;UL153标准主要是描述有关使用电源线及插头作为连接工具,使用120伏电压,15或20安培的电源,并符合美国国家电器规范的便携灯.此标准也适用于那些不用插头,而用一些兼容的接线端作为连接工具的便携灯&#xff0c;同时对于使用非120伏电压&#xff0c;15or20安…

计算机毕业设计——SpringBoot仓库管理系统(附源码)

1&#xff0c;绪论 1.2&#xff0c;项目背景 随着电子计算机技术和信息网络技术的发明和应用&#xff0c;使着人类社会从工业经济时代向知识经济时代发展。在这个知识经济时代里&#xff0c;仓库管理系统将会成为企业生产以及运作不可缺少的管理工具。这个仓库管理系统是由&a…

六西格玛绿带培训——实现完美操作的关键工具

当我们谈论六西格玛&#xff0c;我们不仅仅谈论一个管理工具或是企业流程改进的方法。我们谈的是一种愿景——实现几乎完美的操作。在SpaceX、在Tesla&#xff0c;我们每天努力实现这种精确度&#xff0c;因为即使是一丝一毫的疏漏&#xff0c;都可能成为我们星际野望无情的噩梦…

滑动条QSlider和进度条QProgressBar

1. 滑动条&#xff1a;QSlider 实例化 //实例化1 // QSlider* slider new QSlider(this);QSlider* slider new QSlider(Qt::Horizontal,this);//第一个参数使摆放方式2.1滑动条的基本函数 滑动条刻度的 位置 参数 QSlider::NoTicks //不要画任何标记 QSlider::TicksBoth…

高工微报告|智驾前视一体机趋势

传统智驾前视一体机赛道上&#xff0c;1V3R、1V5R产品如何升级备受关注。 根据日前调研获取的信息&#xff0c;1V3R、1V5R向轻量级行泊一体&#xff08;典型为5V5R12U方案&#xff0c;算力平台5-20TOPS&#xff09;迈进的具体市场空间&#xff0c;仍在验证阶段。 其中&#x…

c#图片作为鼠标光标

图片转换为鼠标光标代码如下&#xff1a; private void Form1_Load(object sender, EventArgs e) {//button1.Cursor System.Windows.Forms.Cursors.Hand;Bitmap bmp new Bitmap("780.jpg");Cursor cursor new Cursor(bmp.GetHicon());button1.Cursor cursor;} …

CSS进阶方法——复合选择器、元素显示、背景设置

1、复合选择器 复合选择器是建立在基础选择器之上&#xff0c;对基础选择器进行组合形成的。 复合选择器可以更准确、更高效的选择目标元素&#xff08;标签&#xff09;复合选择器是由两个或多个基础选择器&#xff0c;通过不同的方式组合而成的常用的复合选择器包括&#xf…

20240112-【UNITY 学习】实现第一人称移动教程

1、创建一个空物体&#xff0c;挂载Rigidbody组件&#xff0c;并设置相应参数 2、在上述空物体下创建一个胶囊体&#xff0c;两个空物体&#xff0c;一个用来控制朝向&#xff0c;另一个用来控制摄像机 3、给摄像机创建一个父物体&#xff0c;并挂载脚本MoveCamera_01.cs using…

“数据要素×”行动计划发布,粮食安全监管如何应变?

近日&#xff0c;国家数据局发布“数据要素”三年行动计划&#xff08;2024-2026年&#xff09;&#xff0c;在“数据要素现代农业“部分提到&#xff1a;提升农业综合生产能力&#xff0c;支持农业生产经营主体和相关服务企业融合利用气象、土壤、农事作业、病虫害、市场等数据…

wav2lip中文语音驱动人脸训练

1 Wav2Lip介绍 1.1 Wav2Lip概述 2020年&#xff0c;来自印度海德拉巴大学和英国巴斯大学的团队&#xff0c;在ACM MM2020发表了的一篇论文《A Lip Sync Expert Is All You Need for Speech to Lip Generation In The Wild 》&#xff0c;在文章中&#xff0c;他们提出一个叫做…

Jenkins基础篇--添加节点

节点介绍 Jenkins 拥有分布式构建(在 Jenkins 的配置中叫做节点)&#xff0c;分布式构建能够让同一套代码在不同的环境(如&#xff1a;Windows 和 Linux 系统)中编译、测试等。 Jenkins 运行的主机在逻辑上是 master 节点&#xff0c;下图是主节点和从节点的关系。 添加节点 …

2024年五款值得买的云服务器推荐,便宜又好用

作为多年站长使市面上大多数的云厂商的云服务器都使用过&#xff0c;很多特价云服务器都是新用户专享的&#xff0c;本文有老用户特价云服务器&#xff0c;阿腾云atengyun.com有多个网站、小程序等&#xff0c;国内头部云厂商阿里云、腾讯云、华为云、UCloud、京东云都有用过&a…