中国大学生计算机设计大赛--智慧物流挑战赛基础 文章目录一、Ubuntu基础1.1 基本操作1.2 文本编辑二、ROS基础介绍2.1 概念与特点2.2 基本结构2.3 创建工程2.4 节点和节点管理器2.5 启动文件三、ROS通信机制3.1 话题3.2 服务3.3 动作3.4 参数服务器四、ROS可视化工具4.1 rviz4.2 rqt4.3 tf五、Python实现简单的ROS节点程序一、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 xxxip ssh HwHiAiUser192.168.1.27. 进入 root 模式sudo passwd root# 为root用户设置密码su root# 进入root用户exit# 退出root用户8. 查看文件内容nl xxx# 查看xxx文件内容(显示行号)1.2 文本编辑1. 在 ubuntu 中我们通常会使用 vim 编辑器2. 若未安装需要在终端输入下面命令进行安装sudo apt-get install vim3. 如 vim test.txt若 test.txt 文件存在则编辑不存在则自动新建文件并编辑vim test.txt4. 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 ~/.bashrc8. 在非编辑模式下按gg可使光标跳到第一行按G可使光标跳到最后一行按~可以使光标处的字母进行大小写转换。二、ROS基础介绍2.1 概念与特点1. ROSRobot 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 test13. 编译好并配置环境的 package 包能够使用 ROS 文件系统工具 roscd相当于 cd 的改进版找到。roscd ROS包名可以直接跳转到 ROS 包的目录下且输入 ROS 包名时支持 Tab 键自动补齐。2.4 节点和节点管理器1. 在 ROSRobot 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. ROSRobot Operating System机器人操作系统的通信机制是其核心功能之一而话题Topic通信是其中最常用且基础的一种通信方式。话题通信基于发布/订阅模式允许一个节点发布消息到特定的话题而其他节点可以订阅这个话题以接收这些消息。话题通信在ROS中扮演着至关重要的角色特别是在需要实时传输和共享信息的场景中。例如在机器人导航任务中激光雷达传感器会不断采集环境数据并将这些数据发布到特定的话题上。同时机器人的运动规划和控制节点会订阅这个话题以获取最新的环境信息并根据这些信息做出相应的决策和控制动作。2. 对于实时性、周期性的消息使用 Topic 来传输是最佳的选择它的机制如下图所示话题是用于标识消息的名称对某种数据感兴趣的节点将订阅适当的话题。单个话题可能有多个并发的发布者和订阅者。单个节点可能会发布并订阅多个话题。每个话题都是强类型的发布到话题上的消息必须与话题的 ROS 消息类型相匹配并且节点只能接收类型匹配的消息。3. ROS 有一个 rostopic 工具可用于话题操作。它是一个命令行工具允许获取话题的相关信息或直接发布数据如下图所示3.2 服务1. ROSRobot Operating System通信机制中的服务Service通信是一种基于请求/响应模式的通信方式用于实现节点之间的同步通信。与话题通信不同服务通信是双向的一个节点作为服务端Server提供某种服务另一个节点作为客户端Client发送请求并等待服务端的响应。2. 服务通信在ROS中特别适用于需要即时响应和有一定逻辑处理需求的场景。例如当一个节点需要获取机器人的当前状态或执行某个特定任务时它可以向提供该服务的服务端节点发送请求并等待服务端处理请求后返回结果。3. 服务通信的流程如下(1) Server注册。 (2) Client注册。 (3) 信息匹配与连接。 (4) 请求与响应。服务通信的优点在于其同步性和可靠性。由于是基于请求/响应模式的客户端可以确保在发送请求后得到服务端的明确响应。这对于需要精确控制和即时反馈的应用场景非常有用。此外服务通信还支持复杂的数据结构和逻辑处理使得节点之间可以实现更为复杂和高级的交互。4. ROS 关于服务的命令行工具有 rosserver 和 rossrv。3.3 动作1. ROSRobot Operating System通信机制中的动作Action通信是一种更为复杂和高级的通信方式用于指导和控制复杂的机器人任务。与话题通信和服务通信相比动作通信在 ROS 中提供了更强大和灵活的任务管理能力。2. 动作通信的主要特点包括(1)目标导向动作通信是基于目标Goal和结果Result的。客户端节点可以向服务器节点发送一个目标值服务器节点则根据这个目标执行相应的任务并在任务完成后返回结果给客户端。这种目标导向的通信方式使得机器人能够按照预定的目标进行工作。(2)反馈机制动作通信中引入了反馈Feedback的概念。在执行任务的过程中服务器节点可以定期向客户端节点发送反馈消息报告任务的进度或中间结果。这使得客户端能够实时了解任务的执行情况并根据需要进行相应的调整或干预。(3)异步双向通信动作通信采用异步双向通信的方式。客户端节点在发送目标后不需要等待服务器节点的响应可以继续执行其他任务。而服务器节点则根据目标独立执行工作并在适当的时候发送反馈和结果给客户端。这种异步通信方式提高了系统的并发性和响应能力。(4)任务管理动作通信特别适用于复杂的机器人任务管理。通过发送目标和接收反馈客户端节点可以对任务进行精细的控制和调整。例如可以在任务执行过程中发送取消目标的命令或者在任务失败时重新发送目标。这种灵活的任务管理方式使得机器人能够更好地适应各种复杂和多变的环境。3. 动作通信在 ROS 中通常使用 actionlib 包来实现。actionlib 提供了一套完整的动作通信框架包括动作服务器和动作客户端的实现以及相关的消息类型和接口定义。通过使用 actionlib开发者可以方便地创建和使用动作通信功能实现复杂的机器人任务管理。3.4 参数服务器1. ROSRobot Operating System通信机制中的参数服务器是一种特殊的通信方式它允许节点存储和检索配置参数。参数服务器可以看作是一个公共的容器用于存储参数和管理机器人的配置信息。通过参数服务器不同的节点可以共享数据并且能够在运行时对机器人的行为进行调整和优化。2. 参数服务器的工作方式相对简单而直接。节点可以通过 RPC远程过程调用向参数服务器发送请求以设置或获取参数。这些参数可以是各种数据类型如整数、布尔值、列表、字典等它们被存储在参数服务器的数据字典中。3. 参数服务器的主要应用场景包括(1) 机器人配置在机器人启动时节点可以通过参数服务器读取机器人的配置参数如关节角度、速度限制等。这些参数决定了机器人的初始状态和行为。(2) 动态调整在运行过程中节点可以根据需要动态地修改参数服务器的参数。例如当机器人遇到障碍物时可以通过调整路径规划算法的参数来改变机器人的运动轨迹。(3) 多节点共享参数服务器允许多个节点共享同一组参数。这意味着不同的节点可以读取和修改相同的参数从而实现协同工作和数据共享。四、ROS可视化工具4.1 rviz1. rviz是ROSRobot Operating System机器人操作系统中的一款3D可视化工具。它使得用户能够查看模拟的机器人模型、来自机器人传感器的日志信息并能重放已记录的信息。rviz的主要目的是以三维方式显示ROS消息可以将数据进行可视化表达。例如它可以无需编程就能表达激光测距仪LRF传感器中的传感器到障碍物的距离RealSense、Kinect或Xtion等三维距离传感器的点云数据PCDPoint Cloud Data从相机获取的图像值等。2. rviz的界面包含显示屏Displays和视图Views等功能区域。显示屏用于显示当前选择的显示插件可以配置每个插件的属性而视图则是视角设置区用户可以选择多种观测视角。4.2 rqt1. rqt是ROSRobot 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 tf1. TF 是一个软件包它让用户能够随时记录多个坐标系的信息。这些坐标系之间的关系被 TF 以缓存的树形结构通常称为tf tree进行维护。在 tf tree 中每个 frame即一个坐标都对应一个 link机器人上的一个部件这些 frame 错综复杂地分布在机器人的各个 link 上。通过 tf tree可以方便地查看和理解整个机器人乃至地图的坐标转换关系。2. 在 ROSRobot Operating System机器人操作系统中TF 是一个核心概念用于处理机器人不同部位之间的坐标转换。TFTransform的主要功能是提供多个坐标系之间的坐标变换关系使得用户能够在任意时间点在两个参考系之间完成点、向量等数据的坐标变换。五、Python实现简单的ROS节点程序实现话题的订阅和发布#!/usr/bin/env python# codingutf-8importrospyfromstd_msgs.msgimportStringfromstd_msgs.msgimportInt32importtimedefvoltage_callback(data):print(data.data)if__name____main__:rospy.init_node(topic_test,anonymousTrue)# 给本程序初始化一个节点名称rospy.Subscriber(voltage_percentage,Int32,voltage_callback)# 订阅话题test_pubrospy.Publisher(test_str,String,queue_size5)# 创建话题发布者time.sleep(1)# init_node之后不要立刻发送数据test_pub.publish(test)# 往话题发送数据rospy.spin()# 进入ROS的主循环等待回调函数