ros2--接口

什么是接口

这里的接口不是编程语言中的函数接口。而是应该理解为在ros2中进行数据通信的接口;这些接口在ros2中使用时必须有统一的标准,就像USB接口一样有着统一的通信协议。所以这里的接口更好的理解是:ros2数据通信的统一接口。

我们创建话题的时候,需要指定话题的类型,创建服务的时候也需要指定客户端和服务端服务的类型,不管是话题还是服务,这些类型都是结构体。

而这些通信的对象,不管是发起端还是接收端,都要指定数据通信的接口类型,而且只有发起端和接收端的接口类型一致,才能进行正常的数据通信。

接口的作用

指定数据通信两端使用的统一协议(统一数据格式--本质上就是统一结构体类型)。

通信的两端接口的类型不一样,但是接口中的数据一样,能通信吗?

1,如果是可以通信的,那么当一端有两个service所有接收的数据都一样,但是接口类型不一样时,当接收到同一个client请求时,应该由哪个service处理?

经过实际项目测试,通信的两端必须接口的类型(包括命名空间)必须一致,否则无法通信;

eg:

/robot_driver/srv/connect_robot和/example/srv/connect_robot两个接口,即使数据一模一样,也是无法通信的。

ros2的四种通信方式和3中接口

链接

ros2原生的接口

查看ros2中所有接口

ros2 interface list

包括ros2原生的,以及后续添加的。

查看某个接口的定义

ros2 interface show 接口的完整路径(功能包/目录/接口名)

接口文件定义

msg,srv,action文件中都可以定义哪些类型的变量?

小鱼教程

1,9个基础数据类型;

2,自定义类型;

定义数组类型

静态数组

只需要在类型的后面加上[ ]就是定义数组;

float64 j[12]

构建之后生成的数组是std::array类型。

// field types and members

using _j_type =

std::array<double, 12>;

_j_type j;

动态数组

不指定数组的大小就是定义动态数组;

int32[] var

生成:

  using _var_type =
    std::vector<int32_t, typename std::allocator_traits<ContainerAllocator>::template rebind_alloc<int32_t>>;
  _var_type var;

限定大小的数组

int32[<=100] data

构建生成的类型:

  // field types and members
  using _data_type =
    rosidl_runtime_cpp::BoundedVector<int32_t, 100, typename std::allocator_traits<ContainerAllocator>::template rebind_alloc<int32_t>>;
  _data_type data;

BoundedVector---有界vector;

使用的时候单个数值传递给指定下标的数组元素即可;

当然,也可以定义这种长类型的变量,赋值:

 rosidl_runtime_cpp::BoundedVector<int32_t, 100, typename std::allocator_traits<ContainerAllocator>::template rebind_alloc<int32_t>>

多维数组

ros2并不支持定义二维以上的数组,只能通过定义对象,对象中包含数组,再定义对象数组的方式实现多维数组。

int

注意,在接口定义文件中,没有"int"类型,只有int32,int64,int16等这种"int+数字"的格式;

float和double

float32---float

float64--double

int32[<=100] data
float32 float_32_var
float64 float_64_var
float32[3] float_32_array
float64[3] float_64_array
float32[] float_32_vector
float64[] float_64_vector

默认值

int32 size 12
int32 capacity 100

一个功能包中的msg,srv,action可以引用其他功能包的接口的类型来定义参数吗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值