总结一下ROS自定义msg的用法(python)
参考:ROS Tutorials
ROS自定义message需要在软件包下新建 /msg 文件夹,并在此文件夹下建立文件 msg名称.msg。.msg文件的文件格式如下
<< data_type1 >> << name_1 >>
<< data_type2 >> << name_2 >>
<< data_type3 >> << name_3 >>
...
(实际应用中删除<<与>>)
其中data_type包含以下几种:
string message
float32 sent_time
在package.xml中加入以下两行代码
message_generation
message_runtime
message_generation用于编译阶段,message_runtime用于运行阶段。
在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文件名称,使用时去掉<<与>>。
以上步骤使用完毕后回到catkin工作空间使用catkin_make命令就大功告成了,可以使用如下命令验证msg是否定义成功
rosmsg show <>
话不多说,直接上代码
#!/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