• ROS回顾与整理《三、SLAM相关工具箱》


    在/home/catkin_ws/src/learning_comnunication/src 编写源码文件;
    其中talker.cpp 与 listener.cpp 是发布者与订阅者实现

    talker实现如下

     1 /**
     2  * 该例程将发布chatter话题,消息类型String
     3  */
     4  
     5 #include <sstream>
     6 #include "ros/ros.h"
     7 #include "std_msgs/String.h"
     8 
     9 int main(int argc, char **argv)
    10 {
    11   // ROS节点初始化
    12   ros::init(argc, argv, "talker");
    13   
    14   // 创建节点句柄
    15   ros::NodeHandle n;
    16   
    17   // 创建一个Publisher,发布名为chatter的topic,消息类型为std_msgs::String
    18   ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
    19 
    20   // 设置循环的频率
    21   ros::Rate loop_rate(10);
    22 
    23   int count = 0;
    24   while (ros::ok())
    25   {
    26     // 初始化std_msgs::String类型的消息
    27     std_msgs::String msg;
    28     std::stringstream ss;
    29     ss << "hello world " << count;
    30     msg.data = ss.str();
    31 
    32     // 发布消息
    33     ROS_INFO("%s", msg.data.c_str());
    34     chatter_pub.publish(msg);
    35 
    36     // 循环等待回调函数
    37     ros::spinOnce();
    38     
    39     // 按照循环频率延时
    40     loop_rate.sleep();
    41     ++count;
    42   }
    43 
    44   return 0;
    45 }

    listener实现如下:

     1 /**
     2  * 该例程将订阅chatter话题,消息类型String
     3  */
     4  
     5 #include "ros/ros.h"
     6 #include "std_msgs/String.h"
     7 
     8 // 接收到订阅的消息后,会进入消息回调函数
     9 void chatterCallback(const std_msgs::String::ConstPtr& msg)
    10 {
    11   // 将接收到的消息打印出来
    12   ROS_INFO("I heard: [%s]", msg->data.c_str());
    13 }
    14 
    15 int main(int argc, char **argv)
    16 {
    17   // 初始化ROS节点
    18   ros::init(argc, argv, "listener");
    19 
    20   // 创建节点句柄
    21   ros::NodeHandle n;
    22 
    23   // 创建一个Subscriber,订阅名为chatter的topic,注册回调函数chatterCallback
    24   ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
    25 
    26   // 循环等待回调函数
    27   ros::spin();
    28 
    29   return 0;
    30 }

    在/home/catkin_ws/src/learning_comnunication 中的CMakeLists.txt 中添加如下:

    add_executable(talker src/talker.cpp)
    target_link_libraries(talker ${catkin_LIBRARIES})

    add_executable(listener src/listener.cpp)
    target_link_libraries(listener ${catkin_LIBRARIES})

    在/home/catkin_ws下编译、运行
    catkin_make

    在三个终端分别执行以下命令:

    1 roscore
    2 rosrun learning_communication talker
    3 rosrun learning_communication listener

    在新终端执行
    root@sry:~# rosrun learning_communication talker
    报错:
    [rosrun] Couldn't find executable named talker below /root/catkin_ws/src/learning_communication

    经过痛苦查找,发现我的功能包名字叫: learning_comnunication
    上述的rosrun learning_communication talker 会查找根目录下那个相关文件夹;所以控制台报错
    说在XXXXX路径下找不到可执行文件 talker

    【将错就错】
    rosrun learning_comnunication talker
    rosrun learning_comnunication listener

    以下是消息定义:

    ##########3话题消息定义#############
    在 /home/catkin_ws/src/learning_communication
    mkdir msg
    ##创建消息文件Person.msg

    文件中添加以下内容并保存

    1 string name
    2 uint8  sex
    3 uint8  age
    4 
    5 uint8 unknown = 0
    6 uint8 male    = 1
    7 uint8 female  = 2

    #在 /home/catkin_ws/src/learning_communication/package.xml添加依赖【注意添加位置,否则无效】
    <build_depend>message_generation</build_depend>
    <exec_depend>message_runtime</exec_depend>

    #在 /home/catkin_ws/src/learning_communication/CMakeLists.txt 中添加编译选项
    find_package( …… message_generation)

    catkin_package(CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs message_runtime)

    add_message_files(FILES Person.msg)
    generate_messages(DEPENDENCIES std_msgs)

    消息定义:

  • 相关阅读:
    CSS样式—绝对定位(absolute)与相对定位(relative)的区别(图示)
    firefox与IE透明度(opacity)设置区别
    nopCommerce学习之架构(三)
    nopCommerce学习之程序包(四)
    Hadoop 部署
    nopCommerce学习之汉化(二)
    PetShop 首页
    nopCommerce学习之安装配置(一)
    C# 中ToString()的用法
    对象的当前状态使该操作无效
  • 原文地址:https://www.cnblogs.com/winslam/p/10118484.html
Copyright © 2020-2023  润新知