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

文章目录

  • 一、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.mzph.cn/news/736030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01-分析同步通讯/异步通讯的特点及其应用

同步通讯/异步通讯 微服务间通讯有同步和异步两种方式 同步通讯: 类似打电话场景需要实时响应(时效性强可以立即得到结果方便使用),而且通话期间不能响应其他的电话(不支持多线操作)异步通讯: 类似发邮件场景不需要马上回复并且可以多线操作(适合高并发场景)但是时效性弱响应…

MQ高可用相关设置

文章目录 前言MQ如何保证消息不丢失RabbitMQRocketMQKafkaMQ MQ如何保证顺序消息RabbitMQRocketMQKafka MQ刷盘机制/集群同步RabbitMQRocketMQKafka 广播消息&集群消息RabbitMQRocketMQ MQ集群架构RabbitMQRocketMQKafka 消息重试RabbitMQRockeMqKafka 死信队列RocketMQKaf…

Claude3横空出世:颠覆GPT-4,Anthropic与亚马逊云科技共启AI新时代

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

车载电子电器架构 —— 汽车电子电气系统分解

车载电子电器架构 —— 汽车电子电气系统分解 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何…

【操作系统概念】第14章:系统保护

文章目录 0. 前言14.1 保护目标14.2 保护原则14.3 保护域14.3.1 域结构14.3.2 实例:UNIX14.3.3 实例:MUTICS 14.4 访问矩阵14.5 访问矩阵的实现14.5.1 全局表14.5.2 对象的访问列表14.5.3 域的能力(权限)列表14.5.4 锁-钥匙机制*14.5.5 比较* 14.6 访问控…

Github 2024-03-10php开源项目日报Top10

根据Github Trendings的统计,今日(2024-03-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10Blade项目1Laravel:表达力和优雅的 Web 应用程序框架 创建周期:4631 天开发语言:PHP, BladeStar数量:75969 个Fork数量:24281 次…

Vue脚手架

Vue脚手架 学习目标: 理解Node.js基本使用方法理解包资源管理器NPM的使用理解webpack的作用理解 vue-cli 脚手架 (重点)Element-UI 组件库 1.vue的格式:new Vue({//作用的视图el:"id选择器",//vue中的数据/*data:{key:value,key:value,...}…

Java 基于微信小程序的快递柜小程序

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

devops-Jenkins【内网环境部署及插件安装】

1、准备工作 外网Linux机器一台,内网Linux机器一台。硬件环境要求:至少1GB的可用内存空间,至少50GB的可用硬盘空间。软件环境需求:需要安装好Java8,Java的运行环境JRE1.8或者Java的开发工具包JDK1.8都可以。 2、外网安…

结构指针的使用

结构指针的使用 指针类型变量: 指针类型,是变量类型的一种,它是专门用来存储变量的地址的。 例如 int *p; 表示p是一个指针变量,它用来存储某个整型变量的地址。 int a5; int *p&a; 这样,就将整型变量a的地…

体系班第十三节

1判断完全二叉树递归做法 有四种情况&#xff1a;1 左树完全&#xff0c;右数满&#xff0c;且左高为右高加一 2左满 &#xff0c;右满&#xff0c;左高为右高加一 3左满&#xff0c;右完全&#xff0c;左右高相等 4左右均满且高相等 #include<iostream> #include&l…

转移表回调函数实现

回调函数实现 计算器的模拟&#xff08;函数指针数组的使用&#xff09;&#xff08;回调函数&#xff09; 简化 冗余 老的代码的问题就是 冗余 写死 不能完成不同的任务 函数调用的时候只需要知道地址就可以 calc计算器 这里也称之为转移表 #define _CRT_SECURE_NO_WAR…

出现“error: failed to push some refs to ‘https://github.com/****.git‘”,如何解决问题

一、出错情况&#xff1a; 今天继续推送整理的知识点的时候&#xff0c;出现了一个报错。“error: failed to push some refs to https://github.com/.git”&#xff0c;百思不得其解&#xff0c;之前推送的时候都可以轻松推送成功&#xff0c;如今却说本地库与远程库不一致。…

腾讯云轻量应用服务器“月流量”什么意思?用完了怎么办?

腾讯云轻量应用服务器“月流量”什么意思&#xff1f;就是限制月流量的意思。腾讯云轻量服务器流量用完了怎么办&#xff1f;超额部分的流量另外支付流量费&#xff0c;流量价格为0.8元/GB&#xff0c;会自动扣你的腾讯云余额&#xff0c;如果你的腾讯云账号余额不足&#xff0…

Git win与linux换行符转换的问题

转载&#xff1a;warning: in the working copy of ‘package-lock.json‘, LF will be replaced by CRLF the next time Git_warning: in the working copy of package.json, lf-CSDN博客 warning: in the working copy of ‘package-lock.json‘, LF will be replaced by CRL…

ModStartBlog 稳定版 v9.0.0

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。系统完全开源&#xff0c;基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场&#xff0c;后台一键快速安装 会…

C++ Function Templates (函数模板)

C Function Templates [函数模板] 1. Templates and Generic Programming (模板与泛型编程)2. Defining a Function Templates (定义函数模板)2.1. Instantiating a Function Template (实例化函数模板)2.2. Template Type Parameters (模板类型参数)2.3. Nontype Template Par…

【实战项目】Boost搜索引擎项目

目录 1. 项目的相关背景 2. 搜索引擎的相关宏观原理 3. 搜索引擎技术栈和项目环境 4. 正排索引 vs 倒排索引 - 搜索引擎具体原理 4.1 正排索引 4.2 目标文档进行分词 4.3 倒排索引 4.4 模拟一次查找的过程&#xff1a; 5. 编写数据去标签与数据清洗的模块 Parser 5.1…

《操作系统真相还原》读书笔记八:获取物理内存容量以及本书源代码

编写mbr.S汇编代码 ;LOADER_BASE_ADDR equ 0x900 ;LOADER_START_SECTOR equ 0x2 %include "boot.inc"SECTION MBR vstart0x7c00mov ax,csmov ds,axmov es,axmov ss,axmov fs,axmov sp,0x7c00mov ax,0xb800mov gs,axmov ax,0x0600mov bx,0x0700mov cx,0mov dx, 184fh…

力扣图论篇

以下思路来自代码随想录以及官方题解。 文章目录 797.所有可能的路径200.岛屿数量130.被围绕的区域1020.飞地的数量 797.所有可能的路径 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不…