ROS定义自己的消息类型

The massages which I need to record are 5 topics and 2 massege types.
I want to set them into one massege type and it is more clear to show this massges.

BUILD

1. build .msg file

So build a /msg folder in my package and I build my msg type Dym_Data.msg in this folder.
I define my 5 message data, note that you should add the pkg-name/ before the massge type.

std_msgs/Float64MultiArray q_msg
std_msgs/Float64MultiArray vel_msg
std_msgs/Float64MultiArray acc_msg
std_msgs/Float64MultiArray tau_msg
std_msgs/Float64 time_msg

2. modify package.xml

add these code in package.xml

<depend>std_msgs</depend>
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

3. modify CMakeLists.txt

  • find_package()
find_package(catkin REQUIRED COMPONENTS
  std_msgs
  message_generation
)
  • add_message_files()
add_message_files(
  FILES
  Dym_Data.msg
  )
  • generate_messages()
generate_messages(DEPENDENCIES std_msgs)
  • catkin_package()
catkin_package(
  LIBRARIES franka_robot
  CATKIN_DEPENDS roscpp message_runtime std_msgs
)

4. build and check your .msg

  • Run catkin_make to rebuild your workspace and generate your .msg.
  • Run following command rosmsg show to check the new .msg type.
 rosmsg show franka_robot/Dym_Data

you can see:

std_msgs/Float64MultiArray q_msg
  std_msgs/MultiArrayLayout layout
    std_msgs/MultiArrayDimension[] dim
      string label
      uint32 size
      uint32 stride
    uint32 data_offset
  float64[] data
std_msgs/Float64MultiArray vel_msg
  std_msgs/MultiArrayLayout layout
    std_msgs/MultiArrayDimension[] dim
      string label
      uint32 size
      uint32 stride
    uint32 data_offset
  float64[] data
std_msgs/Float64MultiArray acc_msg
  std_msgs/MultiArrayLayout layout
    std_msgs/MultiArrayDimension[] dim
      string label
      uint32 size
      uint32 stride
    uint32 data_offset
  float64[] data
std_msgs/Float64MultiArray tau_msg
  std_msgs/MultiArrayLayout layout
    std_msgs/MultiArrayDimension[] dim
      string label
      uint32 size
      uint32 stride
    uint32 data_offset
  float64[] data
std_msgs/Float64 time_msg
  float64 data

USAGE

In .cpp file

  • header <package-name/msg-name.h>
 #include <franka_robot/Dym_Data.h>
  • define
//msg 
franka_robot::Dym_Data dym_msg;
  • call
dym_msg.time_msg.data = (double)t.count();
dym_msg.q_msg.data = Q_arr_;
dym_msg.vel_msg.data = QDot_arr_;
dym_msg.acc_msg.data = QDDot_arr_;
发布了16 篇原创文章 · 获赞 1 · 访问量 261

猜你喜欢

转载自blog.csdn.net/weixin_45366564/article/details/103758237