ROS学习之自定义msg类型

1. 创建msg文件
cd ~/catkin_ws/src/my_package

mkdir msg

echo "string first_name 
string last_name 
uint8 age 
uint32 score" > msg/Num.msg
2. 更改package.xml文件

软件包编译过程中会根据msg 文件生成其它语言(C++,Python)的源代码,编译该软件包时会用到ros自带的

message_generation包,而在运行使用该msg的节点中又会使用到ros自带的message_runtime包,所以需要在package.xml

文件中添加下面两条语句:

  <build_depend>message_generation</build_depend>
  <run_depend>message_runtime</run_depend>

3. 更改CMakeList.txt文件

message_generation 包也是编译该软件包时的依赖包,需要在find_package()函数中指明。

更改find_package()函数:


更改catkin_package()函数:

在CATKIN_DEPENDS后面添加运行依赖项 message_runtime:


指定需要转换的msg文件

官网说手动添加msg文件以后需要让CMake知道在什么时候重新配置项目,所以添加generate_messages()函数


编译

回到catkin_ws目录下:

catkin_make

编译之后就会生成Num.h头文件,所在目录如下:


测试:
rosmsg show my_package/Num


CMakeList.txt文件内容

cmake_minimum_required(VERSION 2.8.3)

project(my_package)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  #添加需要依赖的message_generation包
  message_generation
)

#指定需要转换的msg文件
add_message_files(FILES  Num.msg)
#只有调用了下面的函数最后才会生成 Num.h 文件
generate_messages() 


catkin_package(
INCLUDE_DIRS include
LIBRARIES my_package
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime #添加运行时依赖包message_runtime
DEPENDS system_lib
)

include_directories(
#  include
  ${catkin_INCLUDE_DIRS}
)

add_executable(publisher_Node src/publisher.cpp)
target_link_libraries(publisher_Node ${catkin_LIBRARIES})

add_executable(subscriber_Node src/subscriber.cpp)
target_link_libraries(subscriber_Node ${catkin_LIBRARIES})

ROS 2中,如果要录制自定义的消息类型(message),首先你需要确保自定义消息已经被正确地定义并且已经在Node上发布。以下是录制自定义msg类型的步骤: 1. **创建自定义消息**: - 使用ROS msg工具(如`rosmsg`, `rosidl_generator_cpp`等)生成对应的消息文件。例如,假设你有一个名为`MyCustomMsg`的自定义消息,你可以通过以下命令生成: ```shell ros2 interface add my_custom_msg MyCustomMsg.xml ``` 这会创建一个`.msg`文件和对应的`.srv`文件(如果有服务的话)。 2. **将消息包含到node中**: - 在你的节点代码中,使用`import`语句引入刚刚生成的消息定义。 3. **开始录制**: - 使用`ros2 bag record`命令,指定要记录的主题名(topic)以及包含自定义msg的节点,加上自定义msg的type作为参数: ```shell ros2 bag record --duration=60 /my_topic --topics '/my_topic' --clock your_node_name ``` `your_node_name`应替换为你的节点名称。`--duration`参数设置录制的时间长度,`--clock`选项确保时间戳的一致性。 4. **确认消息类型已被识别**: 在运行前,确保你的节点已经注册了自定义的消息类型,并且在`ros2 topic list`中能看到`/my_topic`主题显示为`YourMessageType`。 5. **结束录制并验证**: 录制结束后,你可以通过`ros2 bag info`检查是否成功记录了自定义消息。 注意,自定义消息必须先在ROS 2的命名空间(namespace)中注册才能被其他节点接收。如果还没有注册,需要在相应的节点启动时使用`ros2 topic pub`命令发布几条消息以便初始化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值