Ros1中的pub和sub是如何建立连接的?
先上时序图,一睹为快
连接拓扑关系
简要描述连接拓扑关系:
pub<–>rosmaster: pub节点进程与rosmaster使用xmlrpc机制进程通讯,xmlrpc是基于xml格式和http协议的一种rpc(remote procedure call)。
sub<–>rosmaster: 同pub节点。
pub<–>sub: 节点间使用socket(tcp/udp传输层协议)进行连接
详细流程探究
方法
源码: 下载ros源码并编译(可参考上篇文章),也可以直接使用ros wiki链接进行操作。
断点调试:
- 节点连接主要是在ros_comm/roscpp,所以修改roscpp下的CMakeLists文件,增加编译debug选项(add_definitions("-Wall -g"))。
- 编译源码,将libroscpp.so放到的你ros环境的lib目录下(例如:/opt/ros/melodic/lib)。
- 在ros的tutorial中编写talker、listener示例(注意两个的CMakeLists也要增加add_definitions("-Wall -g"))。
- gdb运行talker、listener。
流程描述
talker主要代码:
ros::init(argc, args, "talker");
ros::NodeHandle n;
ros::Publisher pub = n.advertise<talker::Num>("Num", 1000);
listener主要代码
ros::init(argc, args, "listener");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("Num", 1000, NumCallback);
可以发现相同的代码为ros::init()、ros::NodeHandle n;
ros::init()流程
|