Linux嵌入式开发笔记(七)ROS2中C++的API函数原型

时间:2024-05-22 11:36:28

学着学着,网上的资源就越来越少了,只有匹配自己项目的资源越来越少,授之以鱼不如授人以渔。我就记录一下学习的过程经验,相互学习。

学习完ROS2中的pub/sub,service/client,action等通信示例,大概了解其机制,也就可以自己创建工程,实现一个节点从节点A订阅,处理后发布给节点B;同时作为服务器,处理节点C中客服端的请求,再作为客服端向节点D中服务器请求数据算法处理。总之,可以实现单节点的多重形式通信,但是很多都是在ROS2示例中学习的,函数原型是什么,是如何处理的,就不得而知了。今天记录一下,ROS2中C++涉及函数原型的学习过程。

程序中声明了 #include "rclcpp/rclcpp.hpp" ,就从他开始。(我这里是介绍的一种方法,聪明的你是可以触类旁通,举一反三的)

在ROS2安装路径中,搜索rclcpp.hpp ,找到并打开rclcpp.hpp。(我的路径为ros2_ws/src/ros2/rclcpp/rclcpp/include/rclcpp/rclcpp.hpp)

Linux嵌入式开发笔记(七)ROS2中C++的API函数原型

 

Linux嵌入式开发笔记(七)ROS2中C++的API函数原型

 

Linux嵌入式开发笔记(七)ROS2中C++的API函数原型

这三个图就是其主要内容,其注释很好的展示了函数原型在何处声明:比如

rclcpp::Node就在rclcpp/node.hpp中进行了声明,可以在当前路径中的上一级查找并打开node.hpp,查看其函数原型。 我目前是要查看rclcpp::spin_until_future_complete的函数原型,所以对应上面截图中注释,找到并打开rclcpp/executor.hpp,在里面找到如下内容:

Linux嵌入式开发笔记(七)ROS2中C++的API函数原型

这里就详细介绍了这个rclcpp::spin_until_future_complete的函数原型。这个函数实现的功能就是:旋转(阻塞)直到①将来完成 或 ②等待超时或 ③rclcpp被中断。

其有两个输入,一个返回值。

     \ param [in] future等待的未来。 如果成功,将来可以安全使用此功能。

     \ param [in] timeout可选的超时参数,该参数传递给Executor :: spin_node_once。

      -1是永远的阻止,0是非阻止的。

       如果阻塞循环中花费的时间超过了此超时,则返回TIMEOUT返回码。

     \ return返回代码,是SUCCESS,INTERRUPTED或TIMEOUT之一。(这里对应着此文件开头定义的枚举:enum class FutureReturnCode {SUCCESS, INTERRUPTED, TIMEOUT};)

是不是瞬间明白了许多,这样就可以学习示例中的函数原型,也可以学习和使用示例中没有的函数原型。如果有时间,后续会把所有的API函数整理出来。

自己可以在自己的工程中去试试~