热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ROS学习笔记八:创建ROSmsg和srv

ROS学习笔记八:创建ROSmsg和srv本节主要讲述了如何创建和建立ROSmsg和srv,同时使用命令行工具rosmsg、rossrv和roscp。msg和srv简介msg:描述

ROS学习笔记八:创建ROS msg和srv

本节主要讲述了如何创建和建立ROS msg和srv,同时使用命令行工具rosmsg、rossrv和roscp。

msg和srv简介

  • msg:描述ROS messages内容的简单text文件,它们用来生成不同语言的messages源码;
  • srv:一个srv文件描述一个服务,它由两部分组成:一个请求和一个回应。
    msg文件存放在一个软件包的msg目录中,而srv文件则存放在srv目录中来。

msg文件

msg文件就是一个简单的text文件,其中每行有一个类型和名称,可用的类型如下:

int8, int16, int32, int64 (plus uint*)
float32, float64
string
time, duration
other msg files
variable-length array[] and fixed-length array[C]
Header(包含一个timestamp和坐标系信息)

srv文件

srv文件和msg文件很相像,除了它包含两个部分:请求和回应

int64 A
int64 B
---

int64 sum

上面一部分为request,下面一部分为response。

使用msg

创建一个msg文件

cd ~/ros_tutorial/src/beginner-tutorial
mkdir msg
echo "int64 num">msg/Num.msg

由于msg文件用来产生C++,python等源代码,需要进行一些配置。
首先是修改package.xml文件,确保该文件中以下三行内容没有被注释掉:

  <build_depend>message_generationbuild_depend>
<run_depend>message_generationrun_depend>
<run_depend>message_runtimerun_depend>

然后修改CMakeist.txt文件:

  • 在find_package函数中加入message_generation依赖
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
  • 在catkin_package函数中加入message_runtime依赖
catkin_package(
...
CATKIN_DEPENDS message_runtime ...
...)
  • 修改add_message_file函数,添加入自己创建的Num.msg文件
add_message_files(
FILES
Num.msg
)
  • 确保generate_messages函数被调用运行,去掉注释符号#
generate_messages(
DEPENDENCIES
std_msgs
)

使用rosmsg

rosmsg show [message type]
rosmsg show beginner-tutorials/Num
int64 num

如果实在记不住在哪个软件包中时,可以省略软件包

rosmsg show Num
[beginner_tutorials/Num]:
int64 num

使用srv

创建一个srv文件

可以从其他软件包中复制过来一个srv文件,使用roscp命令:

roscp [package_name] [file_to_copy] [copy_path]
roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

srv文件也要用来产生C++,python等源代码,也要需要进行一些配置。其配置流程和msg大体一致,其中find_package和catkin_package函数的配置是一样的,另外需要将add_service_file中添加入自己创建的srv文件,如下:

add_service_files(
FILES
AddTwoInts.srv
)

使用rossrv

rossrv show 
rossrv show beginner-tutorials/AddTwoInts
int64 a
int64 b
---

int64 sum

总结:msg和srv的一般步骤

  • 首先是修改package.xml文件,确保该文件中与message有关的内容没有被注释掉。
  • 然后修改CMakeist.txt文件:
    • 在find_package函数中加入message_generation依赖;
    • 在catkin_package函数中加入message_runtime依赖;
    • 修改add_message_file函数,添加入自己创建的Num.msg文件;或者在add_service_file函数中添加入自己创建的srv文件;
    • 确保generate_messages函数被调用运行,去掉注释符号#;
  • 重新编译生成软件包。

祝枫
2016年8月26日于哈尔滨


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
author-avatar
幽咽小香
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有