接着上一篇博文ROS程序的初始化——从ros:init()出发,我们接着来分析ROS程序的初始化问题。在此文中我们探讨的是节点环境的初始化——this_node::init()
this_node::init()函数的源代码在./src/ros_comm/roscpp/src/libros/this_node.cpp
中,具体实现如下:
//./src/ros_comm/roscpp/src/libros/this_node.cpp
void init(const std::string& name, const M_string& remappings, uint32_t options)
{
ThisNode::instance().init(name, remappings, options);
}
其中,ThisNode是文件./src/ros_comm/roscpp/src/libros/this_node.cpp
中定义的一个类,该类的具体定义如下:
//./src/ros_comm/roscpp/src/libros/this_node.cpp
class ThisNode
{
std::string name_;
std::string namespace_;
ThisNode() : name_("empty") {}//构造对象时将name_置为空
public:
static ThisNode& instance()
{
static ThisNode singleton;//整个ROS程序只有singleton一个拷贝,详见编程中的“单例模式”。
return singleton;
}
const std::string& getName() const
{
return name_;
}
const std::string& getNamespace() const
{
return namespace_;
}
void init(const std::string& name, const M_string& remappings, uint32_t options);
};
this_node::init()函数实际上直接调用的是ThisNode类中的void init(const std::string& name, const M_string& remappings, uint32_t options);
函数。该函数的定义如下:
//./src/ros_comm/roscpp/src/libros/this_node.cpp
void ThisNode::init(const std::string& name,