一、Ubuntu基础

1.1 基本操作

 1. 文件目录切换

pwd       #显示当前目录路径

cd xxx    # 进入想进入的目录
cd ..     # 返回上一级目录

 2. 创建文件和文件夹

touch 文件名    # 创建文件
mkdir 文件夹名  # 创建文件夹

 3. 复制移动文件、文件夹

cp 目标文件 目标目录         # 复制某个文件到某个目录下
cp -r 目标文件夹 目标目录    # 复制某个文件夹下的所有内容到某个目录下
mv 目标文件 目标目录         # 移动某个文件到某个目录下
mv 目标文件夹 目标目录       # 移动某个文件夹下的所有内容到某个目录下 

 4. 删除文件、文件夹

rm 文件
rm -r 文件夹

 5. 解压

unzip xxx.zip          # 解压xxx.zip包到当前目录
tar -zxvf xxx.tar.gz   # 解压xxx.tar包到当前目录

 6. 运程登录系统,如远程登录用户名为 HwHiAiUser 且 ip 地址为 192.168.1.2 的系统

ssh xxx@ip
ssh HwHiAiUser@192.168.1.2

 7. 进入 root 模式

sudo passwd root  # 为root用户设置密码
su root           # 进入root用户
exit              # 退出root用户

 8. 查看文件内容

nl xxx  # 查看xxx文件内容(显示行号)

1.2 文本编辑

 1. 在 ubuntu 中我们通常会使用 vim 编辑器

 2. 若未安装需要在终端输入下面命令进行安装

sudo apt-get install vim

 3. 如 vim test.txt,若 test.txt 文件存在则编辑,不存在则自动新建文件并编辑

vim test.txt

 4. vim 默认是以只读模式打开的文档;要对其进行输入需要切换到输入模式,切换到输入模式的命令如下:

i:在当前光标所在的字符前面,转为输入模式;

I: 在当前光标所在行的行首,转换为输入模式;

a:在当前光标所在字符的后面,转换为输入模式;

A:在光标所在的行尾,转换为输入模式;

o:在当前光标所在行的下方,新建一行,并转为输入模式;

O:在当前光标所在行的上方,新建一行,并转为输入模式;

s:删除光标所在字符;

r:替换光标处字符;

 最常用的是 a,在键盘按下 a 后,终端左下角会提示 “ 插入(insert)” 字样。

在这里插入图片描述

 5. 编辑完成后需要保存。我们需要从 vim 现在的输入模式切换到指令模式,方式就是按下键盘的 ESC 键,按下 ESC 键以后终端坐下角的“插入”字样就会消失;然后在指令模式下输入 “:” 进入底行模式。

在这里插入图片描述

 6. 在图中当进入底行模式以后会在终端的左下角就会出现符号“:”,我们可以在“:”后面输入命令,常用的命令如下:

x:保存当前文档并且退出。

q:退出

w:保存文档

q!:退出 vim,不保存文档

 如果我们要退出并保存文本的话需要在“:”底行模式下输入 “wq”,如图所示:

在这里插入图片描述

 在 “:” 底行模式下输入 “wq” 以后按下回车键就保存 test.txt 并退出 vim 编辑器,退出以后我们可以使用命令 “cat” 来查看刚刚新建的 test.txt 文档的内容。

 7. 编译系统文件时,需要加上 sudo,如下面这条指令

sudo vim ~/.bashrc

 8. 在非编辑模式下,按 gg 可使光标跳到第一行,按 G 可使光标跳到最后一行,按 ~ 可以使光标处的字母进行大小写转换。

二、ROS基础介绍

2.1 概念与特点

 1. ROS(Robot Operating System)是一个为机器人软件开发提供灵活框架的开源元操作系统。它主要用于编写机器人软件程序,并具备高度的灵活性。ROS为机器人提供了一个软件平台,类似于操作系统为计算机提供的功能。具体来说,ROS提供了硬件抽象、底层设备控制、常用功能实现、进程间消息传递以及包管理等功能。

 2. ROS的特点如下:

在这里插入图片描述

2.2 基本结构

 1. ROS工程的基本结构如下图所示:

在这里插入图片描述

 (1) catkin workspace 是用户创建的工程文件目录(可以任意命名),包含整个工程。
 (2) src 目录是用户创建的功能包集合(不能修改名称),包含一个或多个功能包。
 (3) 使用 catkin_make 指令编译之后,将生成 build 目录和 devel 目录。

 2. ROS功能包的基本结构如下所示:

在这里插入图片描述

2.3 创建工程

 1. 一个工程创建模板如下:

mkdir test_ws/src -p             # 创建一个名称为test_ws的工作空间(ROS工程)
cd test_ws/src   
catkin_create_pkg test1 roscpp   # 创建一个功能包
cd ..
catkin_make                      #编译
source devel/setup.bash          #刷新环境
roscd test1                      #验证程序包是否成功编译安装,如果能跳转到test1目录下,即为成功                              

在这里插入图片描述

在这里插入图片描述
注意:catkin 编译之前需要回到工作空间目录,catkin_make 在其他路径编译下不会成功。编译完成后,一定要使用 source 命令刷新环境,使得系统能够找到新生成的 ROS 可执行文件,否则将出现无法找到可执行文件等错误。

 2. 在有多个功能包下,仅编译一个包需要输入以下指令:

catkin_make --pkg ROS包名
#如:
catkin_make --pkg test1

 3. 编译好并配置环境的 package 包能够使用 ROS 文件系统工具 roscd(相当于 cd 的改进版)找到。roscd ROS包名 可以直接跳转到 ROS 包的目录下,且输入 ROS 包名时,支持 Tab 键自动补齐。

2.4 节点和节点管理器

 1. 在 ROS(Robot Operating System,机器人操作系统)系统中,节点(Node)是一个核心概念。从程序角度来看,节点是 ROS 程序包中的一个可执行文件,可以理解为一个main函数。这些可执行文件在运行之后成为进程,这些进程在 ROS 中就被称为节点。节点可以通过 ROS 客户库与其他节点进行通信,从而构成一个分布式系统。

 2. 每个节点负责机器人的一个或多个单独功能,例如,可能有一个节点控制底盘轮子的运动,另一个节点驱动摄像头获取图像,还有节点负责根据传感器信息进行路径规划等。这种分布式的设计方式有助于降低程序发生崩溃的可能性,并使得模块间的通信和异常处理更为便捷。

 3. 运行一个节点的指令为:rosrun ros包名 节点名称;比如:rosrun test1 sayhello:节点在系统中的名称必须是唯一的。

 4. ROS 系统中的节点管理器是一个核心组件,扮演着 ROS 名称服务的角色,帮助节点找到彼此并建立通信。节点管理器通常使用 roscore 命令运行。

2.5 启动文件

 1. 通常一个机器人运行操作时要开启很多个节点,对于一个复杂的机器人的启动操作并不需要每个节点依次运行 rosrun 指令,ROS 提供了一个能一次性启动 master 和多个 node 的命令,即 roslaunch 命令,它的用法为:

roslaunch pkg_name file_name.launch

三、ROS通信机制

3.1 话题

 1. ROS(Robot Operating System,机器人操作系统)的通信机制是其核心功能之一,而话题(Topic)通信是其中最常用且基础的一种通信方式。话题通信基于发布/订阅模式,允许一个节点发布消息到特定的话题,而其他节点可以订阅这个话题以接收这些消息。
 话题通信在ROS中扮演着至关重要的角色,特别是在需要实时传输和共享信息的场景中。例如,在机器人导航任务中,激光雷达传感器会不断采集环境数据,并将这些数据发布到特定的话题上。同时,机器人的运动规划和控制节点会订阅这个话题,以获取最新的环境信息,并根据这些信息做出相应的决策和控制动作。

 2. 对于实时性、周期性的消息,使用 Topic 来传输是最佳的选择,它的机制如下图所示:

在这里插入图片描述

 话题是用于标识消息的名称,对某种数据感兴趣的节点将订阅适当的话题。单个话题可能有多个并发的发布者和订阅者。单个节点可能会发布并订阅多个话题。每个话题都是强类型的,发布到话题上的消息必须与话题的 ROS 消息类型相匹配,并且节点只能接收类型匹配的消息。

 3. ROS 有一个 rostopic 工具可用于话题操作。它是一个命令行工具,允许获取话题的相关信息或直接发布数据,如下图所示:

在这里插入图片描述

3.2 服务

 1. ROS(Robot Operating System)通信机制中的服务(Service)通信是一种基于请求/响应模式的通信方式,用于实现节点之间的同步通信。与话题通信不同,服务通信是双向的,一个节点作为服务端(Server)提供某种服务,另一个节点作为客户端(Client)发送请求并等待服务端的响应。

 2. 服务通信在ROS中特别适用于需要即时响应和有一定逻辑处理需求的场景。例如,当一个节点需要获取机器人的当前状态或执行某个特定任务时,它可以向提供该服务的服务端节点发送请求,并等待服务端处理请求后返回结果。

 3. 服务通信的流程如下:(1) Server注册。 (2) Client注册。 (3) 信息匹配与连接。 (4) 请求与响应。
 服务通信的优点在于其同步性和可靠性。由于是基于请求/响应模式的,客户端可以确保在发送请求后得到服务端的明确响应。这对于需要精确控制和即时反馈的应用场景非常有用。此外,服务通信还支持复杂的数据结构和逻辑处理,使得节点之间可以实现更为复杂和高级的交互。

 4. ROS 关于服务的命令行工具有 rosserver 和 rossrv。

在这里插入图片描述

3.3 动作

 1. ROS(Robot Operating System)通信机制中的动作(Action)通信是一种更为复杂和高级的通信方式,用于指导和控制复杂的机器人任务。与话题通信和服务通信相比,动作通信在 ROS 中提供了更强大和灵活的任务管理能力。

 2. 动作通信的主要特点包括:
 (1) 目标导向:动作通信是基于目标(Goal)和结果(Result)的。客户端节点可以向服务器节点发送一个目标值,服务器节点则根据这个目标执行相应的任务,并在任务完成后返回结果给客户端。这种目标导向的通信方式使得机器人能够按照预定的目标进行工作。
 (2) 反馈机制:动作通信中引入了反馈(Feedback)的概念。在执行任务的过程中,服务器节点可以定期向客户端节点发送反馈消息,报告任务的进度或中间结果。这使得客户端能够实时了解任务的执行情况,并根据需要进行相应的调整或干预。
 (3) 异步双向通信:动作通信采用异步双向通信的方式。客户端节点在发送目标后,不需要等待服务器节点的响应,可以继续执行其他任务。而服务器节点则根据目标独立执行工作,并在适当的时候发送反馈和结果给客户端。这种异步通信方式提高了系统的并发性和响应能力。
 (4) 任务管理:动作通信特别适用于复杂的机器人任务管理。通过发送目标和接收反馈,客户端节点可以对任务进行精细的控制和调整。例如,可以在任务执行过程中发送取消目标的命令,或者在任务失败时重新发送目标。这种灵活的任务管理方式使得机器人能够更好地适应各种复杂和多变的环境。

在这里插入图片描述

 3. 动作通信在 ROS 中通常使用 actionlib 包来实现。actionlib 提供了一套完整的动作通信框架,包括动作服务器和动作客户端的实现,以及相关的消息类型和接口定义。通过使用 actionlib,开发者可以方便地创建和使用动作通信功能,实现复杂的机器人任务管理。

3.4 参数服务器

 1. ROS(Robot Operating System)通信机制中的参数服务器是一种特殊的通信方式,它允许节点存储和检索配置参数。参数服务器可以看作是一个公共的容器,用于存储参数和管理机器人的配置信息。通过参数服务器,不同的节点可以共享数据,并且能够在运行时对机器人的行为进行调整和优化。

 2. 参数服务器的工作方式相对简单而直接。节点可以通过 RPC(远程过程调用)向参数服务器发送请求,以设置或获取参数。这些参数可以是各种数据类型,如整数、布尔值、列表、字典等,它们被存储在参数服务器的数据字典中。

 3. 参数服务器的主要应用场景包括:
 (1) 机器人配置:在机器人启动时,节点可以通过参数服务器读取机器人的配置参数,如关节角度、速度限制等。这些参数决定了机器人的初始状态和行为。
 (2) 动态调整:在运行过程中,节点可以根据需要动态地修改参数服务器的参数。例如,当机器人遇到障碍物时,可以通过调整路径规划算法的参数来改变机器人的运动轨迹。
 (3) 多节点共享:参数服务器允许多个节点共享同一组参数。这意味着不同的节点可以读取和修改相同的参数,从而实现协同工作和数据共享。

在这里插入图片描述

四、ROS可视化工具

4.1 rviz

 1. rviz是ROS(Robot Operating System,机器人操作系统)中的一款3D可视化工具。它使得用户能够查看模拟的机器人模型、来自机器人传感器的日志信息,并能重放已记录的信息。rviz的主要目的是以三维方式显示ROS消息,可以将数据进行可视化表达。例如,它可以无需编程就能表达激光测距仪(LRF)传感器中的传感器到障碍物的距离,RealSense、Kinect或Xtion等三维距离传感器的点云数据(PCD,Point Cloud Data),从相机获取的图像值等。

 2. rviz的界面包含显示屏(Displays)和视图(Views)等功能区域。显示屏用于显示当前选择的显示插件,可以配置每个插件的属性;而视图则是视角设置区,用户可以选择多种观测视角。

在这里插入图片描述

4.2 rqt

 1. rqt是ROS(Robot Operating System,机器人操作系统)的图形开发平台,是一个基于Qt的框架。rqt在ROS中提供了一个软件框架,该框架以插件的形式实现了各种GUI(图形用户界面)工具。这些工具可以在rqt中以可停靠窗口的形式运行,使得开发者能够更轻松地同时管理屏幕上的所有各种窗口。这些插件包括任意的“计算图”的分量,使得rqt的插件开发者几乎无需关注底层的实现细节。

 2. 第一次运行 rqt 后,窗口将是空白的。在 ROS 的 rqt 工具箱中,有许多常用的插件,这些插件为开发者提供了丰富的可视化工具和界面。
 (1) rqt_image_view:是 rqt 工具集的一个插件,它主要用于显示图像数据。该插件利用image_transport机制,能够接收并展示来自 ROS 话题的图像流。通过 rqt_image_view,用户可以实时查看摄像头或其他图像传感器产生的图像数据,这对于机器人导航、物体识别等任务非常有用。
 (2) rqt_graph:这个插件用于显示ROS计算图,即节点(nodes)和主题(topics)之间的连接关系。通过rqt_graph,你可以清晰地看到ROS系统中的数据流是如何从一个节点传递到另一个节点的。
 (3) rqt_plot:这个插件用于绘制ROS主题数据的图形。你可以选择一个或多个主题,并实时查看它们的数据变化曲线。这对于分析机器人运动、传感器数据等非常有用。

在这里插入图片描述

4.3 tf

 1. TF 是一个软件包,它让用户能够随时记录多个坐标系的信息。这些坐标系之间的关系被 TF 以缓存的树形结构(通常称为"tf tree")进行维护。在 tf tree 中,每个 frame(即一个坐标)都对应一个 link(机器人上的一个部件),这些 frame 错综复杂地分布在机器人的各个 link 上。通过 tf tree,可以方便地查看和理解整个机器人乃至地图的坐标转换关系。

 2. 在 ROS(Robot Operating System,机器人操作系统)中,TF 是一个核心概念,用于处理机器人不同部位之间的坐标转换。TF(Transform)的主要功能是提供多个坐标系之间的坐标变换关系,使得用户能够在任意时间点,在两个参考系之间完成点、向量等数据的坐标变换。

五、Python实现简单的ROS节点程序

 实现话题的订阅和发布:

#!/usr/bin/env python  
# coding=utf-8  
import rospy  
from std_msgs.msg import String  
from std_msgs.msg import Int32  
import time  
  
def voltage_callback(data):  
    print(data.data)  
  
if __name__ == "__main__":  
    rospy.init_node("topic_test", anonymous=True)  # 给本程序初始化一个节点名称  
    rospy.Subscriber("voltage_percentage", Int32, voltage_callback)  # 订阅话题  
    test_pub = rospy.Publisher("test_str", String, queue_size=5)  # 创建话题发布者  
    time.sleep(1)  # init_node之后不要立刻发送数据  
    test_pub.publish('test')  # 往话题发送数据  
    rospy.spin()  # 进入ROS的主循环,等待回调函数
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐