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="penuel@todo.todo">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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM