中国大学生计算机设计大赛--智慧物流挑战赛基础

文章目录

  • 一、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 rviz
    • 4.2 rqt
    • 4.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 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的主循环,等待回调函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/446467.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js计算属性:实现数据驱动的利器

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

C语言:ctype和string库中的部分常用函数的应用和实现

在编程过程中,我们经常要处理字符和字符串,C语言标准库中就提供了一系列的库函数,便于我们操作库函数。 字符分类函数 C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。这些函数的使⽤都需要包含…

微信小程序跳转到其他小程序

有两种方式,如下: 一、appid跳转 wx.navigateToMiniProgram({appId: 目标小程序appid,path: 目标小程序页面路径,//不配的话默认是首页//develop开发版;trial体验版;release正式版envVersion: release, success(res) {// 打开成功…

STM32 | 库函数与寄存器开发区别及LED等和按键源码(第三天)

STM32 | STM32F407ZE(LED寄存器开发续第二天源码)STM32 第三天 一、 库函数与寄存器开发区别 1.1 寄存器 寄存器开发优点 直接操作寄存器,运行效率高。 寄存器开发缺点 1、开发难度大,开发周期长 2、代码可阅读性差,可移植差 3、后期维护难度高 1.2库函数 库函数开…

Vue+SpringBoot打造农家乐订餐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核心代码4.1 查询菜品类型4.2 查询菜品4.3 加购菜品4.4 新增菜品收藏4.5 新增菜品留言 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的农家乐订餐系统&#xff0c…

牛客周赛 Round 36 解题报告 | 珂学家 | 状态DP + 构造 + 9棵树状数组

前言 整体评价 今天相对容易,E的构造题,感谢出题人极其善意的Case 1, 算是放水了。F题是个很典的结论题,由于存在动态点修改,所以引入树状数组做区间和的快速计算。 A. 小红的数位删除 题型: 签到 s input()print (s[:-3])B. …

链表的基础

目录 顺序表 链表 需要注意的 链表的优势 单链表的实现 1.单链表的准备 2.单链表的结构体的创建 3.单链表的准备 4.前插 5.后插 6.后删 7.前删 8.任意位置前插 9.任意位置后插 10.删除 11.修改 12.打印 13.释放链表 总说链表难,但我感觉只要认真听讲…

C语言:深入补码计算原理

C语言:深入补码计算原理 有符号整数存储原码、反码、补码转换规则数据与内存的关系 补码原理 有符号整数存储 原码、反码、补码 有符号整数的2进制表示方法有三种,即原码、反码和补码 三种表示方法均有符号位和数值位两部分,符号位用0表示“…

算法第二十六天-删除有序数组中的重复项Ⅱ

删除有序数组中的重复项 题目要求 解题思路 题目要求中提到原地修改,那么肯定需要一个指针指向当前即将放置元素的位置,需要另外一个指针向后遍历所有元素,所以[双指针]解法呼之欲出。 慢指针slow:指向当前元素放置的位置&…

蓝桥杯第一天

这题就是典型的位数贡献大于数量贡献, 1花的火柴更少,所以尽量用完10个1,然后其实就是简单的背包问题尽量拿最多的物品(数字),限重为300,各物品(数字)的重量即为所需火柴…

波动数列 刷题笔记

思路分析 dp 找出状态转移方程 设d为a或者-b 代码 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N1010,MOD100000007; int get_mod(int a,int b){ return (a%bb)%b; …

深入解读 Elasticsearch 磁盘水位设置

本文将带你通过查看 Elasticsearch 源码来了解磁盘使用阈值在达到每个阶段的处理情况。 跳转文章末尾获取答案 环境 本文使用 Macos 系统测试&#xff0c;512M 的磁盘&#xff0c;目前剩余空间还有 60G 左右&#xff0c;所以按照 Elasticsearch 的设定&#xff0c;ES 中分片应…

全国保护性耕作/常规耕作农田分类数据集

基于Sentinel-2遥感产品&#xff0c;使用来自文献调研和目视解译产生的保护性/常规耕作样本点&#xff0c;通过交叉验证方法训练随机森林分类器&#xff0c;生成了2016-2020年全国保护性耕作/常规耕作农田分类数据集。分类代码&#xff1a;0值代表非农田&#xff0c;1值表示第一…

laravel-admin 头部添加操作

新建html 样式及js namespace App\Admin\Extensions\Nav;class Links {public function __toString(){return <<<HTML<li><a href"" οnclick"js_method();return false;"><i class"fa fa-floppy-o"></i><s…

方法的使用

1.什么是方法(method) 在java中方法就是一个代码片段.。几乎相当于c语言的函数。 2.方法定义 方法跟函数是几乎一样的。所以语法是大差不差的。就多了一点东西。之前我们在c语言里已经很详细讲过了函数。这里就简便的讲一下。 相比c语言函数多了个修饰符 。 现在看下其注意…

深入理解JavaScript内存泄漏:原因与解决方法

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Visual C++ 2010学习版安装教程

1. 创建项目 点击 “创建新项目”&#xff0c;创建一个项目。 2. 创建 helloworld.c ⽂件 3. 在弹出的编辑框中&#xff0c;选中 “C文件(.cpp)”&#xff0c;将 下方 “源.cpp” 手动改为要新创建的文件名。 如&#xff1a;helloWorld.c 。注意&#xff0c;默认 cpp 后缀名&am…

记录西门子:IO隔离SCL编程

在PLC变量中创建IO输入输出 在PLC类型中创建输入和输出&#xff0c;并将PLC变量的输入输出名称复制过来 创建一个FC块或者FB块 创建一个DB块 MAIN主程序中&#xff1a;

文件包含漏洞初识

一、基础知识介绍 在web后台开发的时候&#xff0c;我们会使用PHP&#xff0c;Java这种代码&#xff0c;而在使用的过程中&#xff0c;我们经常会使用包含函数&#xff08;也就是调用&#xff09;&#xff0c;而很多时候&#xff0c;前端用户在选择浏览时会调用包含的文件这无…

使用CSS制作动态的环形图/饼图

使用纯 CSS Animation conic-gradient 实现一个环形图。 饼图的实现思路和环形图一样&#xff0c;去掉中间的圆形遮盖 after 伪类元素即可。 一、构建基础样式 构建圆形节点和中间的遮盖元素。 <style>body {background-color: rgb(130, 226, 255);}.circle {top: 16…