在ROS1下创建自定义消息msg

**自定义消息(Custom Message)**通常需要以下步骤:

1. 创建一个自定义消息 MyMsg.msg

假设你希望定义一个消息类型,叫做:

my_package/msg/MyMsg.msg

内容如下:

string name
int32 age
float32 height

步骤一:创建 msg 文件

在你的包目录下创建:

mkdir msg
touch msg/MyMsg.msg

编辑 MyMsg.msg 内容如下:

string name
int32 age
float32 height

步骤二:修改 CMakeLists.txt

确保以下内容存在:

find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
  message_generation
)

## 声明消息文件
add_message_files(
  FILES
  MyMsg.msg
)

## 自动生成消息
generate_messages(
  DEPENDENCIES
  std_msgs
)

## 声明 catkin 包
catkin_package(
  CATKIN_DEPENDS message_runtime roscpp std_msgs
)

步骤三:修改 package.xml

添加依赖:

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

步骤四:使用自定义消息

你可以在 src/demo_pub.cpp 中这样使用:

#include <ros/ros.h>
#include "my_package/MyMsg.h"

int main(int argc, char **argv) {
  ros::init(argc, argv, "my_publisher");
  ros::NodeHandle nh;

  ros::Publisher pub = nh.advertise<my_package::MyMsg>("custom_topic", 10);
  ros::Rate rate(10);

  while (ros::ok()) {
    my_package::MyMsg msg;
    msg.name = "Alice";
    msg.age = 30;
    msg.height = 1.75;

    pub.publish(msg);
    ros::spinOnce();
    rate.sleep();
  }

  return 0;
}

编译

cd ~/catkin_ws
catkin_make
source devel/setup.bash

测试

rosrun my_package my_publisher
rostopic echo /custom_topic

2. 自定义消息相互嵌套


第一步:定义消息内容

创建目录并添加 .msg 文件:

mkdir -p ~/catkin_ws/src/my_package/msg
cd ~/catkin_ws/src/my_package/msg
touch ControlCommand.msg

ControlCommand.msg 内容如下:

std_msgs/Header header

uint32 Command_ID     # 控制命令编号
string source         # 消息来源

uint8 Mode            # 控制模式
uint8 Idle=0
uint8 Takeoff=1
uint8 Hold=2
uint8 Land=3
uint8 Move=4
uint8 Disarm=5
uint8 User_Mode1=6
uint8 User_Mode2=7

my_package/PositionReference Reference_State  # 控制参考量

注意:你使用了 PositionReference,需要 另外定义一个 PositionReference.msg


第二步:定义 PositionReference.msg

在同一 msg/ 目录下创建:

touch PositionReference.msg

内容示例:

float32[3] position     # x, y, z
float32[3] velocity     # vx, vy, vz
float32[3] acceleration # ax, ay, az
float32 yaw             # 偏航角
float32 yaw_rate        # 偏航角速度

第三步:配置 CMakeLists.txt

确保包含以下部分:

find_package(catkin REQUIRED COMPONENTS
  std_msgs
  message_generation
)

add_message_files(
  FILES
  ControlCommand.msg
  PositionReference.msg
)

generate_messages(
  DEPENDENCIES
  std_msgs
)

catkin_package(
  CATKIN_DEPENDS std_msgs message_runtime
)

第四步:修改 package.xml

添加依赖项:

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

第五步:测试使用

发布/订阅代码示例:

发布端(src/pub_command.cpp):

#include <ros/ros.h>
#include "my_package/ControlCommand.h"

int main(int argc, char **argv) {
  ros::init(argc, argv, "command_publisher");
  ros::NodeHandle nh;

  ros::Publisher pub = nh.advertise<my_package::ControlCommand>("control_command", 10);

  ros::Rate rate(10);
  while (ros::ok()) {
    my_package::ControlCommand cmd;
    cmd.header.stamp = ros::Time::now();
    cmd.Command_ID = 1;
    cmd.source = "GroundStation";
    cmd.Mode = my_package::ControlCommand::Takeoff;

    cmd.Reference_State.position = {0.0, 0.0, 10.0};
    cmd.Reference_State.velocity = {0.0, 0.0, 0.0};
    cmd.Reference_State.yaw = 0.0;

    pub.publish(cmd);
    ros::spinOnce();
    rate.sleep();
  }

  return 0;
}

第六步:构建 & 测试

cd ~/catkin_ws
catkin_make
source devel/setup.bash
rosrun my_package command_publisher
rostopic echo /control_command
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值