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>