总结一下ROS自定义msg的用法(python)
参考:ROS Tutorials
一、自定义msg
1.新建msg文件
ROS自定义message需要在软件包下新建 /msg 文件夹,并在此文件夹下建立文件 msg名称.msg。.msg文件的文件格式如下
<< data_type1 >> << name_1 >>
<< data_type2 >> << name_2 >>
<< data_type3 >> << name_3 >>
...
(实际应用中删除<>)
其中data_type包含以下几种:
int8,int16,int32,int64
float32,float64
string
其他自定义msg:package/MessageName
不定长array[ ]以及定长array[N]
msg文件例子
string message
float32 sent_time
2.修改package.xml
在package.xml中加入以下两行代码
message_generation
message_runtime
message_generation用于编译阶段,message_runtime用于运行阶段。
3.修改CMakelist.txt
在CMakelist.txt中找到以下代码并取消注释
find_package(catkin REQUIRED COMPONENTS rospy std_msgs message_generation)
add_message_files(FILES <>.msg)
generate_messages(DEPENDENCIES std_msgs)
catkin_package(CATKIN_DEPENDS rospy std_msgs message_runtime)
注意第二行使用自己定义的msg文件名称,使用时去掉<>。
4.catkin_make
以上步骤使用完毕后回到catkin工作空间使用catkin_make命令就大功告成了,可以使用如下命令验证msg是否定义成功
rosmsg show <>
二、python文件中的自定义msg使用
话不多说,直接上代码
#!/usr/bin/env python
import rospy
from my_chatter.msg import TimestampString
def talker():
rospy.init_node('talker', anonymous=True) #定义节点
pub = rospy.Publisher('user_message', TimestampString, queue_size=10) #定义话题
r = rospy.Rate(10) # 10hz
# Loop until the node is killed with Ctrl-C
while not rospy.is_shutdown():
pub_string = TimestampString() #声明msg类型
pub_string.message = raw_input("Please enter a line of text and press :") # ros使用python2.7,使用raw_input读取字符串
pub_string.sent_time = rospy.get_time()
pub.publish(pub_string) #发布消息
r.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException: pass
原文链接:https://blog.csdn.net/HIT_Kyrie/article/details/106483121