ROS源代码阅读(1):找切入点

来源:互联网 发布:淘宝店铺运营助手在哪 编辑:程序博客网 时间:2024/06/08 07:35

ROS机器人操作系统是一个机器人软件平台,它能为异质计算机集群提供类似操作系统的功能。
其源代码可以按照网页kinetic/Installation/Source中的步骤下载。

阅读ROS操作系统源代码,将代码下载下来后,需要找到一个切入点,层层深入阅读。
在ROS官网教程中,第一段示例应用代码如下,想以此为依据,找到解析ROS的切入点。

#include "ros/ros.h"#include "std_msgs/String.h"#include <sstream>int main(int argc, char **argv){  ros::init(argc, argv, "talker");  ros::NodeHandle n;  ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);  ros::Rate loop_rate(10);  int count = 0;  while (ros::ok())  {    std_msgs::String msg;    std::stringstream ss;    ss << "hello world " << count;    msg.data = ss.str();    ROS_INFO("%s", msg.data.c_str());    chatter_pub.publish(msg);    ros::spinOnce();    loop_rate.sleep();    ++count;  }  return 0;}

上述代码一开始首先进行ROS环境的初始化,调用了ros::init()函数和创建了ros::NodeHandle类的对象。

  ros::init(argc, argv, "talker");  ros::NodeHandle n;

从ROS官网教程中的示例代码可以看到,无论是创建消息发布/订阅者(publisher/subscriber)还是创建服务/客户节点(service and client),都需要使用这两行代码。因此,计划从这两行代码切入,对ROS进行解析。

经查看源代码,ros::init()函数和ros::NodeHandle类的定义,包括创建消息发布/订阅者(publisher/subscriber),还有创建服务/客户节点(service and client)相关的函数和类,都在源代码的

src/ros_comm/roscpp

目录下。文件夹结构如下:

.├── include│   └── ros│       └── transport├── msg├── rosbuild│   └── scripts├── src│   ├── libros│   │   └── transport│   └── roscpp└── srv

其中,include/ros目录下是关键的头文件,src/libros目录下是关键的.cpp文件。

后续,我将以ros::init()函数和ros::NodeHandle类为切入,逐步解析src/ros_comm/roscpp下的代码。

ros::init()的解析请关注下一篇博客ROS程序的初始化——从ros:init()出发