ROS话题通讯中C++写发布方,python写订阅方,两者可以实现通信,但是话题需要相同

目录

1、发布方具体实现

1.1创建工作空间

1.2发布者代码实现

1.3编译文件配置

2、话题通信订阅方实现

2.1scripts文件添加可执行权限

2.2订阅者代码实现

2.3配置编译文件

4、ROS中C++加Python代码实现话题通信结果演示

5、 注意:发布方和订阅方应该要有一致的话题


1、发布方具体实现

1.1创建工作空间

首先创建一个工作空间以及一个src子目录,然后再进入工作空间调用catkin_make命令编译
 

mkdir -p demo01_ws/src

cd demo01_ws/

catkin_make

 启动VScode

code .

右键点击src,点击Create Catkin Package

 输入

plumbing_pub_sub

roscpp rospy std_msgs

在plumbing_pub_sub功能包中的src中新建C++工具包demo01_pub.cpp

 在demo01_pub.cpp中编写代码

1.2发布者代码实现

#include "ros/ros.h"
#include "std_msgs/String.h"
    //1.包含ros头文件,ros中文本类型为std_msgs/String.h
int main(int argc, char  *argv[])
{
    //2.初始化ROS节点 ;
    ros::init(argc,argv,"erGouzi");
    //3.创建节点句柄;
    ros::NodeHandle nh;
    //4.创建发布者对象;
    ros::Publisher pub=nh.advertise("fang",10);
    // nh.advertise创建发布者对象,std_msgs::String数据类型
    // fang为话题,用于和订阅方匹配;
    // 10代表数据缓冲区,如果我们要发12条消息,但是由于网络延迟要12条全部发送会堵塞,就可以选后10条发送
        
    //5.编写发布逻辑并发布数据;
    //创建被发送的消息 msg
    std_msgs::String msg;
    //编写循环,循环中发布数据
    while(ros::ok())//如果这个节点还存在,则while继续执行
    {
        msg.data = "HOW_ARE_YOU";
        pub.publish(msg);           //发布数据
    }
        
    return 0;
}

1.3编译文件配置

打开plumbing_pub_sub的CmakeLists.txt进行文件配置

找到

# add_executable(${PROJECT_NAME}_node src/plumbing_pub_sub_node.cpp)

将其修改为

add_executable(demo01_pub src/demo01_pub.cpp)

找到

# target_link_libraries(${PROJECT_NAME}_node

        # ${catkin_LIBRARIES}

# )

将其修改为
 

    target_link_libraries(demo01_pub
     
            ${catkin_LIBRARIES}
     
    )

按ctrl+shift+B编译一下

2、话题通信订阅方实现

在plumbing_pub_sub功能包中的src中新建Python功能包目录 scripts

在scripts中新建python文件demo02_sub_p.py

2.1scripts文件添加可执行权限

右键点击scripts打开终端

chmod +x *.py

2.2订阅者代码实现

#! /usr/bin/env python
import rospy
from std_msgs.msg import String 
"""
    订阅实现流程:
    1.导包;
    2.初始化ROS节点;
    3.创建订阅者对象
    4.回调函数处理数据;
    5.spin()
"""
 
def doMsg(msg):
    rospy.loginfo("我订阅的数据:%s",msg.data)
 
if __name__ == "__main__":
    #2.初始化ROS节点;
    rospy.init_node("lala")
    #3.创建订阅者对象
    sub = rospy.Subscriber("fang",String,doMsg,queue_size=10)
    #4.回调函数处理数据;
    
    #5.spin()
    rospy.spin()
 

2.3配置编译文件

找到CmakeLists.txt文件

找到

# catkin_install_python(PROGRAMS

# scripts/my_python_script

# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}

# )

将其修改为
 

catkin_install_python(PROGRAMS

scripts/demo02_sub_p.py

DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}

)

4、ROS中C++加Python代码实现话题通信结果演示

 开三个终端

roscore
cd demo03_ws/
source ./devel/setup.bash
rosrun plumbing_pub_sub demo01_pub

  

cd demo03_ws
source ./devel/setup.bash
rosrun plumbing_pub_sub demo02_sub_p.py

 出现下图所示则表明话题通讯成功
ROS话题通讯中C++写发布方,python写订阅方,两者可以实现通信,但是话题需要相同_第1张图片

5、 注意:发布方和订阅方应该要有一致的话题

你可能感兴趣的:(ros,Linux,c++,ros,linux,python)