简介:什么是接口(interfaces)?
在通信过程中,当节点间需要传输数据时,就必然需要以特定格式传输数据,也就是我们常用的数据载体。在ROS2中,数据载体被称之为接口(interfaces)。
常用的接口文件
通信时使用的数据载体一般需要使用接口文件定义。常用的接口文件有三种:msg
文件、srv
文件与 action
文件,分别用于对应前文所述的话题通信、服务通信和动作通信,并且每种文件都需要按照一定格式定义 特定数据类型的 “变量”。
在通信过程中,当节点间需要传输数据时,就必然需要以特定格式传输数据,也就是我们常用的数据载体。在ROS2中,数据载体被称之为接口(interfaces)。
通信时使用的数据载体一般需要使用接口文件定义。常用的接口文件有三种:msg
文件、srv
文件与 action
文件,分别用于对应前文所述的话题通信、服务通信和动作通信,并且每种文件都需要按照一定格式定义 特定数据类型的 “变量”。
作为一种高度复杂的系统性实现,在机器人中,一个完整的机器人应用程序一般会由若干功能模块组成,其中每个功能模块可能又包含若干功能点,而不同功能模块、不同功能点之间通常需要频繁的进行数据交互。 比如以导航中的路径规划模块为例:
在ROS2节点中,当我们编写C++或Python程序时,都需要引用“初始化”与“资源释放”两个操作,例如:
在C++中:
#include "rclcpp/rclcpp.hpp"
class MyNode: public rclcpp::Node{
public:
MyNode():Node("hello_node_cpp"){
RCLCPP_INFO(this->get_logger(), "helloworld");
}
};
int main(int argc, char const *argv[])
{
//初始化
rclcpp::init(argc, argv);
// 实例化自定义类
auto node = std::make_shared<MyNode>();
// ......
// 资源释放
rclcpp::shutdown();
return 0;
}
这里是我有关ROS2的相关笔记,这些笔记内所使用的相关软硬件配置为:
这些笔记大部分参考以下网站和视频教程写成:
这篇博客我们将系统介绍有关在传输层中实现可靠数据传输 (Reliable Data Transfer) 的原理, 包括 rdt 的各个系列协议,在 rdt3.0 协议的基础上讨论停等协议与流水线协议的区别,并介绍两种流水线协议:GBN 协议与SR协议。
传输层的主要功能是提供端到端的数据传输服务,例如 TCP 协议提供了可靠的、面向连接的数据传输服务。TCP使用序列号、确认应答、重传等机制来确保数据的可靠传输。因此,从抽象角度来看,我们可以将传输层之间的特定通讯视为提供了一种相对可靠的通信机制。
checksum 的构造方法比较简单,但是计算比较麻烦:将需要发送的 16-bit 二进制源数据两两相加,取从右往左数共十六位数,如果有多的位数就把该位数移到最低位再相加。如此反复将所有需要发送的数据相加完毕后对它作反码,即将这十六位数的1置0,0置1。
具体需要的数据以下列的表格作为例子:
发送端IP地址 | |||
接收端IP地址 | |||
UDP协议对应数(17) | UDP网段总长度 | ||
UDP源端口号 | UDP目的端口号 | ||
UDP网段总长度 | 校验和数值(在这里设为0) | ||
数据 | 数据 | 数据 | 数据 |
数据 | 数据 | 数据 | 数据 |
数据 | 数据 | 数据 | 数据 |
数据 | 数据 | 数据 | 数据 |
...... | |||
数据 | 数据 | 数据 | (后置位补零,有需要就加,否则不加) |
UDP 是一种简洁、轻量级的传输协议,只提供最基本的通讯服务。UDP 定义于 [RFC 768],其功能与传输协议差不多。除了多路复用/解复用功能和一些轻微的错误检查功能外,它没有为 IP 增加任何功能。也就是说,如果一个应用程序开发人员选择 UDP 而不是 TCP 作为传输协议的话,那么该应用程序几乎可以被认为是在直接与 IP 对话而没有任何其他的包装。
UDP 是无连接的,因此在两个进程开始通信之前不需要提前握手。因此,当应用程序通过 UDP 而不是 TCP 运行时,专用于这些特定应用程序的服务器通常可以支持更多的在线客户端。
UDP 提供的是一种不可靠的数据传输服务,也就是说:
翻译一下就是:
假设你打开浏览器,并在地址栏中输入 http://yourbusiness.com/about.html, 请问从你按下回车开始到在显示网页的过程间会发生什么?请提供所使用协议的详细信息以及所交换信息的高级描述。
SMTP(Simple Mail Transfer Protocol, 简单邮件传输协议) 是一种提供可靠且有效的电子邮件传输的协议,主要用于系统之间的邮件信息传递,并提供有关来信的通知。
为了说明 SMTP 的基本操作,让我们来假设一个常见的场景。假设 Alice 想要给 Bob 发送一条简单的 ASCII 消息: