https://blog.csdn.net/weixin_39036700/article/details/81660828

ROS通信编程——话题编程

如何运行文件

rosrun learning_communication talker

rosrun learning_communication listener

话题编程流程:

1、创建发布者

2、创建订阅者

3、添加编译选项

4、运行可执行程序

话题通信模型
如何实现一个发布者

初始化ROS节点 ;

向ROS Master 注册节点信息 ,包括发布的话题名和话题中的消息类型 ;

按照一定频率循环发布消息 。

在自己所创建的功能包(learning_communication)的src文件夹下新建一个talker.cpp文件

如何实现订阅者

初始化ROS节点 ;

订阅需要的话题 ;

循环等待话题消息,接收到消息后进入回调函数 ;

在回调函数中完成消息处理 。

在自己所创建的功能包(learning_communication)的src文件夹下新建一个listener.cpp文件。

如何编译代码

设置需要编译都代码和生成都可执行文件 ;

设置链接库 ;

设置依赖 。

在自己所创建的功能包(learning_communication)下的CmakeLists.txt下添加如下语句:

add_executable(talker src/talker.cpp)
    target_link_libraries(talker ${catkin_LIBRARIES})
    # add_dependencies(talker ${PROJECT_NAME}_generate_messages_cpp)
     
     
    add_executable(listener src/listener.cpp)
    target_link_libraries(listener ${catkin_LIBRARIES})
    # add_dependencies(talker ${PROJECT_NAME}_generate_messages_cpp)

如何运行可执行文件
如果时py文件可直接运行,若是cpp文件则经过编译之后形成可执行文件再运行。

cpp文件需要自定义话题消息,配置相关信息之后再编译形成

如何自定义话题消息:

定义msg文件(在自己所创建的功能包(learning_communication)下创建msg文件夹,里面新建一个Person.msg文件(这个文件根据自己实际需求来创建))

Person.msg内容如下:

string name
    uint8  sex
    uint8  age
     
    uint8 unknown = 0
    uint8 male    = 1
    uint8 female  = 2

在自己所创建的功能包下的Package.xml(learning_communication / Package.xml)中添加功能包依赖,语句如下:

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

在自己所创建的功能包下的CmakeList.txt(learning_communication / CmakeList.txt)中添加功能包依赖,语句如下:

find_package( ...... message_generation)
     
    catkin_package(CATKIN_DEPENDS geometry_msgs roscpp
    rospy std_msgs message_runtime)
     
    add_message_files(FILES Person.msg)
    generate_messages(DEPENDENCIES std_msgs)

ROS通信编程——服务编程
如何运行可执行文件:

Sever节点启动后的日志信息

Client启动后发布服务请求,并成功接收到反馈结果

Server接收到服务调用后完成加法求解,并将结果反馈给Cliebt

ROS通信编程——服务编程

什么是动作(action)                                            Action的接口

一种问答通信机制 ;                                                                                   goal :发布任务目标 ;

带有连续反馈 ;                                                                                           cancel :请求取消任务 ;

可以在任务过程中止运行 ;                                                                          status : 通知客户端当前的状态 ;

基于ROS的消息机制实现 。                                                                       feedback :周期反馈任务运行的监控数据 ;

result :向客户端发送任务的执行结果,只发布一次 。

如何自定义动作消息

定义action文件(在自己所创建的功能包(learning_communication)下创建action文件夹,里面新建一个DoDishes.action文件(这个文件根据自己实际需求来创建))

DoDishes.action文件内容如下:

# 定义目标信息
    uint32 dishwasher_id
    # Specify which dishwasher we wa
    nt to use
    ---
    # 定义结果信息
    uint32 total_dishes_cleaned
    ---
    # 定义周期反馈的消息
    float32 percent_complete

在自己所创建的功能包下的Package.xml(learning_communication / Package.xml)中添加功能包依赖,语句如下:

<build_depend>actionlib</build_depend>
    <build_depend>actionlib_msgs</build_depend>
    <exec_depend>actionlib</exec_depend>
    <exec_depend>actionlib_msgs</exec_depend>

在自己所创建的功能包下的CmakeList.txt(learning_communication / CmakeList.txt)中添加功能包依赖,语句如下:

find_package(catkin REQUIRED actionlib_msgs actionlib)
    add_action_files(DIRECTORY action FILES DoDishes.action)
    generate_messages(DEPENDENCIES actionlib_msgs)

如何实现一个动作服务器

初始化ROS节点 ;

创建动作服务器实例 ;

启动服务器,等待动作请求 ;

在回调函数中完成动作服务功能的处理,并反馈信息 ;

动作完成,发送结束信息 。

如何实现一个动作客户端

初始化ROS节点 ;

创建动作客户端实例 ;

连接动作服务端 ;

发送动作目标 ;

根据不同类型的服务端反馈处理回调函数 。

如何编译代码

设置需要编译都代码和生成都可执行文件 ;

设置链接库 ;

设置依赖 。

在自己所创建的功能包(learning_communication)下的CmakeLists.txt下添加如下语句:

add_executable(DoDishes_client src/DoDishes_client.cpp)
    target_link_libraries( DoDishes_client ${catkin_LIBRARIES})
    add_dependencies(DoDishes_client ${${PROJECT_NAME}_EXPORTED_TARGETS})
     
    add_executable(DoDishes_server src/DoDishes_server.cpp)
    target_link_libraries( DoDishes_server ${catkin_LIBRARIES})
    add_dependencies(DoDishes_server ${${PROJECT_NAME}_EXPORTED_TARGETS})

如何执行可执行文件

ROS之分布式通信

ROS是一种分布式软件框架,节点之间通过松耦合都方式进行组合 。
如何实现分布式多机通信

(1)设置ip地址,确保底层链路的联通

两台计算机(hcx-pc、raspi2)的ip地址

在两台计算机上分别使用ping命令测试网络是否联通

如何实现分布式多机通信

(2)在从机端设置ROS_MASTER_URL,让从机找到ROS_Master

$ export ROS_MASTER_URI=http://hcx-pc:11311 (当前终端有效)  或   $ echo “export ROS_MASTER_URI=http://hcx-pc:11311” >>   ~/.bashrc (所有终端有效)

【Robot学习 5 】ROS通信编程 待更新。。。相关推荐

  1. ROS学习【2】-----ubuntu16.04中进行ROS通信编程(话题编程)

    ROS通信编程-----话题编程 作为嵌入式系统应用开发的重要支柱之一的ROS,是我们学习嵌入式开发的第一步,既要学习ROS,我们就得知道ROS怎么使用,今天,林君学长带大家开始学习ROS的第一步:R ...

  2. ROS通信编程_动作编程_定义cation文件

    系统环境:Ubuntu16.04 在ros中,如果想要发送一个request给一个节点让该节点完成一些任务,并且给出一个回复,这样可以使用ros中的service完成.但是有一些应用中任务执行的时间很 ...

  3. ROS机器人编程学习(一)——机器人软件平台

    前言: 今天是2020年9月1日,Slender博客正式启用!从新的学年开始从头记录每一阶段的学习进程,有时间的话也会把以往的学习内容整理放上来. 今天开始从头学习<ROS机器人编程>(哦 ...

  4. ROS机器人编程:原理与应用(A Systematic Approach to Learning Robot Programming with ROS 中文译版)

    ROS机器人编程:原理与应用 (A Systematic Approach to Learning Robot Programming with ROS) 英文原版书下载链接:https://shar ...

  5. ROS学习笔记(八): ROS通信架构

    ROS学习笔记(八): ROS通信架构 文章目录 01 Node & Master 1.1 Node 1.2 Master 1.3 启动master和node 1.4 rosrun和rosno ...

  6. ROS机器人操作系统学习笔记(三)ROS通信架构

    ROS机器人操作系统学习笔记(三)ROS通信架构 ROS的通信架构是ROS的灵魂,也是整个ROS正常运行的关键所在.ROS通信架构包括各种数据的处理,进程的运行,消息的传递等等.本章主要介绍了通信架构 ...

  7. LiteOS学习笔记-5通信模组之LiteOS的SAL及socket编程

    LiteOS学习笔记-5通信模组之LiteOS的SAL及socket编程 一.SAL套接字抽象层 二.Socket套接字简介 Socket概述 Socket结构体 字节序转换函数 ip地址的转换 字节 ...

  8. ROS自主导航学习———ROS通信机制

    前言 前面ROS很多都忘记了 ,现在来重新回顾一下内容 ROS 中的基本通信机制主要有如下三种实现策略: 话题通信(发布订阅模式) 服务通信(请求响应模式) 参数服务器(参数共享模式) Action通 ...

  9. Slam学习笔记——ROS踩坑记录

    Slam学习笔记--ROS踩坑记录 1. 安装 2. ROS文件系统 2.1 工作区 2.2 包package 2.2.1 包的操作 2.2.2 描述文件package.xml 2.3 节点node ...

最新文章

  1. P2257 YY的GCD (莫比乌斯反演)
  2. Linux之静态库与动态库20160706
  3. 虚拟化服务器故障切换,虚拟机故障转移
  4. noip2011day1题解
  5. python操作sqlite3 导入csv文件_[转载]SQLite 3导入导出成txt或csv操作
  6. 2020年线上农产品消费趋势报告
  7. android逆向分析有什么用,如何开始对Android应用的逆向分析?
  8. css如何调整红心样式_条码软件如何调整条码数据的样式
  9. linux man命令汉化 操作
  10. centos mysql 安装_Linux下MYSQL5.7详细安装步骤:
  11. ocr图像识别引擎_CycleGAN作为OCR图像的去噪引擎
  12. 【feign源码】流程分析
  13. GNS3路由器设备间ping不通的排查方法
  14. 体感ar数字互动教学制作实现学生共享优质教育
  15. IntelliJ IDEA 15 EAP Adds On-the-Fly Code Duplicates Detection
  16. 正则表达式 regex_正则表达式初学者指南(Regex)
  17. ^_^ 给力,找了好久,终让我找到了,好多VB源码免费下载,路过的朋友快看看吧
  18. python编程入门pdf-Python游戏编程入门 中文pdf扫描版[41MB]
  19. Mysql 动力节点34题答案(含老师以及个人解答总结改进)
  20. 关于USB4/雷电转PCIE GEN4*4(ASM2464PD Data Sheet)学习及应用整理

热门文章

  1. 微软sql服务器可以关闭吗,停止Microsoft SQL server的几种方式
  2. 1、几种进程间的通信方式
  3. http 重定向 302报文
  4. 秒懂设计模式之组合模式(Composite Pattern)
  5. python并列柱状图x轴设定_Matplotlib绘图时x轴标签重叠的解决办法
  6. 个人简历介绍自己怎么写? 我的优势如何表达
  7. linux | 常用命令
  8. VC++6.0 用gSoap客户端访问WebService
  9. NSGA-II算法阅读笔记
  10. NLP数据预处理的一般方法