【ROS读书笔记】--- 2-1. 基础概念及示例篇

1.ROS安装

ROS的安装非常简单,再浏览器上搜索基本按照流程来都可以实现。这里给出官方的教程: 帮助文档

关于环境变量

ROS需要根据一些环境变量来定位文件。使用以下命令执行:

source /opt/ros/版本/setup.bash

版本可以是melodic,indigo等等,根据自己而定。
然后输入以下命令确认环境变量设置正确:

export | grep ROS

如果设置完成,会看到很多环境变量的值,否则,无输出。
尤其重要的是,以上命令只对当前shell起作用,为了使每一个shell都有用,我们需要操作账户根目录(操作如下)下的.bashrc文件,并再最后一行添加刚才的代码。

gedit ~/.bashrc

.bashrc应该是每个shell开启后会自启动的一个文件,类似于初始化


2.开启一个小例子

启动三个终端,分别执行以下命令:

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

将鼠标聚焦在第三个窗口,按键上下左右可以操作乌龟运动
乌龟运动
运行效果应如上图,后边的概念介绍将以此展开。


3.ROS的相关基本概念

下文将记录packages,master, node, topic,message和一些工具等等。

I . packages(功能包)

介绍

在ROS中所有软件都被组织为package的形式,最小结构包含cmakelist和package.xml。之前的两个tursim_node和turtle_teleop_key都属于turtlesim包。
注意:ROS软件包和操作系统软件包管理器中的包概念相似,但不等同:安装一个操作系统软件包可以添加一个或多个ROS软件包。


II . The Master(节点管理器)

The master是执行ROS软件的重要部分,负责节点之间的相互通信,要启动the master就要使用如下命令开启节点管理器:

roscore

除特殊情况外不应该关闭(Ctrl-C)节点管理器。
如果ROSCORE中断,重新打开后,当前运行的节点将无法建立新的连接。
打开the master的方式除了显示的roscore命令,还有roslaunch后文介绍。


III . Nodes(节点)

ROS的运行实例被称为节点(node)

  • 运行实例(running instance)很重要,如果同时执行相同程序的多个副本,确保每个副本采用不同的节点名,则每个节点被当作不同节点。
    在小例子中我们启动了两个节点:
  • 第一个是turtle_teleop_key的实例化,创建可视化窗口和海龟运动;
  • 第二个teleop是teltoperation(遥操作)的缩写,指的是人通过远程发送指令控制机器人。

IV . 话题和消息

介绍

ROS节点间进行通信所利用的机制就是消息传递。消息有组织的存放在话题里。

  • 消息传递的理念:一个节点可发布消息到一个或多个话题,一个节点可订阅一个或多个话题。
  • The master负责发布方和订阅方能找到对方
  • 消息是直接从发布节点到订阅节点,不经过The master.

rqt_graph工具

终端输入:

rqt_graph

可打开查看节点连接关系:椭圆表示节点,有向边表示其两端节点间的发布-订阅关系。下图表示:/teleop_turtle节点向/turtle1/cmd_vel发布消息,而/turtlesim节点订阅。
节点关系图,转自书籍
上图是隐藏了debug,如果取消hide/debug的话,会调出很多节点,包括rosout等等。默认隐藏了调试节点(rqt_graph也是一个节点)。

  • 所有节点都向话题/rosout发消息,该话题由同名的/rosout节点订阅
    比较好的一种设置方式是:将下拉选项中的nodes only改为nodes/topics(all), 并取消除debug以外的所有复选框。
    优点是: 矩形表示话题,椭圆形表示节点。
  • 小海龟并不关心或不知道哪些消息发布了cmd_vel消息,任何向这个话题发布消息的程序都可以控制小海龟。

用命令行发消息

多数时候发布消息的工作由特定的程序执行,但其实也可以通过rostopic命令行手动发布命令。
rostopic pub –r rate-in-hz topic-name message-type message-content
topic-name:话题名
message-content:按顺序提供消息类型中,所有域的参数值。
控制小海龟沿着Z轴(垂直于电脑屏幕)旋转如下:

rostopic pub –r 1 /turtle1/cmd_vel geometry_msgs/Twist ’[0,0,0]’ ’[0,0,1]’

明显的缺点是:开发者必须记住消息作用域和类型顺序。另一种替代方式是以YAML字典的形式给出一个参数,该参数将所有作用域进行赋值。

再理解消息类型

我们会发现ROS中每条消息都属一个特定的包。因此消息类型名总会包含一个斜杠,前边的名字就是包含它的包。
例如:Tur/Color

  • 消息类型: Tur/Color
  • 类型名称:Color
  • 功能包名: Tur
    既避免了命名冲突,又方便理解。

基本文件架构

这里借用奥特学院的一张图:

架构


4.问题检查

当ROS运行出现问题时,运行如下命令进行深入而全面的检测。

roswtf

检查内容包括:环境变量、安装的文件以及运行的节点。可惜的是roswtf检测的完整列表只能在python源码中才能找到。更多详见官方文档:点击此处

5.展望

明日整理一下关于ROS的常用命令以及今天遗留的关于消息的补充知识。。◕‿◕。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值