• 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

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

  • 相关阅读:
    springboot+蛋糕订购商城 毕业设计-附源码161617
    融合差分进化和混合多策略的麻雀搜索算法
    机器学习笔记 - 用于3D点云数据分类的Point Net的训练
    视频制作不求人:批量添加滚动字幕的详细教程
    jenkins搭建
    java计算机毕业设计vue架构云餐厅美食订餐系统MyBatis+系统+LW文档+源码+调试部署
    形态的两种相似性
    Java.lang ClassLoader findClass()方法具有什么功能呢?
    第七章用Python实现对Excel文件中的数据进行md5加密
    【转存】Linux环境RabbitMq搭建部署
  • 原文地址:https://blog.csdn.net/qq_50942093/article/details/126131661