机器人操作系统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

相关文章

SpringCloud Stream 快速入门实例教程

《SpringCloudStream快速入门实例教程》本文介绍了SpringCloudStream(SCS)组件在分布式系统中的作用,以及如何集成到SpringBoot项目中,通过SCS,可... 目录1.SCS 组件的出现的背景和作用2.SCS 集成srping Boot项目3.Yml 配置4.Sprin

GO语言zap日志库理解和使用方法示例

《GO语言zap日志库理解和使用方法示例》Zap是一个高性能、结构化日志库,专为Go语言设计,它由Uber开源,并且在Go社区中非常受欢迎,:本文主要介绍GO语言zap日志库理解和使用方法的相关资... 目录1. zap日志库介绍2.安装zap库3.配置日志记录器3.1 Logger3.2 Sugared

深入理解Redis线程模型的原理及使用

《深入理解Redis线程模型的原理及使用》Redis的线程模型整体还是多线程的,只是后台执行指令的核心线程是单线程的,整个线程模型可以理解为还是以单线程为主,基于这种单线程为主的线程模型,不同客户端的... 目录1 Redis是单线程www.chinasem.cn还是多线程2 Redis如何保证指令原子性2.

深入理解MySQL流模式

《深入理解MySQL流模式》MySQL的Binlog流模式是一种实时读取二进制日志的技术,允许下游系统几乎无延迟地获取数据库变更事件,适用于需要极低延迟复制的场景,感兴趣的可以了解一下... 目录核心概念一句话总结1. 背景知识:什么是 Binlog?2. 传统方式 vs. 流模式传统文件方式 (非流式)流

深入理解Go之==的使用

《深入理解Go之==的使用》本文主要介绍了深入理解Go之==的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录概述类型基本类型复合类型引用类型接口类型使用type定义的类型不可比较性谈谈map总结概述相信==判等操作,大

SpringMVC配置、映射与参数处理​入门案例详解

《SpringMVC配置、映射与参数处理​入门案例详解》文章介绍了SpringMVC框架的基本概念和使用方法,包括如何配置和编写Controller、设置请求映射规则、使用RestFul风格、获取请求... 目录1.SpringMVC概述2.入门案例①导入相关依赖②配置web.XML③配置SpringMVC

MySQL索引踩坑合集从入门到精通

《MySQL索引踩坑合集从入门到精通》本文详细介绍了MySQL索引的使用,包括索引的类型、创建、使用、优化技巧及最佳实践,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录mysql索引完整教程:从入门到入土(附实战踩坑指南)一、索引是什么?为什么需要它?1.1 什么

Java Lettuce 客户端入门到生产的实现步骤

《JavaLettuce客户端入门到生产的实现步骤》本文主要介绍了JavaLettuce客户端入门到生产的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录1 安装依赖MavenGradle2 最小化连接示例3 核心特性速览4 生产环境配置建议5 常见问题

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Linux中查看操作系统及其版本信息的多种方法

《Linux中查看操作系统及其版本信息的多种方法》在服务器运维或者部署系统中,经常需要确认服务器的系统版本、cpu信息等,在Linux系统中,有多种方法可以查看操作系统及其版本信息,以下是一些常用的方... 目录1. lsb_pythonrelease 命令2. /etc/os-release 文件3. h