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

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()出发

你可能感兴趣的:(ROS解析)