机器人操作系统ROS Indigo 入门学习(6)——理解ROS Nodes

2024-05-25 12:32

本文主要是介绍机器人操作系统ROS Indigo 入门学习(6)——理解ROS Nodes,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 1.理解ROS Node

这个教程将会介绍ROS图的概念并且会讨论roscoe,rosnode,和rosrun命令行工具。

 

1.1前提

在这个教程中我们会用到小型仿真器,请安装

 

$ sudo apt-get install ros-<distro>-ros-tutorials

<distro>是你的版本名字

1.2图概念的概论

Nodes:node是使用ROS去和其它node通信的可执行文件。

Messages:ROS中订阅或者发布给topic的一种数据形式

Topics:Nodes可以发布messages给一个topic,也可以订阅一个topic去接受它的messages

Master:为ROS提供名称服务(比如帮助nodes找到彼此)

rosout:相当于ROS中的stdout/stderr

roscore:Master+rosout+parameter server(参数服务之后会介绍)

 

1.3 Nodes

Node不过是ROS package中一个可执行文件。ROS node 利用ROS用户库去和其他node进行通信。nodes也可以topic发起发布或者订阅,nodes也可以提供或者使用一个service.

 

1.4用户库

用户库允许用不同语言编写的nodes之间进行通信:

rospy = Python client library 

roscpp = c++ client library 

 

1.5roscore

roscore是使用ROS时第一个要使用的工具

$ roscore

 

输出:

... logging to /home/ros/.ros/log/add59068-aab1-11e4-99b0-6c71d92ff4a1/roslaunch-ros-K45VD-17626.log

Checking log directory for disk usage. This may take awhile.

Press Ctrl-C to interrupt

Done checking log file disk usage. Usage is <1GB.

 

started roslaunch server http://ros-K45VD:42183/

ros_comm version 1.11.10

 

 

SUMMARY

========

 

PARAMETERS

 * /rosdistro: indigo

 * /rosversion: 1.11.10

 

NODES

 

auto-starting new master

process[master]: started with pid [17638]

ROS_MASTER_URI=http://ros-K45VD:11311/

 

setting /run_id to add59068-aab1-11e4-99b0-6c71d92ff4a1

process[rosout-1]: started with pid [17651]

started core service [/rosout]

 

如果roscore没有初始化,你也许会遇到网络配置问题。查看Network Setup - Single Machine Configuration解决.

如果roscore没有初始化并且说缺少权限,也许是~/.ros文件夹的用户是root,可以用一下命令递归改变文件夹的所有者:

$ sudo chown -R <your_username> ~/.ros

 

1.6使用rosnode

打开一个新的终端(前面那个roscore不要关闭),你的环境变量会重置,~/.bashrc被启用了,如果运行rosnode等命令时有问题时,需要添加一些环境变量setup文件去使这些命令到~/.bashrc中,或者手动使它们生效。

rosnode显示了关于正在运行的ros node的信息。rosnode list列出活动的node.

$ rosnode list

 

可以看到:

/rosout

这告诉我们这里只有一个node在运行。这个node总是在运行因为它会收集和记录node的调试信息。

 

rosnode info命令可以返回特定node的信息

$ rosnode info /rosout

 

输出:

------------------------------------------------------------------------

Node [/rosout]

Publications:

 * /rosout_agg [rosgraph_msgs/Log]

 

Subscriptions:

 * /rosout [unknown type]

 

Services:

 * /rosout/set_logger_level

 * /rosout/get_loggers

 

contacting node http://machine_name:54614/ ...

Pid: 5092

接下来让我们看看其他的nodes。我们打算用rosrun去运行另一个node。

 

1.7使用rosrun

rosrun允许你在一个package中去用package的名字直接运行一个node(不需要知道package的路径)。

用法:

$ rosrun [package_name] [node_name]

 

因此我们可以利用rosrun去运行在turtlesim的package中turtlesim_node

在一个新的终端中运行:

$ rosrun turtlesim turtlesim_node

你会在窗口看到:

 

 

在一个新终端中运行:

$ rosnode list

将会看到:

/rosout

/turtlesim

ROS一个强大的特点是可以在命令行重命名。

关闭窗口,再用Remapping Argument重新命名node

$ rosrun turtlesim turtlesim_node __name:=my_turtle

 

再次运行:

$ rosnode list

看到:

/rosout

/my_turtle

如果用Ctrl+c结束进程而不是关闭turtle的窗口那么在rosnode list时还会看到之前关闭的node,可以用rosnode cleanup清理。

 

 

 再看看新的/my_turtle node,用rosnode ping命令去测试它是否正在运行:

$ rosnode ping my_turtle

rosnode: node is [/my_turtle]

pinging /my_turtle with a timeout of 3.0s

xmlrpc reply from http://aqy:42235/     time=1.152992ms

xmlrpc reply from http://aqy:42235/     time=1.120090ms

xmlrpc reply from http://aqy:42235/     time=1.700878ms

xmlrpc reply from http://aqy:42235/     time=1.127958ms

 

1.8回顾

roscore = ros +core:master(提供ros的命名服务)+rosout(stdout/stderr)+ parameter server (参数服务之后会介绍);

rosnode = ros +node ;ros用来获取关于node信息的工具;

rosrun = ros + run;从一个给定的package运行一个node.

 

既然你已经理解ros node 是怎样工作的了,再来看看ros的topic怎样工作的

这篇关于机器人操作系统ROS Indigo 入门学习(6)——理解ROS Nodes的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001506

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言