• Linux中ROS话题通信中发布者基本操作(C++实现)


    实现:

    编写发布订阅实现,要求发布方以10HZ (十分之一/秒)的频率发布文本消息,订阅方订阅消息并将消息内容打印输出。


    分析:

    在实现中,ROS master 已有不需要实现,而连接的建立也以及被ros系统封存好了,所以我们只需要关注的关键点有三个

    1、发布方

    2、接受方

    3、数据(此处为普通文本)


    流程:

    1、编写发布方实现;

    2、编写订阅方实现;

    3、编辑配置文件;

    4、编译并执行;


    具体实现:

    创建一个工作空间

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

    打开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}

    # )

    将其修改为
     

    1. target_link_libraries(demo01_pub
    2. ${catkin_LIBRARIES}
    3. )

    按ctrl+shift+B编译一下


    新建一个终端打开ros

    roscore

    再新建一个终端输入

    1. cd demo03_ws/
    2. source ./devel/setup.bash
    3. rosrun plumbing_pub_sub demo01_pub

    再新创一个终端输入

    rostopic echo fang

     如果是这样的,那程序到现在为止都是正确的

  • 相关阅读:
    leecode#Excel表列序号#组合两个表
    MySQL嵌套,别名,分组查询
    Tomcat
    Vue应用API——use解析
    【案例 5-4】 字符串转换为二进制
    【gock】 无侵入的 Http Mock 工具
    深度卷积神经网络是什么,卷积神经网络教学视频
    基于PHP+MySQL的动漫交流及动漫周边购物网站
    电脑重装系统word从第二页开始有页眉页脚如何设置
    【NDK Lab】环境搭建以及so打包和使用
  • 原文地址:https://blog.csdn.net/qq_50942093/article/details/126131661