【古月居ROS 21讲】精简理清 – 速刷古月居ROS21讲 ROS概念全过程「建议收藏」

【古月居ROS 21讲】精简理清 – 速刷古月居ROS21讲 ROS概念全过程「建议收藏」速刷古月居ROS21讲概念全过程ROS的概念:对应第七讲通讯机制节点(Node)执行单元节点管理器(ROSMaster)话题消息话题(Topic)异步通信机制消息(Message)话题模型服务(Servi

  • 标题 : 速刷古月居21讲概念全过程
  • 起源: –
  • 更新时间如下 (如下)
  • 更新次数 : 7
  • 最近更新时间 :
  • 更新内容:
  • 下次更新:

ROS的概念:对应第七讲

通讯机制

  • 松耦合分布式软件框架
  • Node :每个node就是一个节点,每个节点就是机器人系统中完成具体功能(图像识别 传感器驱动)一个进程
    在这里插入图片描述

节点 (Node)– 执行单元

(相当于系统中的一个进程,能够独立运行的一个可执行文件 相当于windows的一个exe文件 )

  • 节点: 执行具体任务的进程 、独立运行的可执行文件
  • 节点 当中位置不是固定的
  • 节点在系统的名称是唯一的
  • 节点之间不是孤立的
  • 节点之间编程语言不是固定的
    (是为了适应不同的功能 ,比如python 做图像处理 ,c/c++ 适合做底层驱动 )
  • 节点可以使用分布式运行到不同的主机上

在这里插入图片描述

节点管理器(ROS Master)

(ROS当中1)

  • 为节点提供命名和注册服务

  • 跟踪和记录话题 / 服务通信 ,辅助节点相互查找 建立连接

  • 在这里插入图片描述

  • 提供参数服务器 ,以及节点使用此服务存储和检索运行的参数

在这里插入图片描述
在这里插入图片描述

话题和消息

(话题和消息 就是节点的两种传输方式 )

  • 话题好比发邮件 消息好比打电话

话题(Topic) – 异步通信机制

  • 节点间用来传输数据的重要总线
  • 使用发布 / 订阅 模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以不唯一
  • 在这里插入图片描述

消息(Message) – 话题模型

  • 具有一定类型和数据结构 ,包括ROS提供的标准类型 和用户自定义类型
  • 使用编程语言无关的.msg文件定义,编译过程中生成的代码文件
  • 可以自定义接口满足需求
  • 在这里插入图片描述

服务(Servic)— 同步通信机制

  • 带有反馈机制
  • 使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理返回应答数据
  • 使用编程语言无关的.src 文件定义请求和应答数据结构,编译过程中生成对应的代码文件
  • 服务请求一次 满足内容连接

在这里插入图片描述
(服务的应用场景 好比摄像头 传输图像 需要 调整摄像头拍摄远程画面,控制摄像头对焦,就是需要调整摄像头) 在这里插入图片描述

话题 和 服务的区别

在这里插入图片描述

参数(Parameter)– 全局共享字典

  • 可通过网络访问的共享 、多变量字典
  • 节点使用此服务来存储和检索运行时的参数
  • 适合存储静态、非二进制的配置参数 、不适合存储动态配置的数据
    ( 所有节点 Talke and Listener 都可以给节点赋值 ROS 通信机制就是SPC,从图可以看见,listener必须重新从ROS Master 获取值 才能从Talker获取变化 ,故此ROS( 适合存储静态、非二进制的配置参数 、不适合存储动态配置的数据))在这里插入图片描述

文件系统:

功能包(Package)

  • ROS软件中的基本单元,包含节点源码,配置文件,数据定义等
  • 功能包 包括(节点 消息 服务)

功能包的清单 (Package manifes)

  • 记录功能包的基本信息 ,包含作者基本信息、许可信息、依赖选项、编译标志等

元功能包(MetaPackages)

  • 组织多个同一目的功能包

软件仓库

ROS 社区

在这里插入图片描述

ROS的概念:对应第八讲

ROS命令行总览:

ROS shell命令
命令 重要度 命令释义 详细说明
roscd 👍👍👍👍 ros+cd 移动到指定的ros功能包目录
rosls 👍👍 ros+ls(list files) 显示功能包的文件和目录
rosed 👍👍 ros+ed (editor) 编辑ROS功能包的文件
roscp 👍👍 ros+cp (copies files) 添加目录至目录索引
rosd 👍 ros+ deirectory 添加ROS目录索引中的目录
ROS 执行命令:
roscore 👍👍👍👍 ros+core master(ROS名称服务)+rosout(日志记录)+parameter server(参数管理)
rosrun 👍👍👍👍 ros+run 运行节点
roslaunch 👍👍👍👍 ros+launch 运行多个节点及设置运行选项
rosclean 👍👍👍 ros+clean 检查或删除ROS日志文件
ROS信息命令:
rostopic 👍👍👍👍 ros+topic 确认ROS话题信息
rosservice 👍👍👍👍 ros+service 确认ROS命令行信息
rosnode 👍👍👍👍 ros+node 确认ROS节点信息
rosparam 👍👍👍👍 ros+param(paramer) 确认和修改ROS参数信息
rosbag 👍👍👍👍 ros+bag 记录和回放ROS信息
rosmsg 👍👍👍 ros+msg 显示ROS消息类型
rossrv 👍👍👍 ros+srv 显示ROS服务类型
rosversion 👍👍 ros+version 显示ROS功能包的版本信息
roswtf 👍 ros+wf 检查ROS系统
ROS功能包命令
rospack 👍👍👍👍 ros+pack (age) 查看ROS功能相关的信息
rosinstall 👍👍👍 ros+install 安装ROS 附加功能包
rosdep 👍👍👍 ros+dep(endencies) 安装该功能包的依赖文件
roslocate 👍👍👍 ros+locate ROS功能包信息相关命令
rosscreate-pkg 👍 ros+create-pkg 自动生成ROS功能包 (用于旧的rosbuild系统)
rosmack 👍 ros+make 构建ROS功能包

ROS命令行示例快速理解 以小海龟为例:

  • 要运行小海龟程序 必须确保已经安装好了ROS
  • 如果没有安装好 ROS 请参考这篇文章
  • 安装ROS Kinetic详细过程

在这里插入图片描述

roscore

roscore 是为了启动 ROSMASTER ,是ROS所有节点管理器,也是启动ROS必须启动的一个指令
在这里插入图片描述

rosrun

rosrun 是为了运行ros安装包某个节点某个安装包的一个指令 后面要跟着两个 参数 一个 是功能包名
,一个是功能包的节点
在这里插入图片描述

  • 从中我们运行了 turtlesim这个功能包 双按tab 显示他所含的节点名称

  • turtlesim 是为了学习ros创作的一个小海龟模拟器

  • (我们运行 第三个节点 turtlesim_node

  • 在这里插入图片描述

  • 便会出现小海龟的仿真器模型 )

  • 在这里插入图片描述

  • 接下来我们再打开 rosrun turtlesim 第四个节点 键盘控制器
    在这里插入图片描述
    就可以再键盘上 控制 海龟运行了

在这里插入图片描述

rqt_graph
  • 以qt开头的就是用qt 写的一些计算工具
  • rqt_graph 是一个显示系统计算图的工具,ros核心工具就是一个计算图 ,我们很快知道ros控制相关的信息
  • 在这里插入图片描述
rosnode
  • ROS(ROS) 是 无界面命令行工具
  • 输入 rosnode 他会报出 很多node相关的节点工具
    【古月居ROS 21讲】精简理清 - 速刷古月居ROS21讲 ROS概念全过程「建议收藏」
rosnode list

rosnode list 是针对节点中的内容 列出
在这里插入图片描述

  • rosout 启动的默认 话题 ,这个话题主要采集 所有话题的日用信息,提交给上面界面做显示的 一个话题 。只要启动他就会有的一个话题 一般不用管他
rosnode info

可以看到各个节点能够发布哪些话题
通过订阅话题来提供服务
在这里插入图片描述
还会显示主机号 以及PID号 底层机制的信息描述

在这里插入图片描述

rostopic

同rosnode 一一样 输入rostopic 会显示他的功能清单:
在这里插入图片描述

rostopic list
  • 打印出当前所有节点的话题列表
    在这里插入图片描述
    这里 我们可以看到有个turtle1的cmd_vel 这个其实就是键盘连接节点的工具
    在这里插入图片描述
    如图
    在这里插入图片描述
rostopic pub

(那能不能通过 直接给话题发布指令让数据动起来呢)
然后 我们看到 rostop下面有个这个介绍
在这里插入图片描述
然后我们根据 他的描述 输入 rostopic pub 消息类型 消息内容 话题名
在这里插入图片描述
输入双击tab键盘可以自动补齐 输入tur就可以补齐了

  • 其中 turtle1 \cmd_vel geometry_msgs 是话题名 Twist “linear 和angualr 是数据内容以及消息结构

然后我们可以通过更改数值来发布话题

在这里插入图片描述

  • 点击回车他就能动了 !
    在这里插入图片描述
    但是发现海龟不能一直都动,因为话题只能发布一次

  • 于是我们可以在 pub 后面加上 – r -r 表示 rate 频率的意思 后面接频率的次数

  • 在这里插入图片描述
    那能不能通过海龟控制旋转呢 我们看到 angular 角度有三个参数xyz 其中z轴是垂直于仿真器向外的

rosmsg show

那我们能不能来看到话题消息数据类型吧 我们可以用rosmsg show 做到
在这里插入图片描述
我们可以看到Twist消息数据结构 ,这是原来ros定义好的数据结构,

rosservice

现在我们来看看 rosservice 相关的服务
与rostopic一样 直接输入rosserive 会跳出他可接的代码列表
我们看用rosserive list 直接来看看他们服务有哪些
在这里插入图片描述
其中

  • spawm 是用来产生诞生的意思 我们可以用他来产生新的海龟
    在这里插入图片描述
  • 和前面一样 只要双击TAB键 后面的参数就会自动补齐
  • 其中 x y 是海龟的坐标位置 theta 是海龟诞生中的角度 name ”“是产生海龟的名字
    然后我们回车 就可以调用这个服务 ,并且会在仿真器上再跑出一个海龟
    在这里插入图片描述
    然后我们再点开 rostopic list 会发现又多出几个海龟的参数 ,这些是新生成的海龟参数
    在这里插入图片描述

回顾一下:

  • 主要用的几个节点
  • 在这里插入图片描述
  • 可视化的几张图
  • 在这里插入图片描述

话题复现

  • 话题复现可以记录话题中的所有数据 ,并在下次用的时候复现出来
  • 比如 :你有个无人机想做调试,但不能让每次无人机飞起来再做调试
  • 然后做一次飞行 飞行时候把无人机数据都保存下来 通过话题复现就能把无人机飞行复现出来就可以了
    在这里插入图片描述

首先 我们输入 rosbag reord 表示记录数据 -a a表示all 所有的数据 -o 表示我们把所保存的数据保存到一个压缩包,至于压缩包叫什么 就是后面的名称
在这里插入图片描述
输入之后 可以看到他以及再记录这个列表

  • 记录之后直接按住 cirt c 推出就记录下来了
  • 保存后 会放在你当前终端的目录下面 这里我们一般再home 主文件下面在这里插入图片描述
  • 这个就是记录我们数据保存文件,
    现在 我们重新 退出
    在这里插入图片描述

这里我们再重新启动一遍 先用roscore启动,再启动海龟节点 弹出海龟仿真器
在这里插入图片描述

  • 这里我们不用启动key控制节点 直接通过 rosbag运行 已经打包好的控制指令

  • rosbag play +名字

  • 在这里插入图片描述

创建工作空间与功能包 对应第九讲

工作空间可以看作 新建工程

  • src:代码空间是为了放置功能包的 ,配置文件包括一些lanunch文件等等到是放在这里的
  • bulid 编译空间 编译过程中产生中间文件
  • devel 开发空间 放置编译过程中的可执行的一些库 以及代码脚本等等
  • install 安装空间 用我们install 安装成功后的结果 放在什么位置的

在ROS1 中install 安装空间和 devel开发空间很多内容是重复
所以在ROS2 中争对这一点做了很多修正
在这里插入图片描述
在这里插入图片描述

工作空间

创建工作空间:

  • 首先 我们用mkdir 创建 一个工作空间 需要注意的是 catkin_ws 文件本任取 但是src是固定的
  • 然后我们进入我们的src文件
  • 使用cartkin_init_workspace 创建工作空间
    在这里插入图片描述

编译工作空间:

进入 src的上一级目录 执行catkin_make执行编译文件
在这里插入图片描述

设置环境变量:

为了让你系统找到 设置环境变量
在这里插入图片描述

检查环境变量:

在这里插入图片描述

功能包

创建功能包

cakin_create_pkg 创建功能包 后面跟着依赖库 (调用接口)
std_msgs 是调用那些标准的接口 用到哪些库一定要用到依赖
在这里插入图片描述

在这里插入图片描述

工作空间 重名问题

在这里插入图片描述

功能包下重要文件:

  • 这两个文件是任何一个功能包必须要存储放的一个文件 ,没有这个文件就不能称为功能包
    在这里插入图片描述

packeage .xml 文件

  • 这种文件内容是通过src 这种语言里的内容进行描述的 ,
  • 描述了文件包相关的信息 ,比如说功能包的名字,版本号
  • 这个功能包可以向你反馈一些内容
  • Lincense 包括开源的许可证
  • 这些信息 在这里插入图片描述
  • packeage .xml 中功能包的依赖信息:
  • 可以看到下方的依赖库在roscpp 和rospy std_msgs 依赖库在内有所体现
    在这里插入图片描述

CMakeList.txt

CMakeList.txt 主要描述语法编译规则
CMake 也是基于GC的一个编译器 在编译规则设置上 比较友好
在这里插入图片描述
find_package 文件包括一些编译的规则:
编译中的依赖 限制可以设置 package中的包
在这里插入图片描述

发布者 Publisher

海龟仿真器

在这里插入图片描述

创建功能包

我们进入src执行 创建发布者指令
在这里插入图片描述

实现pubulinsher代码步骤

在这里插入图片描述

publisher 源代码分析
/*********************************************************************** Copyright 2020 GuYueHome (www.guyuehome.com). ***********************************************************************/

/** * 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist */
 
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>

int main(int argc, char **argv)
{ 
   
	// ROS节点初始化
	ros::init(argc, argv, "velocity_publisher");

	// 创建节点句柄
	ros::NodeHandle n;

	// 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10
	ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);

	// 设置循环的频率
	ros::Rate loop_rate(10);

	int count = 0;
	while (ros::ok())
	{ 
   
	    // 初始化geometry_msgs::Twist类型的消息
		geometry_msgs::Twist vel_msg;
		vel_msg.linear.x = 0.5;
		vel_msg.angular.z = 0.2;

	    // 发布消息
		turtle_vel_pub.publish(vel_msg);
		ROS_INFO("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]", 
				vel_msg.linear.x, vel_msg.angular.z);

	    // 按照循环频率延时
	    loop_rate.sleep();
	}

	return 0;
}

publisher 发布者消息队列

在这里插入图片描述

  • Publisher — > Topic (Message geometry_msgs::Twist )

  • 因为话题没有来得及快速响应你的发布 所以他会有个发布者队列 把发布者的数据发布在队列里面来然后再发布出去
    在这里插入图片描述

  • 队列如果爆了怎么办,队列默认长度是10,ros master会把爆了的数据丢出去 ,像这种情况默认保存数据是10就会保存10个数据,丢出去就会导致掉数据 掉真的情况

publisher 发布者频率:

因为我们后面是一个where循环 ,所以在后面设置他的频率

	// 设置循环的频率
	ros::Rate loop_rate(10);
publisher 消息内容:
  • 设置海龟 运行的速度以及弧度
	int count = 0;
 // 初始化geometry_msgs::Twist类型的消息
		geometry_msgs::Twist vel_msg;
		vel_msg.linear.x = 0.5;
		vel_msg.angular.z = 0.2;

今天的文章【古月居ROS 21讲】精简理清 – 速刷古月居ROS21讲 ROS概念全过程「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/84457.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注