一:首先在功能包目录下(与src目录相同)创建msg文件夹,在文件夹里创建一个.msg文件。
例如一个名为num.msg的文件
内容为:Header header int32 demo_int float64 demo_double
二添加依赖项
在xml文件中添加
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
在.txt文件中添加
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
message_generation #新添加的
)
add_message_files(FILES num.msg)
generate_messages(DEPENDENCIES std_msgs)
catkin_package(
CATKIN_DEPENDS roscpp std_msgs message_runtime
)
三 编译
四 添加源代码
//发布者
#include <ros/ros.h>
#include <std_msgs/String.h> //#include "std_msgs/String.h"
#include <std_msgs/Float64.h>
#include <learning/num.h>
int main(int argc, char **argv)
{
ros::init(argc, argv, "talk");
ros::NodeHandle n;
ros::Publisher chatter_pub = n.advertise<learning::num>("topic11", 1000); //ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
ros::Rate loop_rate(10);
//int count = 0;
// std_msgs::String a;
learning::num cc;
cc.demo_int=1;
while (ros::ok())
{
// std::stringstream ss;
// ss << "hello world " << count;
//msg.data = count;// msg.data = ss.str();
// ROS_INFO("%s", a.data.c_str());
//ROS_INFO("%d", msg.data); //ROS_INFO("%f", msg.data.c_str())
chatter_pub.publish(cc);
//ros::spinOnce();
loop_rate.sleep();
//++count;
cc.demo_int++;
}
return 0;
}
//订阅者
#include <ros/ros.h>
#include <std_msgs/String.h> //#include "std_msgs/String.h"
#include <std_msgs/Float64.h>
#include <learning/num.h>
void chatterCallback(const learning::num& msg) //void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
ROS_INFO("%d", msg.demo_int); //ROS_INFO("I heard: [%f]", msg->data.c_str());
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "listen");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("topic11", 100, chatterCallback);
// std_msgs::Float64 b;
// b.data=10.0;
ros::spin();
// ROS_INFO("%d", b.data);
return 0;
}
五往.txt文件中添加
add_executable(talk src/talk.cpp)
target_link_libraries(talk ${catkin_LIBRARIES})
add_dependencies(talk ${PROJECT_NAME}_gencpp)
add_executable(listen src/listen.cpp)
target_link_libraries(listen ${catkin_LIBRARIES})
add_dependencies(listen ${PROJECT_NAME}_gencpp)
六 编译 运行roscore 运行包