【ROS2】节点

文章目录

  • ROS2 节点
    • 示例:创建并运行成功一个节点
      • 1. 创建功能包
      • 2. 编写源文件、CMakeLists.txt、package.xml
      • 3. 编译功能包
      • 4. 设置环境变量
      • 5. 运行节点
      • 6. 查看节点
    • 参考链接

ROS2 节点

机器人的每一项功能,都被称为是一个节点。

  • 每个节点都是一个独立的可执行程序;
  • 每个节点都可以用不同的编程语言来编写、编译得到;
  • 一个机器人的众多节点可能分布在不同的计算机上(分布式);
  • 每个节点都需要一个唯一的命名。

示例:创建并运行成功一个节点

1. 创建功能包

cd ~/dev_ws/src
ros2 pkg create --build-type ament_cmake learning_node

2. 编写源文件、CMakeLists.txt、package.xml

learning_node/src/node_helloworld.cpp

#include <unistd.h>
#include "rclcpp/rclcpp.hpp"/*** 创建一个 HelloWorld 节点, 初始化时输出 “hello world” 日志*/
class HelloWorldNode : public rclcpp::Node
{
public:HelloWorldNode(): Node("node_helloworld_class")                      {while(rclcpp::ok())                                  {RCLCPP_INFO(this->get_logger(), "Hello World");  sleep(1);                                        }}
};// ROS2 节点主入口 main 函数
int main(int argc, char *argv[])                               
{// ROS2 C++ 接口初始化rclcpp::init(argc, argv);        // 创建 ROS2 节点对象并进行初始化                 rclcpp::spin(std::make_shared<HelloWorldNode>()); // 关闭 ROS2 C++ 接口rclcpp::shutdown();                               return 0;
}

learning_node/src/CMakeLists.txt

cmake_minimum_required(VERSION 3.8)
project(learning_node_cpp)if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")add_compile_options(-Wall -Wextra -Wpedantic)
endif()# find dependencies
find_package(ament_cmake REQUIRED)
# uncomment the following section in order to fill in
# further dependencies manually.
# find_package(<dependency> REQUIRED)find_package(rclcpp REQUIRED)                                              # 人为添加add_executable(node_helloworld_class src/node_helloworld_class.cpp)        # 人为添加
ament_target_dependencies(node_helloworld_class rclcpp)                    # 人为添加install(TARGETSnode_helloworld_classDESTINATION lib/${PROJECT_NAME})                                         # 人为添加if(BUILD_TESTING)find_package(ament_lint_auto REQUIRED)# the following line skips the linter which checks for copyrights# comment the line when a copyright and license is added to all source filesset(ament_cmake_copyright_FOUND TRUE)# the following line skips cpplint (only works in a git repo)# comment the line when this package is in a git repo and when# a copyright and license is added to all source filesset(ament_cmake_cpplint_FOUND TRUE)ament_lint_auto_find_test_dependencies()
endif()ament_package()

learning_node/src/package.xml

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3"><name>learning_node_cpp</name><version>0.0.0</version><description>TODO: Package description</description><maintainer email="wynhelloworld@gmail.com">wyn</maintainer><license>TODO: License declaration</license><buildtool_depend>ament_cmake</buildtool_depend><test_depend>ament_lint_auto</test_depend><test_depend>ament_lint_common</test_depend><export><build_type>ament_cmake</build_type></export>
</package>

3. 编译功能包

cd ~/dev_ws
colcon build   # 编译工作空间的所有功能包

4. 设置环境变量

cd ~/dev_ws
source install/local_setup.sh # 仅在当前终端生效
echo " source ~/dev_ws/install/local_setup.sh" >> ~/.bashrc # 所有终端均生效

5. 运行节点

ros2 run learning_node node_helloworld

image-20240512170215675

6. 查看节点

  • ros2 node list:查看正在运行的节点

    image-20240512170714292

  • ros2 node info [options] node_name:显示节点信息

    image-20240512170756327

参考链接

https://book.guyuehome.com/ROS2/2.%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5/2.3_%E8%8A%82%E7%82%B9/

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

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

相关文章

ASP.NET一种多商家网络商店的设计与实现

摘 要 21世纪是网络的世纪&#xff0c;电子商务随之将成为主流商业模式&#xff0c;多商家网络商店系统就是一个C2C型的电子商务系统。本文详细论述了采用ASP.NET 2005 和 SQL Server 2000等技术实现的一个多商家网络商店的过程。论文首先阐述了本设计题目的选题意义、背景&a…

Swift 使用枚举协议CaseIterable遍历枚举所有值

在Swift中&#xff0c;可以使用.allCases属性来枚举一个符合CaseIterable协议的枚举的所有情况。使用不同的方法&#xff0c;如for-in循环&#xff0c;reduce&#xff0c;filter和map函数&#xff0c;你可以迭代一个枚举。 什么是CaseIterable协议&#xff1f; CaseIterable是…

香港虚拟主机哪里可以试用?用于企业建站的

香港虚拟主机适合个人、企业建站&#xff0c;包括外贸企业网站、个人博客网站、中小企业官网等&#xff0c;那么作为新手不知道哪家香港虚拟主机好用的时候&#xff0c;该如何找到可以试用的香港虚拟主机呢&#xff1f; 香港虚拟主机也称作香港空间、香港虚拟空间&#xff0c;…

【Unity】Unity项目转抖音小游戏(二)云数据库和云函数

业务需求&#xff0c;开始接触一下抖音小游戏相关的内容&#xff0c;开发过程中记录一下流程。 抖音云官方文档&#xff1a;https://developer.open-douyin.com/docs/resource/zh-CN/developer/tools/cloud/develop-guide/cloud-function-debug 1.开通抖音云环境 抖音云地址&a…

C++string 类的常用方法

string (构造函数) (1) default 构造长度为零字符的空字符串。 (2) copy 构造 str 的副本。 (3) substring 复制从字符位置 pos 开始并跨越 len 字符的 str 部分&#xff08;如果任一 str 太短或 len 为 string&#xff1a;&#xff1a;npos&#xff0c;则复制 str 的末尾…

代码随想录训练营Day30:动态规划2

1.62不同路径 dp[i][j]数组的定义&#xff1a;到达坐标&#xff08;i&#xff0c;j&#xff09;所需要的路径个数。递推公式&#xff1a;dp[i][j] dp[i-1][j]dp[i][j-1];//到达&#xff08;i&#xff0c;j&#xff09;的上一步只能是从上面到或者左边到初始化&#xff1a;对于…

Leaflet.canvaslabel在Ajax异步请求时bindPopup无效的解决办法

目录 前言 一、场景重现 1、遇到问题的代码 2、问题排查 二、通过实验验证猜想 1、排查LayerGroup和FeatureGroup 2、排查Leaflet.canvaslabel.js 三、柳暗花明又一村 1、点聚类的办法 2、歪打正着 总结 前言 在上一篇博客中介绍了基于SpringBoot的全国风景区WebGIS按…

Flutter 中的 Card 小部件:全面指南

Flutter 中的 Card 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;Card 是一个用于呈现内容的容器&#xff0c;它带有圆角边缘和阴影效果&#xff0c;常用于展示信息块&#xff0c;如用户头像、相册、笔记或任何需要突出显示的内容。Card 小部件提供了一种简单而直观的…

unity---常用API

1. Vector3&#xff1a;结构体由x、y、z这3个数值组成&#xff0c;表示一个向量 magnitude变量返回该向量的长度normalized变量返回 magnitude 为 1 时的该向量zero静态变量Vector3(0, 0, 0)one静态变量Vector3(1, 1, 1)forward静态变量Vector3(0, 0, 1)back静态变量Vector3(0…

Flutter 中的 Stack 小部件:全面指南

Flutter 中的 Stack 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;Stack 是一个用于叠加多个小部件的布局小部件。它允许你将多个小部件重叠放置&#xff0c;通过控制每个小部件的位置和大小&#xff0c;你可以创建出复杂的布局效果&#xff0c;如徽章图标、对话框、…

pandas DataFrame 常用遍历方法

在Pandas中&#xff0c;可以使用多种方法遍历DataFrame中的数据。以下是几种常见的方法&#xff1a; 基于索引遍历DataFrame的每一行。 基于行号遍历DataFrame的每一行, 该方式通过行号获取行数据信息&#xff0c;格式为Series&#xff0c;无法获取改行的index信息。 使用iterr…

1.8. 离散时间鞅-无界停时定理与随机游走

无界停时定理与随机游走 无界停时定理与随机游走1. 无界停时定理1.1. 一致可积1.2. 非一致可积2. 应用于随机游动-鞅方法2.1. 随机游走构造的鞅2.2. 对称简单随机游走无界停时定理与随机游走 1. 无界停时定理 本节给出一致可积下鞅的无界停时定理,说明一致可积下鞅的停止过程…

Agent AI智能体:未来社会的角色、发展与挑战

Agent AI智能体在未来社会中的角色、发展路径以及可能带来的挑战是一个非常值得关注的话题。让我们来深入探讨一下这些方面。 1. 角色与应用场景 Agent AI智能体是指具有自主决策能力和执行能力的人工智能系统&#xff0c;它们可以代表个人或组织执行各种任务和活动。在未来社…

大学课程中的算法java实现【学习算法】

大学课程中的算法java实现【学习算法】 前言前言推荐离散数学Warshall算法 P102可达性矩阵 P187欧拉图 Fleury算法 P201最小生成树 P234哈夫曼数 P240 数据结构与算法计算机操作系统最后 前言 这是陈旧已久的草稿2023-04-22 23:20:38 这是准备自己用java实现大学课程中所有遇…

免疫优化算法(Immune Optimization Algorithm)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 算法背景 免疫算法是一种模拟生物免疫系统的智能优化算法。想象一下&#xff0c;当我们的身体遇到病毒或细菌侵袭时&#xff0c;免疫系统会启动…

mysql 事物

MySQL中的事务&#xff08;Transaction&#xff09;是一个确保数据完整性和一致性的重要概念。它将一组SQL操作捆绑在一起&#xff0c;当作一个单一的工作单元来执行。事务具备以下四个关键特性&#xff0c;即ACID特性&#xff1a; 原子性&#xff08;Atomicity&#xff09;&am…

DHCP原理

什么是DHCP DHCP (Dynamic Host Configuration Protocol,动态主机配置协议&#xff09;是由Internet工作任务小组设计开发的&#xff0c;专门用于为TCP/IP网络中的计算机自动分配TCP/IP参数的协议&#xff0c;是一个应用层协议&#xff0c;使用UDP的67和68端口。 DHCP的前身是B…

Windows下安装 Emscripten 详细过程

背景 最近研究AV1编码标准的aom编码器&#xff0c;编译的过程中发现需要依赖EMSDK&#xff0c;看解释EMSDK就是Emscripten 的相应SDK&#xff0c;所以此博客记录下EMSDK的安装过程&#xff1b;因为之前完全没接触过Emscripten 。 Emscripten Emscripten 是一个用于将 C 和 …

[hpssupfast@mailfence.com].Elbie勒索病毒如何恢复数据和预防

[hpssupfastmailfence.com].Elbie是一种新型勒索病毒,快速恢复重要数据请添加技术服务号(safe130)。以下是关于elbie勒索病毒的详细信息&#xff1a; 病毒介绍&#xff1a; elbie勒索病毒&#xff0c;也称为PHOBOS勒索软件&#xff0c;它通过加密文件并要求支付赎金以恢复对文…

涉案财物管理系统|DW-S405系统全国都有案例

涉案财物管理系统&#xff08;智财物&#xff1a;DW-S404&#xff09;是一套成熟系统&#xff0c;依托互3D技术、云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对涉密载体进行统一管理、分析的信息化、智能化、规范化的系统。 涉案财物管理系统主要实现对涉案物品进…