文章目录
简介
话题消息的自定义是一个语言,他能根据不同的语言变换不同的形式
1.定义msg文件
文件夹位置:功能包中
创建一个名为msg的文件夹用来存储自定义消息
在msg中创建自定义消息文件,文件的后缀为.msg
文件内容:
string name
uint8 sex
uint8 age
uint8 unknown = 0
uint8 male = 1
unit8 famale = 2
2.在package.xml文件中添加功能包依赖
<build_depend>message_generation</build_depend>//构建依赖
<exec_depend>message_runtine</exec_depend>//运行依赖
3. 在CMakeLists.txt添加编译选项
- find_package
message_generation
声明ROS消息、服务和操作
声明ROS动态重新配置参数
至此添加完成
如果在devel/include文件夹下生成头文件说明创作消息成功
使用实例
发布者
#include <ros/ros.h>
#include <learning_topic/Person.h>
int main(int argc, char** argv )
{
ros::init(argc, argv, "person_publisher");
ros::NodeHandle n;
ros::Publisher person_info_publisher = n.advertise<learning_topic::Person>("/person_info", 10);
ros::Rate loop_rate(1);
while(ros::ok())
{
learning_topic::Person person_msg;
person_msg.name = "zhang";
person_msg.age = 21;
person_msg.sex = learning_topic::Person::male;
person_info_publisher.publish(person_msg);
ROS_INFO("Publish Person Info: name:%s age:%d sex: %d",person_msg.name.c_str(), person_msg.age, person_msg.sex);
loop_rate.sleep();
}
}
订阅者
#include <ros/ros.h>
#include <learning_topic/Person.h>
void personCallback(const learning_topic::Person::ConstPtr& msg)
{
ROS_INFO("Subscribe Person Info: name:%s age:%d sex: %d",
msg->name, msg->age, msg->sex);
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "person_subscriber");
ros::NodeHandle n;
ros::Subscriber person_info_subscriber = n.subscribe("/person_info",10,personCallback);
ros::spin();
return 0;
}
1.修改CMakeLists.txt
在build模块添加下面代码
add_executable(person_subscriber src/person_subscriber.cpp)
target_link_libraries(person_subscriber ${catkin_LIBRARIES})
add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp)
add_executable(person_publisher src/person_publisher.cpp)
target_link_libraries(person_publisher ${catkin_LIBRARIES})
add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp)
2.编译
回到工作空间
执行catkin_make
3.修改环境变量
source devel/setup.bash
4.执行
rosrun learning_topic person_publisher
出现以上错误,是因为没有运行roscore
打开roscore即可
执行结果
总结
使用的注意事项
需要在使用到自定义话题的节点的CMakeLists.txt部分中添加
add_dependencies(节点可执行目标文件 ${PROJECT_NAME}_generate_messages_cpp)