ROS实现消息发布器和订阅器——Hello Word

维基百科ROS官方教程cn/ROS/Tutorials - ROS Wiki

1.建立工作区间

catkin/Tutorials/create_a_workspace - ROS Wiki

source /opt/ros/melodic/setup.bash
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash

2.创建功能包catkin_create_pkg

catkin/Tutorials/CreatingPackage - ROS Wiki

cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
cd ~/catkin_ws
catkin_make
. ~/catkin_ws/devel/setup.bash

功能包架构

   3.创建ROS消息和ROS服务

cn/ROS/Tutorials/CreatingMsgAndSrv - ROS Wiki

#创建一个msg
cd ~/catkin_ws/src/beginner_tutorials
mkdir msg
echo "int64 num" > msg/Num.msg
#创建一个srv
roscd beginner_tutorials
mkdir srv
roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

4.编写源文件

cn/ROS/Tutorials/WritingPublisherSubscriber(c++) - ROS Wiki

将talker.cpp和listener.cpp放在beginner_tutorials的src里面。

①发布者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;
}


编写简单的消息发布器节点和订阅器节点
“节点(Node)” 是ROS中指代连接到ROS网络的可执行文件的术语

发布器节点(“talker”) : 它将不断的在ROS网络中广播消息
cd ~/ada_ws/src/beginner_tutorials
创建src文件夹,存储源代码

②编写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());

}
// %EndTag(CALLBACK)%

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;
}

    

5.修改CMakeLists.txt为如下:

cmake_minimum_required(VERSION 2.8.3)
project(beginner_tutorials)
 
## Find catkin and any catkin packages
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs genmsg)
 
## Declare ROS messages and services
add_message_files(FILES Num.msg)
add_service_files(FILES AddTwoInts.srv)
 
## Generate added messages and services
generate_messages(DEPENDENCIES std_msgs)
 
## Declare a catkin package
catkin_package()
 
## Build talker and listener
include_directories(include ${catkin_INCLUDE_DIRS})
 
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)
 

package.xml内容

<?xml version="1.0"?>
<package format="2">
  <name>beginner_tutorials</name>
  <version>0.0.0</version>
  <description>The beginner_tutorials package</description>

  <!-- One maintainer tag required, multiple allowed, one person per tag -->
  <!-- Example:  -->
  <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
  <maintainer email="zxy@todo.todo">zxy</maintainer>


  <!-- One license tag required, multiple allowed, one license per tag -->
  <!-- Commonly used license strings: -->
  <!--   BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
  <license>TODO</license>


  <!-- Url tags are optional, but multiple are allowed, one per tag -->
  <!-- Optional attribute type can be: website, bugtracker, or repository -->
  <!-- Example: -->
  <!-- <url type="website">http://wiki.ros.org/beginner_tutorials</url> -->


  <!-- Author tags are optional, multiple are allowed, one per tag -->
  <!-- Authors do not have to be maintainers, but could be -->
  <!-- Example: -->
  <!-- <author email="jane.doe@example.com">Jane Doe</author> -->


  <!-- The *depend tags are used to specify dependencies -->
  <!-- Dependencies can be catkin packages or system dependencies -->
  <!-- Examples: -->
  <!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
  <!--   <depend>roscpp</depend> -->
  <!--   Note that this is equivalent to the following: -->
  <!--   <build_depend>roscpp</build_depend> -->
  <!--   <exec_depend>roscpp</exec_depend> -->
  <!-- Use build_depend for packages you need at compile time: -->
  <!--   <build_depend>message_generation</build_depend> -->
  <!-- Use build_export_depend for packages you need in order to build against this package: -->
  <!--   <build_export_depend>message_generation</build_export_depend> -->
  <!-- Use buildtool_depend for build tool packages: -->
  <!--   <buildtool_depend>catkin</buildtool_depend> -->
  <!-- Use exec_depend for packages you need at runtime: -->
  <!--   <exec_depend>message_runtime</exec_depend> -->
  <!-- Use test_depend for packages you need only for testing: -->
  <!--   <test_depend>gtest</test_depend> -->
  <!-- Use doc_depend for packages you need only for building documentation: -->
  <!--   <doc_depend>doxygen</doc_depend> -->
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>rospy</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <exec_depend>roscpp</exec_depend>
  <exec_depend>rospy</exec_depend>
  <exec_depend>std_msgs</exec_depend>


  <!-- The export tag contains other, unspecified, tags -->
  <export>
    <!-- Other tools can request additional information be placed here -->

  </export>
</package>

 5.编译及运行

cd ~/catkin_ws
catkin_make

6.测试消息发布器和订阅器

cn/ROS/Tutorials/ExaminingPublisherSubscriber - ROS Wiki

打开一个新的终端 输入roscore
新终端2:
cd ~/catkin_ws
source ./devel/setup.bash
rosrun beginner_tutorials talker 
新终端3:
cd ~/catkin_ws 
source ./devel/setup.bash
rosrun beginner_tutorials listener

参考文献

​​​​​​ROS实现消息发布器和订阅器_赤豆几维的博客-CSDN博客

ROS学习记录(二)--消息和服务_Siyuada的博客-CSDN博客

ROS总结——ROS消息和ROS服务_YongqiangGao的博客-CSDN博客_ros 消息

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值