【ROS】ROS自定义msg以及在python中的使用

总结一下ROS自定义msg的用法(python)
参考:ROS Tutorials

文章目录

  • 一、自定义msg
    • 1.新建msg文件
      • msg文件例子
    • 2.修改package.xml
    • 3.修改CMakelist.txt
    • 4.catkin_make
  • 二、python文件中的自定义msg使用

一、自定义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

你可能感兴趣的:(ROS,python)