【ROS学习-10】用C++编写一个简单的Publisher和Subscriber

1.创建Publisher Node
  roscd beginner_tutorials
   创建src/talker.cpp文件,内容如下(可从https://raw.github.com/ros/ros_tutorials/kinetic-devel/roscpp_tutorials/talker/talker.cpp获取源码):
  #include "ros/ros.h"
  #include "std_msgs/String.h"

  #include <sstream>

  int main(int argc, char **argv)
  {
    ros::init(argc, argv, "talker");
    ros::NodeHandle n;
    ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
    ros::Rate loop_rate(10);
    int count = 0;
    while(ros::ok())
    {
      std_msgs::String msg;
      std::stringstream ss;
      ss << "hello world " << count;
      msg.data = ss.str();
      ROS_INFO("%s", msg.data.c_str());
      chatter_pub.publish(msg);
      ros::spinOnce();
      loop_rate.sleep();
      ++count;
    }
    return 0;
  }
2.创建一个Subscriber Node
   接下来再创建一个订阅者程序src/listener.cpp,源码如下(https://raw.github.com/ros/ros_tutorials/kinetic-devel/roscpp_tutorials/listener/listener.cpp):
  #include "ros/ros.h"
  #include "std_msgs/String.h"
  void chatterCallback(const std_msgs::String::ConstPtr& msg)
  {
    ROS_INFO("I heard: [%s]", msg->data.c_str());
  }

  int main(int argc, char **argv)
  {
    ros::init(argc, argv, "listener");
    ros::NodeHandle n;
    ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
    ros::spin();
    return 0;
  }
   接下来在CMakeLists.txt文件最后添加如下内容:
  add_executable(talker src/talker.cpp)
  target_link_libraries(talker ${catkin_LIBRARIES})
  add_dependencies(talker beginner_tutorials_generate_messages_cpp)

  add_executable(listener src/listener.cpp)
  target_link_libraries(listener ${catkin_LIBRARIES})
  add_dependencies(listener beginner_tutorials_generate_messages_cpp)
3.编译执行
  cd ~/ros/catkin_ws
  catkin_make
   编译完后,使用如下命令执行(分别在两个Terminal):
  rosrun beginner_tutorials talker
   执行后会有如下打印输出:
  [ INFO] [1497787911.592887183]: hello world 0
  [ INFO] [1497787911.692986744]: hello world 1
  [ INFO] [1497787911.792978718]: hello world 2
  [ INFO] [1497787911.892973684]: hello world 3
  [ INFO] [1497787911.992973354]: hello world 4
  [ INFO] [1497787912.092982118]: hello world 5
  [ INFO] [1497787912.192957919]: hello world 6
  [ INFO] [1497787912.292959869]: hello world 7
   而下面命令:
  rosrun beginner_tutorials listener
   执行后有如下输出:
  [ INFO] [1497787976.316714360]: I heard: [hello world 275]
  [ INFO] [1497787976.416562016]: I heard: [hello world 276]
  [ INFO] [1497787976.516452913]: I heard: [hello world 277]
  [ INFO] [1497787976.616635718]: I heard: [hello world 278]
  [ INFO] [1497787976.716403373]: I heard: [hello world 279]
  [ INFO] [1497787976.816449993]: I heard: [hello world 280]

  [ INFO] [1497787976.916431239]: I heard: [hello world 281]
4.参考网址

评论

此博客中的热门博文

I/O映射之I/O端口

通过Netlink检测网线插拔

使用seq_file