ROS基础(三)

本文介绍了如何在ROS中创建C++和Python的简单消息发布器与订阅器。通过创建`beginner_tutorials`包,详细讲解了C++中编写发布器节点(talker.cpp)和订阅器节点(listener.cpp)的步骤,包括节点初始化、消息类型、发布与订阅操作。同时,还涵盖了Python版本的发布器和订阅器的编写,并指导如何编译和测试这些节点。
摘要由CSDN通过智能技术生成

十、编写简单的消息发布器和订阅器 (C++)

(以beginner_tutorials为名的包为例)

编写发布器节点

1.cd到src文件的相应包内

$ cd ~/catkin_ws/src/beginner_tutorials

2.在 beginner_tutorials package 路径下创建一个src文件夹:

$ mkdir -p ~/catkin_ws/src/beginner_tutorials/src

(这个文件夹将会用来放置 beginner_tutorials package 的所有源代码)

3.在 beginner_tutorials package 里创建 src/talker.cpp 文件,并将如下代码粘贴到文件内:

#include "ros/ros.h"
#include "std_msgs/String.h"

#include <sstream>

/**
 * This tutorial demonstrates simple sending of messages over the ROS system.
 */
int main(int argc, char **argv)
{
  /**
   * The ros::init() function needs to see argc and argv so that it can perform
   * any ROS arguments and name remapping that were provided at the command line. For programmatic
   * remappings you can use a different version of init() which takes remappings
   * directly, but for most command-line programs, passing argc and argv is the easiest
   * way to do it.  The third argument to init() is the name of the node.
   *
   * You must call one of the versions of ros::init() before using any other
   * part of the ROS system.
   **/
  ros::init(argc, argv, "talker");
  
  /**
   * NodeHandle is the main access point to communications with the ROS system.
   * The first NodeHandle constructed will fully initialize this node, and the last
   * NodeHandle destructed will close down the node.
  **/
  ros::NodeHandle n;
   
  /**
   * The advertise() function is how you tell ROS that you want to
   * publish on a given topic name. This invokes a call to the ROS
   * master node, which keeps a registry of who is publishing and who
   * is subscribing. After this advertise() call is made, the master
   * node will notify anyone who is trying to subscribe to this topic name,
   * and they will in turn negotiate a peer-to-peer connection with this
   * node.  advertise() returns a Publisher object which allows you to
   * publish messages on that topic through a call to publish().  Once
   * all copies of the returned Publisher object are destroyed, the topic
   * will be automatically unadvertised.
   *
   * The second parameter to advertise() is the size of the message queue
   * used for publishing messages.  If messages are published more quickly
   * than we can send them, the number here specifies how many messages to
   * buffer up before throwing some away.
   **/
   ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
   
   ros::Rate loop_rate(10);
   
  /**
   * A count of how many messages we have sent. This is used to create
   * a unique string for each message.
   **/
  int count = 0;
  while (ros::ok())
  {
  /**
   * This is a message object. You stuff it with data, and then publish it.
   **/
    std_msgs::String msg;
   
    std::stringstream ss;
    ss << "hello world " << count;
    msg.data =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值