ROS--自定义话题消息

ROS--自定义话题消息

  • 自定义msg文件
  • 添加依赖
    • 修改package.xml
    • 修改CMakeLists.txt
  • 编译
    • 解决办法
  • 总结
      • wiki链接

最近也在学习ROS 的基础知识,看了ros的wiki,也买了古月大佬的《ROS 机器人开发实践》一书,在学习过程中也发现了一些问题,在此记录下。在此书第3章 ROS基础 3.6.6自定义话题消息一节,完全按照书本操作在catkin_make阶段会出现以下错误:

Error(s) in package '/home/xuan/ros_study/src/learning_communication/package.xml':
Error(s):
- The manifest (with format version 2) must not contain the following tags: run_depend

先介绍话题消息的相关内容,然后再提出解决方法。

自定义msg文件

Person.msg

string name
uint8 sex
uint8 age

uint8 unknown = 0
uint8 male = 1
uint8 female = 2

添加依赖

修改package.xml

《ROS机器人开发实践》是这样写的:打开功能包的package.xml文件,确保文件中设置了以下编译和运行的相关依赖:

message_generation
message_runtime

修改CMakeLists.txt

然后打开功能包的CMakeLists.txt文件吗在find_package中添加消息生成依赖的功能包message_generation,这样才能中编译时找到所需要的文件:

find_package(catkin REQUIRED COMPONENTS
	geometry_msgs
	roscpp
	rospy
	std_msgs
	message_generation
)

catkin依赖也要进行以下设置:

catkin_package(
	......
	CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs message_runtime
	......
)

最后设置需要编译的msg文件:

add_message_files(
	FILES
	Person.msg
)
generate_messages(
	DEPENDENCIES
	std_msgs
)

编译

使用catkin_make命令进行编译,结果出现了错误,错误提示如下:
ERROR
错误提示为manifest(format的版本是2)禁止包含run_depend标签。我们来看下package.xml文件的前几行:
ROS--自定义话题消息_第1张图片

解决办法

查看wiki百科,

http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv

可以发现,它在package.xml这里没有使用run_depend,而是使用了exec_depend。所以我们将run_depend改用exec_depend,然后使用catkin_make命令进行编译,编译成功。

  message_generation
  message_runtime

使用命令查看自定义的Person消息类型。

rosmsg show Person

ROS--自定义话题消息_第2张图片

查资料得:
This tag is no longer allowed. Wherever found, it must be replaced: foo
In format 2, that is equivalent to these two new tags:

foo

foo
If the dependency is only used at run-time, only the is needed. If it is only exported to satisfy other packages’ build dependencies, use . If both are needed, this may be a better choice:

foo

总结

出现编译错误的原因就是版本问题,书中的版本应该是在format="1"时编写的,而现在一般都是format=“2” 。format2 不支持run_depend了。所以,在学习的同时也要多看看wiki百科,毕竟这是最原始的资料。

wiki链接

  1. wiki英文教程ROS/Tutorials
  2. wiki中文教程cn/ROS/Tutorials

你可能感兴趣的:(ROS学习)