ros(28):ros基础知识学习:roscore、ros master、ros::init()、roslaunch

发布于:2023-01-28 ⋅ 阅读:(640) ⋅ 点赞:(0)

目录

1. roscore

1.1 简介:

1.2 默认使用方式

(1)roscore启动时

(2)roslaunch 启动时

1.3 更改ROS_MASTER_URI

1.3.1 临时修改

1.3.2 永久修改

2. ROS Master 主节点

2.1 简介

2.2 数据传输/程序接口

2.2.1 API

2.2.2 XMLRPC

3 ros::init()

3.1 简介

3.2 使用样式

3.2.1 参数介绍  

3.2.2 常见使用方式

3.2.3 ros::init_options

参考链接:


1. roscore

1.1 简介:

        roscore是节点和程序的集合,这些节点和程序是基于ROS的系统所必需的,于是可以称为ros核心core服务即名字。必须运行 roscore 才能使 ROS 节点进行通信。它是使用 roscore 命令启动的。

注:注意:如果使用 roslaunch,当检测到 roscore 尚未运行,将自动启动 roscore(除非提供 --wait 参数)。

roscore命令这个会启动:

        ·a ROS Master (即ros系统中用于通信的主机/主节点

        ·a ROS Parameter Server(ros参数服务器)

        ·a rosout logging node(一个输出日志节点)

1.2 默认使用方式

        默认使用方式不改变ROS_MASTER_URI(即ros系统中主机的统一位置表示符),

(1)roscore启动时

ROS_MASTER_URI默认为http://meng:11311/(meng为计算机名)

(2)roslaunch 启动时

ROS_MASTER_URI默认为:http://localhost:11311

我觉得是因为roslaunch启动默认将 ROS_MASTER_URI 进行了替换,在下面这个ros自带文件中,每次启动roslaunch都会默认替换ROS_MASTER_URI为http://localhost:11311

/opt/ros/kinetic/etc/catkin/profile.d/10.roslaunch.sh

# roslaunch/env-hooks/10.roslaunch.sh

if [ ! "$ROS_MASTER_URI" ]; then #意思应该是ROS_MASTER_URI不存在时
  export ROS_MASTER_URI=http://localhost:11311
fi

示例:

新建一个空的launch文件

<?xml version="1.0" encoding="UTF-8"?>
<launch>

</launch>

1.3 更改ROS_MASTER_URI

此时需要提前声明变量或在环境配置文件 .bashrc 里面修改/添加ros主机的统一位置标识符这个全局变量声明,两种方式:

1.3.1 临时修改

声明变量方式为一次性的,只在当前终端内有效。(如下图)

# 修改示例
# export ROS_MASTER_URI=http://YourPC:1234/
export ROS_MASTER_URI=http://meng:1234/

左侧终端输入:

export ROS_MASTER_URI=http://meng:1234/
# 这里更改了端口port号,roscore后面需要加上
roscore -p 1234

ROS_MASTER_URI为http://meng:1234/

 右侧终端输入:

roscore

ROS_MASTER_URI为默认的http://meng:11311/

但感觉会比较鸡肋,在当前终端启动roscore,在别的终端启动程序无法和当前终端通信。。。

1.3.2 永久修改

在环境配置文件 .bashrc 里面修改/添加 是永久性的,不过,为了避免出现问题,一般不建议修改啦

修改:

sudo gedit ~/.bashrc
#添加 ROS_MASTER_URI=http://meng:1234/ 这条语句

source ~/.bashrc

示例:

可以发现该修改更加“全局”,能够正常使用,不过启动roscore时也需要带上 -p 1234

2. ROS Master 主节点

2.1 简介

        ROS 主节点为 ROS 系统中的其余节点提供命名和注册服务。它跟踪主题和服务的发布者和订阅者。主节点的作用是使各个 ROS 节点能够相互定位。一旦这些节点彼此定位,它们就会相互通信。

        主节点还提供参数服务器。

        主节点通常使用 roscore 命令运行,该命令将 ROS 主服务器与其他基本组件一起加载。

2.2 数据传输/程序接口

        ROS Master提供了一个基于XMLRPC的API,ROS客户端库(如roscpp和rospy)调用该API来(与ROS 服务端)存储和检索信息。但大多数 ROS 用户不需要直接与此 API 交互。

2.2.1 API

        API(Application Program Interface)被定义为应用程序可用以与计算机操作系统/网络操作系统交换信息和命令的标准集。

2.2.2 XMLRPC

        xml rpc是使用http协议做为传输协议rpc机制,使用xml文本的方式传输命令和数据。一个rpc系统,必然包括2个部分:1.rpc client,用来向rpc server调用方法,并接收方法的返回数据;2.rpc server,用于响应rpc client的请求,执行方法,并回送方法执行结果。RPC是Remote Procedure Call的缩写,翻译成中文就是远程过程调用,是一种在本地的机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算”,是为了提高各个分立机器的“互操作性”而发明出来的技术。

3 ros::init()

3.1 简介

        ros::init()函数作用:用以初始化节点。这为 ROS 提供了命令行参数,并允许您命名节点并指定其他选项。

3.2 使用样式

通常,ros::init() 的形式符合:

void ros::init(<command line or remapping arguments>, \
std::string node_name, uint32_t options);

#或
void ros::init(argc, argv, \
std::string node_name, uint32_t options);

3.2.1 参数介绍  

argc and argv(或<command line or remapping arguments>)

        ROS 使用它们从命令行解析重新映射参数。

node_name:

        这是将分配给节点的名称,除非它被其中一个重新映射参数覆盖。节点名称在整个 ROS 系统中必须是唯一的。如果第二个节点以与第一个节点相同的名称启动,则第一个节点将自动关闭如果您希望运行多个相同的节点而不必担心唯一地命名它们,则可以使用下面描述的init_options::AnonymousName选项

options:        

        这是一个可选参数,允许您指定更改 roscpp 行为的某些选项。该字段是位字段,因此可以指定多个选项。

3.2.2 常见使用方式

两个ros::init()函数最常见的使用方式为:

ros::init(argc, argv, "my_node_name");

ros::init(argc, argv, "my_node_name", ros::init_options::AnonymousName);

这种使用方式可以尝试用多个launch文件启动一个节点(可以分别配置不同参数)

3.2.3 ros::init_options

ros::init_options::NoSigintHandler

        不要安装 SIGINT 处理程序。在这种情况下,您应该安装自己的 SIGINT 处理程序,以确保节点在退出时正确关闭。请注意,SIGINT 的默认操作往往是终止进程,因此,如果要执行自己的 SIGTERM 处理,则还必须使用此选项。

ros::init_options::AnonymousName

        匿名化节点名称。在节点名称的末尾添加一个随机数,以使其唯一。

ros::init_options::NoRosout

        不要将 rosconsole 输出广播到 /rosout 主题。

4 roslaunch

4.1 简介

        roslaunch是一个工具,用于通过SSH在本地和远程轻松启动多个ROS节点,以及在参数服务器上设置参数。它包括自动重生已经死亡的进程的选项。roslaunch 接收一个或多个 XML 配置文件(扩展名为 .launch),这些文件指定要设置的参数和要启动的节点,以及应运行它们的计算机。

4.2 roslaunch参数赋值顺序

        roslaunch 在一次传递中评估 XML 文件(.launch文件),按深度优先遍历顺序进行处理。

        按顺序评估标记,最后一个设置优先。因此,如果一个参数有多个设置,则将使用为该参数指定的最后一个值。

参考链接:

roscore :

roscore - ROS Wiki

ros master

Master - ROS Wiki

百度百科:XMLRPC、API

xmlrpc_百度百科

API(应用程序界面)_百度百科

ros::init():

roscpp/Overview/Initialization and Shutdown - ROS Wiki

roslaunch:

roslaunch - ROS Wiki

本文含有隐藏内容,请 开通VIP 后查看