ROS自定义数据类型

1.简介

自定义数据包可以在使用数据的功能包内进行创建,也可以单独创建一个功能包来专门进行自定义数据类型.

1.步骤:

1.创建一个功能包
进入工作空间catkin_ws/src

catkin_create_pkg test_msgs actionlib std_msgs message_generation actionlib_msgs
cd ../
catkin_make

2.创建自定义数据

  • 话题类型:
    在功能包下新建一个msg的文件夹,创建testmsg.msg文件
bool mode
float64 angle
  • 服务类型:
    在功能包下新建一个srv的文件夹,创建testsrv.srv文件
#请求
int64 a
int32 b
---
#应答
int64 sum
  • 动作类型:
    在功能包下新建一个action文件夹,创建testaction.action文件
#定义目标信息
uint32 dish_id
---
#定义结果信息
uint16 total
---
#定义周期反馈信息
float32 feed_msg

3.修改CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)
project(test_msgs)

find_package(catkin REQUIRED COMPONENTS
  actionlib
  message_generation
  std_msgs
  actionlib_msgs
)

add_action_files(
    DIRECTORY action
    FILES
    testaction.action
)
add_message_files(
    DIRECTORY msg
    FILES
    testmsg.msg
)
add_service_files(
    DIRECTORY srv
    FILES
    testsrv.srv
)

generate_messages(
    DEPENDENCIES
    std_msgs
    actionlib_msgs
)

catkin_package()

4.修改package.xml文件

<?xml version="1.0"?>
<package format="2">
  <name>test_msgs</name>
  <version>0.0.0</version>
  <description>The test_msgs package</description>
  <maintainer email="[email protected]">penuel</maintainer>
  <license>TODO</license>

  <buildtool_depend>catkin</buildtool_depend>

  <build_depend>actionlib</build_depend>
  <build_depend>message_generation</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_depend>actionlib_msgs</build_depend>

  <build_export_depend>actionlib</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <build_export_depend>message_generation</build_export_depend>
  <build_export_depend>actionlib_msgs</build_export_depend>

  <exec_depend>actionlib</exec_depend>
  <exec_depend>std_msgs</exec_depend>
  <exec_depend>message_runtime</exec_depend>
  <exec_depend>actionlib_msgs</exec_depend>

  <export>
  </export>
</package>

5.最后进行编译 catkin_make

2.使用自定义的数据

  • 话题使用:
    1.发布话题:
#include "ros/ros.h"
#include "test_msgs/testmsg.h"
int main(int argc, char** argv)
{
    ros::init(argc,argv,"testmsg_node");
    ros::NodeHandle nh;
    ros::Publisher pub1 = nh.advertise<test_msgs::testmsg>("/test_msgs_pub",1000);
    ros::Rate loop_rate(10);
    test_msgs::testmsg test_pub;
    while( ros::ok() )
    {
        test_pub.angle = 50;
        test_pub.mode = 10;
        pub.publish(test_pub);
        ros::spinOnce();
        loop_rate.sleep();

    }
    return 0;
}

CMakeLists.txt:

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  test_msgs
)

package.xml:

 <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_depend>test_msgs</build_depend>
  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>rospy</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <build_export_depend>test_msgs</build_export_depend>
  <exec_depend>roscpp</exec_depend>
  <exec_depend>rospy</exec_depend>
  <exec_depend>std_msgs</exec_depend>
  <exec_depend>test_msgs</exec_depend>

猜你喜欢

转载自www.cnblogs.com/penuel/p/13169992.html