自定义 话题消息与使用 C++实现
/
learning_topic/Person personmsg
/
Person.msg
string name
uint8 sex
uint8 age
uint8 woman =0
uint8 man =1
uint8 manplus =2
package.xml
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
CMakeListen.txt
find_package(catkin REQUIRED COMPONENTS
geometry_msgs
roscpp
rospy
std_msgs
message_generation
)
add_message_files(
FILES
Person.msg
)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES learning_topic
CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs message_runtime
# DEPENDS system_lib
)
Person_Publisher.cpp
/*
* learning_topic/Person personmsg
*/
#include "ros/ros.h"
#include "learning_topic/Person.h"
using namespace ros;
int main(int argc, char **argv){
init(argc , argv , "Person_Publisher");
NodeHandle node;
Publisher pub = node.advertise<learning_topic::Person>("/person_info",100);
Rate rate(5);
while (ok()){
learning_topic::Person msg;
msg.name = "Lee";
msg.age = 24;
msg.sex = learning_topic::Person::man;
pub.publish(msg);
ROS_INFO("publish message is ok: name:%s age:%d sex: %d",
msg.name.c_str(), msg.age, msg.sex);
rate.sleep();
}
return 0;
}
Person_Subscriber.cpp
/*
* learning_topic/Person personmsg
*/
#include "ros/ros.h"
#include "learning_topic/Person.h"
using namespace ros;
void PersonCallBack(const learning_topic::Person::ConstPtr &msg){
ROS_INFO("subscribe this messgae:[name:%s age:%d sex:%d] ",
msg->name.c_str(), msg->age, msg->sex);
}
int main(int argc, char **argv){
init(argc , argv , "Person_Subscriber");
NodeHandle node;
Subscriber sbu = node.subscribe("/person_info",100, PersonCallBack);
ros::spin();
return 0;
}
CMakeListen.txt
add_executable(Person_Publisher src/Person_Publisher.cpp)
add_executable(Person_Subscriber src/Person_Subscriber.cpp)
add_dependencies(Person_Publisher ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
add_dependencies(Person_Subscriber ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(Person_Publisher
${catkin_LIBRARIES}
)
target_link_libraries(Person_Subscriber
${catkin_LIBRARIES}
)
运行结果: