主要使用std_msgs数据结构
rosmsg show std_msgs
自定义话题消息
1、新建msg文件
2、修改CMakeLists.txt文件
3、修改package.xml文件
4、生成对应头文件
5、编写发布者程序
6、编写接收者程序
1、一个数组+一个浮点数据
cd catkin_ws
mkdir msg && cd msg
gedit test.msg
float32[[] a
float32 b
2、在find_package中添加geometry_msgs message_generation,
取消add_message_files和FILES以及下面反括号的注释,在下面添加一行mypath.msg
取消generate_messages所在部分的注释,将geometry_msgs添加进去
取消catkin_package所在部分的注释,在std_msgs后面添加message_runtime
find_package(catkin REQUIRED COMPONENTS
...
message_generation
)
add_message_files(
FILES
test.msg
)
catkin_package(
INCLUDE_DIRS include
# LIBRARIES gazebo_nav
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
# DEPENDS system_lib
)
generate_messages(
DEPENDENCIES
geometry_msgs
std_msgs # Or other packages containing msgs
)
3、在package.xml文件中添加依赖
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
4、
msg头文件在devel/include/功能包名/test.h
5、C++发布者
#include <ros/ros.h>
#include <std_msgs/Float32.h>
#include <功能包名/test.h>
int main(int argc,char** argv)
{
ros::init(argc,argv,"matrix_pub");
ros::NodeHandle n;
ros::Publisher pub = n.advertise<gazebo_nav::matrix_msg>("matrix_test",10);
ros::Rate loop(10);
while (ros::ok())
{
gazebo_nav::matrix_msg msg;
msg.a = {1,2,3};
msg.b =4.0;
pub.publish(msg);
ros::spinOnce();
loop.sleep();
}
return 0;
6、C++订阅者
#include <ros/ros.h>
#include <功能包名/test.h>
#include <std_msgs/Float32.h>
std::vector<int> v1;
float32 b;
void matrix_CB(const gazebo_nav::matrix_msg& msg)
{
ROS_INFO("this is matrix msg sub:");
for(int i=0;i < msg.a.size();i++)
{
v1.push_back(msg.a[i]);
}
b.push_back(msg.b)
}
int main(int argc,char** argv)
{
ros::init(argc,argv,"matrix_test_sub");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("matrix_test",10,matrix_CB);
ros::Rate r(10);
ros::spin();
return 0;
}
python发布者
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import rospy
from 功能包名.msg import Test
from random import random
rospy.init_node('test_publisher')
pub=rospy.Publisher('test',Test,queue_size=5)
rate =rospy.Rate(2)
while not rospy.is_shutdown():
msg = Test()
msg.a =[(random(),random(),random(),random()),(random(),random(),random(),random())]
msg.b = 3.3
pub.publish(msg.ccc)
rate.sleep()
python订阅者
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import rospy
from 功能包名.msg import Test
from random import random
def pointCallback(msg):
a = msg.a
b = msg.b
def point_subscriber():
rospy.init_node('test_subscribe')
rospy.Subscriber('test',Test,pointCallback)
rospy.spin()
if __name__ == '__main__':
point_subscriber()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)