目录

 

1.创建工作空间

2.创建功能包

3.在src中创建广播a.cpp

4.创建订阅b.cpp

5.修改cmake文件

6.编译

7.运行,在终端输入roscore启动

8.查看消息节点


1.创建工作空间

mkdir -p ~/test_ws/src 
cd ~/test_ws/src
catkin_init_workspace
cd ~/test_ws
catkin_make

2.创建功能包

cd ~/tets_ws/src
catkin_create_pkg test-cpp roscpp std_msgs

3.在src中创建广播a.cpp

cd ~/test_ws/src/test-cpp/src
touch a.cpp
touch b.cpp

在a.cpp中写入

#include "ros/ros.h"    //包含了使用ROS节点的必要文件
#include "std_msgs/String.h"    //包含了使用的数据类型
#include <sstream>
 
int main(int argc, char **argv)
{
    ros::init(argc, argv, "node_a");    //初始化ROS,节点名命名为node_a,节点名必须保持唯一
    ros::NodeHandle n;    //实例化节点, 节点进程句柄
    ros::Publisher pub = n.advertise<std_msgs::String>("str_message", 1000);    //告诉系统要发布话题了,话题名为“str_message”,类型为std_msgs::String,缓冲队列为1000。
ros::Rate loop_rate(10);    //设置发送数据的频率为10Hz
//ros::ok()返回false会停止运行,进程终止。
    while(ros::ok())
    {
        std_msgs::String msg;
        std::stringstream ss;
        ss<<"Hello World";
        msg.data = ss.str();
        ROS_INFO("node_a is publishing %s", msg.data.c_str());
        pub.publish(msg);    //向话题“str_message”发布消息
        ros::spinOnce();    //不是必须,若程序中订阅话题则必须,否则回掉函数不起作用。
        loop_rate.sleep();    //按前面设置的10Hz频率将程序挂起
    }
 
    return 0;
}

4.创建订阅b.cpp

#include "ros/ros.h"
#include "std_msgs/String.h"
//话题回调函数
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
    ROS_INFO("node_b is receiving [%s]", msg->data.c_str());
}
 
 
int main(int argc, char **argv)
{
    ros::init(argc, argv, "node_b");    //初始化ROS,节点命名为node_b,节点名必须唯一。
    ros::NodeHandle n;    //节点句柄实例化
    ros::Subscriber sub = n.subscribe("str_message", 1000, chatterCallback);    //向话题“str_message”订阅,一旦发布节点(node_a)在该话题上发布消息,本节点就会调用chatterCallbck函数。
 
    ros::spin();    //程序进入循环,直到ros::ok()返回false,进程结束。
 
    return 0;
}

5.修改cmake文件

gedit ~/test_ws/src/test-cpp/CMakeLists.txt
cmake_minimum_required(VERSION 3.0.2)
project(test-cpp)
find_package(catkin REQUIRED COMPONENTS roscpp std_msgs)
catkin_package()
include_directories( ${catkin_INCLUDE_DIRS})
add_executable(test_a src/a.cpp)    
add_executable(test_b src/b.cpp)
target_link_libraries(test_a ${catkin_LIBRARIES})   
target_link_libraries(test_b ${catkin_LIBRARIES})

6.编译

cd ~/test_ws
catkin_make

7.运行,在终端输入roscore启动

cd ~/test_ws
source devel/setup.bash
rosrun test-cpp test_a

cd ~/test_ws
source devel/setup.bash
rosrun test-cpp test_b

8.查看消息节点

rqt_graph

rostopic list 
rostopic echo /str_message

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐