转https://www.ncnynl.com/category/ros-rosbridge_suite/

rosbridge_suite入门教程-目录

说明:

  • 介绍rosbridge_suite包的功能及使用

介绍:

  • Rosbridge为非ROS程序提供了一个使用ROS功能的JSON API。
  • 有许多前端与rosbridge接口,包括一个WebSocket服务器,用于Web浏览器进行交互。
  • Rosbridge_suite是一个包含rosbridge的元包,rosbridge的各种前端包,像一个WebSocket包和帮助包。

目录:

  • rosbridge_suite入门教程-目录
  • rosbridge_suite入门教程-rosbridge_suite介绍
  • rosbridge_suite入门教程-rosbridge_suite代码解读
  • rosbridge_suite入门教程-rosbridge_library代码解读
  • rosbridge_suite入门教程-rosbridge_server代码解读
  • rosbridge_suite入门教程-rosapi代码解读

rosbridge_suite入门教程-rosbridge_suite介绍

说明:

  • 介绍rosbridge_suite协议及安装

rosbridge

  • Rosbridge为非ROS程序提供了一个使用ROS功能的JSON API。
  • 有许多前端与rosbridge接口,包括一个WebSocket服务器,用于Web浏览器进行交互。
  • Rosbridge_suite是一个包含rosbridge的元包,rosbridge的各种前端包,像一个WebSocket包和帮助包。
  • rosbridge包含两个部分:
    • rosbridge协议
    • rosbridge实现

rosbridge协议

  • rosbridge协议是用于向ROS(并且在理论上,任何其他机器人中间件)发送基于JSON的命令的规范。
  • 订阅主题的协议示例:
{ "op": "subscribe","topic": "/cmd_vel","type": "geometry_msgs/Twist"
}
  • 规范是编程语言和传输方式无关。
  • 想法是任何语言或传输可以发送JSON形式的rosbridge协议与ROS交互。
  • 协议涵盖订阅和发布主题,服务调用,获取和设置参数,甚至压缩消息等。
  • 详细的规范定义参考github说明

rosbridge实现

  • rosbridge_suite包是一个包集合,用于实现rosbridge协议和提供WebSocket传输层。
  • 包含如下几个包:
    • rosbridge_library - 核心rosbridge包。rosbridge_library负责获取JSON字符串并将命令发送到ROS,反之亦然。
    • rosapi - 通过服务调用使某些ROS actions可访问。 这包括获取和设置参数,获取主题列表等。
    • rosbridge_server - 虽然rosbridge_library提供了JSON ROS转换,但它将传输层留给其他人。
      • Rosbridge_server提供了一个WebSocket连接,所以浏览器可以“与rosbridge交谈”。
      • Roslibjs是一个浏览器的JavaScript库,可以通过rosbridge_server与ROS交谈。

rosbridge安装

  • 新终端输入:
sudo apt-get install ros-<rosdistro>-rosbridge-server
  • 为对应的ros版本,如indigo

Rosbridge运行

  • 新终端,运行rosbridge并启动websocket:
roslaunch rosbridge_server rosbridge_websocket.launch
  • 默认情况下,这将运行rosbridge并创建一个WebSocket在端口9090
  • 您可以通过在ROS中设置~/port参数来配置端口。
  • 例如修改端口为8080,如下所示:
<launch><include file="$(find rosbridge_server)/launch/rosbridge_websocket.launch" > <arg name="port" value="8080"/></include>
</launch>
  • 现在rosbridge已经启动,并且WebSocket连接可用,我们可以创建一个基本的HTML网页发送和接收呼叫rosbridge。
  • Roslibjs是一个JavaScript库,为您处理通信。
  • 查看roslibjs教程的入门,使用roslibjs和rosbridge创建一个网页。

Rosbridge开发

  • Rosbridge套件提供了一套默认的套件,用于在WebSocket传输层使用rosbridge协议。
  • 然而,协议是传输层无关的,并且可以非常好地支持TCP和其他传输。

(1)构建Rosbridge包

  • 安装rosauth
sudo apt-get install ros-indigo-rosauth
  • 加入ROS环境
source /opt/ros/indigo/setup.bash
  • 创建工作空间和下载代码
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ git clone https://github.com/RobotWebTools/rosbridge_suite.git
  • 编译
$ cd ~/catkin_ws
$ catkin_make
  • 加入工作环境
$ cd ~/catkin_ws
$ source devel/setup.bash

rosbridge_suite入门教程-rosbridge_suite代码解读

说明:

  • 介绍rosbridge_suite元包解读

代码目录结构:

├── CHANGELOG.rst
├── CMakeLists.txt  #构建文件,包括Cmake版本,包路径,指明为元包等
└── package.xml     #包信息,包含包名称,版本,介绍,作者,构建依赖,运行依赖等。

rosbridge_suite入门教程-rosbridge_library代码解读

说明:

  • 介绍rosbridge_library各文件及功能

代码目录结构:

├── CHANGELOG.rst
├── CMakeLists.txt
├── msg                                #定义消息
│   ├── Num.msg                        #定义数字消息
│   ├── TestChar.msg                   #定义字符消息
│   ├── TestDurationArray.msg          #定义Duration数组消息
│   ├── TestHeaderArray.msg            #定义Header数组消息
│   ├── TestHeader.msg                 #定义Header消息
│   ├── TestHeaderTwo.msg              #定义Header消息
│   ├── TestTimeArray.msg              #定义Time数组消息
│   ├── TestUInt8FixedSizeArray16.msg  #定义Unit8[16]消息
│   └── TestUInt8.msg                  #定义Unit8[]消息
├── package.xml
├── setup.py                           #python安装脚本
├── src
│   └── rosbridge_library              #核心库
│       ├── capabilities               #功能包
│       │   ├── advertise.py           #执行话题的广播和取消
│       │   ├── advertise_service.py   #执行服务的广播
│       │   ├── call_service.py        #调用服务
│       │   ├── defragmentation.py     #对消息内容解析
│       │   ├── fragmentation.py       #对消息内容封装
│       │   ├── __init__.py            #声明为Python库
│       │   ├── publish.py             #发布话题
│       │   ├── service_response.py    #服务反馈处理
│       │   ├── subscribe.py           #订阅话题
│       │   └── unadvertise_service.py #取消服务广播
│       ├── capability.py
│       ├── __init__.py
│       ├── internal                  #内部功能实现
│       │   ├── exceptions.py         #异常处理
│       │   ├── __init__.py
│       │   ├── message_conversion.py #消息转换
│       │   ├── pngcompression.py     #图像压缩
│       │   ├── publishers.py         #跟踪使用特定发布者的客户端。提供用于发布消息和注册使用这个发布者的客户端的API
│       │   ├── ros_loader.py         #ros相关核心类导入
│       │   ├── services.py           #为特定的服务创建服务调用者,使用start()开启独立线程,或在线程中使用run()函数。
│       │   ├── subscribers.py        #管理和与ROS订阅服务器对象接口.单个订阅者在多个客户端之间共享
│       │   ├── subscription_modifiers.py #位于来自订阅的传入消息和传出消息之间发布方法,提供限制/缓冲功能.当参数改变时,处理程序可以转换到不同的类型的处理程序
│       │   └── topics.py             #发布者和订阅者共同的代码和异常处理
│       ├── protocol.py               #单个客户端与ROS交互的接口.
│       ├── rosbridge_protocol.py     #继承protocol协议,初始化rosbridge功能列表
│       └── util
│           └── __init__.py
├── srv                               #服务定义
│   ├── AddTwoInts.srv                #
│   ├── SendBytes.srv                 #发送内容定义
│   ├── TestArrayRequest.srv
│   ├── TestEmpty.srv
│   ├── TestMultipleRequestFields.srv
│   ├── TestMultipleResponseFields.srv
│   ├── TestNestedService.srv
│   ├── TestRequestAndResponse.srv
│   ├── TestRequestOnly.srv
│   └── TestResponseOnly.srv
└── test                              #相关测试,包括核心功能,扩展功能,内部执行├── capabilities│   ├── __init__.py│   ├── test_advertise.py│   ├── test_call_service.py│   ├── test_capabilities.test│   ├── test_publish.py│   └── test_subscribe.py├── experimental│   ├── complex_srv+tcp│   │   ├── test_non-ros_service_client_complex-srv.py│   │   └── test_non-ros_service_server_complex-srv.py│   └── fragmentation+srv+tcp│       ├── test_non-ros_service_client_fragmented.py│       └── test_non-ros_service_server_fragmented.py├── __init__.py├── internal│   ├── __init__.py│   ├── publishers│   │   ├── __init__.py│   │   ├── test_multi_publisher.py│   │   ├── test_multi_unregistering.py│   │   ├── test_publisher_consistency_listener.py│   │   └── test_publisher_manager.py│   ├── subscribers│   │   ├── __init__.py│   │   ├── test_multi_subscriber.py│   │   ├── test_subscriber_manager.py│   │   └── test_subscription_modifiers.py│   ├── test_compression.py│   ├── test_internal.test│   ├── test_message_conversion.py│   ├── test_ros_loader.py│   └── test_services.py└── test_all.test

重要文件说明:

rosbridge_library/src/protocol.py

  • 单个客户端与ROS交互的接口.
  • 协议实例的生命周期如下:
    • 处理从客户端传入的消息
    • 发送处理后的消息到客户端
    • 客户端完成清除相关资源

rosbridge_library/test

  • python的单元测试目录
  • http://wiki.ros.org/unittest
  • http://wiki.ros.org/rostest

rosbridge_suite入门教程-rosbridge_server代码解读

说明:

  • 介绍rosbridge_server提供的多种服务器模式及实现

代码目录结构:

├── CHANGELOG.rst
├── CMakeLists.txt
├── launch                            #启动
│   ├── rosbridge_tcp.launch          #启动TCP服务器,调用rosbridge_tcp.py
│   ├── rosbridge_udp.launch          #启动UDP服务器,调用rosbridge_udp.py
│   └── rosbridge_websocket.launch    #启动WEBSOCKET服务器,调用rosbridge_websocket.py
├── package.xml
├── scripts
│   ├── rosbridge_tcp -> ./rosbridge_tcp.py
│   ├── rosbridge_tcp.py              #ros TCP节点, 利用SocketServer实现TCP通讯
│   ├── rosbridge_udp -> rosbridge_udp.py
│   ├── rosbridge_udp.py              #ros UPD节点,利用reactor.listenUDP实现UDP通讯
│   ├── rosbridge_websocket -> rosbridge_websocket.py
│   └── rosbridge_websocket.py        #ros websocket节点,利用tornado.web实现websocket通讯
├── setup.py
└── src├── backports│   ├── __init__.py│   └── ssl_match_hostname│       ├── __init__.py│       ├── LICENSE.txt│       └── README.txt├── rosbridge_server             #服务器处理│   ├── __init__.py│   ├── tcp_handler.py           #实现RosbridgeTcpSocket类,用于处理TCP消息│   ├── udp_handler.py           #实现RosbridgeUdpFactory类和RosbridgeUdpSocket类,用于处理UDP消息│   ├── websocket_handler.py     #实现RosbridgeWebSocket类,用于处理websocket消息└── tornado                      #Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本├── auth.py├── autoreload.py├── concurrent.py├── curl_httpclient.py├── escape.py├── gen.py├── http1connection.py├── httpclient.py├── httpserver.py├── httputil.py├── __init__.py├── ioloop.py├── iostream.py├── locale.py├── log.py├── log.pyc├── netutil.py├── options.py├── platform│   ├── asyncio.py│   ├── auto.py│   ├── auto.pyc│   ├── caresresolver.py│   ├── common.py│   ├── epoll.py│   ├── epoll.pyc│   ├── __init__.py│   ├── interface.py│   ├── kqueue.py│   ├── posix.py│   ├── select.py│   ├── twisted.py│   └── windows.py├── process.py├── simple_httpclient.py├── speedups.c├── stack_context.py├── tcpclient.py├── tcpserver.py├── template.py├── test│   ├── auth_test.py│   ├── concurrent_test.py│   ├── csv_translations│   │   └── fr_FR.csv│   ├── curl_httpclient_test.py│   ├── escape_test.py│   ├── gen_test.py│   ├── gettext_translations│   │   └── fr_FR│   │       └── LC_MESSAGES│   │           ├── tornado_test.mo│   │           └── tornado_test.po│   ├── httpclient_test.py│   ├── httpserver_test.py│   ├── httputil_test.py│   ├── import_test.py│   ├── __init__.py│   ├── ioloop_test.py│   ├── iostream_test.py│   ├── locale_test.py│   ├── log_test.py│   ├── __main__.py│   ├── netutil_test.py│   ├── options_test.cfg│   ├── options_test.py│   ├── process_test.py│   ├── README│   ├── resolve_test_helper.py│   ├── runtests.py│   ├── simple_httpclient_test.py│   ├── stack_context_test.py│   ├── static│   │   ├── dir│   │   │   └── index.html│   │   └── robots.txt│   ├── tcpclient_test.py│   ├── templates│   │   └── utf8.html│   ├── template_test.py│   ├── test.crt│   ├── testing_test.py│   ├── test.key│   ├── twisted_test.py│   ├── util.py│   ├── util_test.py│   ├── websocket_test.py│   ├── web_test.py│   └── wsgi_test.py├── testing.py├── util.py├── web.py├── websocket.py└── wsgi.py

重要文件说明:

SocketServer

  • SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求的Socket服务端
  • https://docs.python.org/2/library/socketserver.html
  • http://www.cnblogs.com/zhangkui/p/5655428.html
  • http://blog.csdn.net/ghostfromheaven/article/details/8653421

Twisted/reactor

  • Twisted 是用Python实现的基于事件驱动的网络引擎框架
  • http://www.cnblogs.com/whiggzhaohong/p/5401679.html
  • http://www.tuicool.com/articles/MJBviuM

tornado

  • Tornado是FriendFeed使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本
  • http://www.tornadoweb.cn/
  • http://www.tornadoweb.cn/documentation
  • http://www.tornadoweb.org/en/stable/

rosbridge_suite入门教程-rosapi代码解读

说明:

  • 介绍rosapi包功能,提供各种ROS服务

代码目录结构:

├── CHANGELOG.rst
├── CMakeLists.txt
├── msg
│   └── TypeDef.msg         #消息类型定义
├── package.xml
├── scripts                 #脚本
│   └── rosapi_node         #初始化服务和参数
├── setup.py
├── src
│   └── rosapi              #API具体实现
│       ├── __init__.py
│       ├── objectutils.py
│       ├── params.py
│       └── proxy.py
└── srv                     #定义各种服务├── DeleteParam.srv├── GetActionServers.srv├── GetParamNames.srv├── GetParam.srv├── GetTime.srv├── HasParam.srv├── MessageDetails.srv├── NodeDetails.srv├── Nodes.srv├── Publishers.srv├── SearchParam.srv├── ServiceHost.srv├── ServiceNode.srv├── ServiceProviders.srv├── ServiceRequestDetails.srv├── ServiceResponseDetails.srv├── ServicesForType.srv├── Services.srv├── ServiceType.srv├── SetParam.srv├── Subscribers.srv├── TopicsForType.srv├── Topics.srv└── TopicType.srv

重要文件说明:

scripts/rosapi_node

  • 初始化服务
  • 服务包含:
rospy.Service('/rosapi/topics', Topics, get_topics)
rospy.Service('/rosapi/topics_for_type', TopicsForType, get_topics_for_type)
rospy.Service('/rosapi/services', Services, get_services)
rospy.Service('/rosapi/services_for_type', ServicesForType, get_services_for_type)
rospy.Service('/rosapi/nodes', Nodes, get_nodes)
rospy.Service('/rosapi/node_details', NodeDetails, get_node_details)
rospy.Service('/rosapi/action_servers', GetActionServers, get_action_servers)
rospy.Service('/rosapi/topic_type', TopicType, get_topic_type)
rospy.Service('/rosapi/service_type', ServiceType, get_service_type)
rospy.Service('/rosapi/publishers', Publishers, get_publishers)
rospy.Service('/rosapi/subscribers', Subscribers, get_subscribers)
rospy.Service('/rosapi/service_providers', ServiceProviders, get_service_providers)
rospy.Service('/rosapi/service_node', ServiceNode, get_service_node)
rospy.Service('/rosapi/service_host', ServiceHost, get_service_host)
rospy.Service('/rosapi/message_details', MessageDetails, get_message_details)
rospy.Service('/rosapi/service_request_details', ServiceRequestDetails, get_service_request_details)
rospy.Service('/rosapi/service_response_details', ServiceResponseDetails, get_service_response_details)
rospy.Service('/rosapi/set_param', SetParam, set_param)
rospy.Service('/rosapi/get_param', GetParam, get_param)
rospy.Service('/rosapi/has_param', HasParam, has_param)
rospy.Service('/rosapi/search_param', SearchParam, search_param)
rospy.Service('/rosapi/delete_param', DeleteParam, delete_param)
rospy.Service('/rosapi/get_param_names', GetParamNames, get_param_names)
rospy.Service('/rosapi/get_time', GetTime, get_time)

节点说明:

  • /rosapi/Topics,返回所有发布的话题列表
  • /rosapi/topics_for_type,返回指定类型的所有发布的话题列表
  • /rosapi/services, 返回所有发布的服务列表
  • /rosapi/services_for_type,返回指定类型的所有发布的服务列表
  • /rosapi/nodes,返回所有已经注册的节点列表
  • /rosapi/node_details,返回某节点详情
  • /rosapi/action_servers,返回action服务列表
  • /rosapi/topic_type,通过话题名获取相应的消息类型
  • /rosapi/service_type,通过服务名获取相应的消息类型
  • /rosapi/publishers,提供话题名获取发布此话题的节点名列表
  • /rosapi/subscribers,提供话题名获取接受此话题的节点名列表
  • /rosapi/service_providers,提供话题名返回广播此服务类型的节点名列表
  • /rosapi/service_node,提供服务名,返回提供此服务的节点名
  • /rosapi/service_host,提供服务名,返回提供此服务的主机名
  • /rosapi/message_details,提供消息类型名,返回类型的TypeDef
  • /rosapi/service_request_details,提供服务类型名,返回消息请求的服务类型的TypeDef
  • /rosapi/service_response_details,提供服务类型名,返回消息反馈的服务类型的TypeDef
  • /rosapi/set_param,设置参数
  • /rosapi/get_param,获取参数
  • /rosapi/has_param,判断参数是否存在
  • /rosapi/search_param,检索参数
  • /rosapi/delete_param,删除参数
  • /rosapi/get_param_names,获取参数名
  • /rosapi/get_time,获取服务器时间

rosbridge入门教程相关推荐

  1. [carla入门教程]-5 使用ROS与carla通信

    本专栏教程将记录从安装carla到调用carla的pythonAPI进行车辆操控并采集数据的全流程,带领大家从安装carla开始,到最终能够熟练使用carla仿真环境进行传感器数据采集和车辆控制. 第 ...

  2. Kafka入门教程与详解

    1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件负责处理连接服务.消息的路由和传送.持久 ...

  3. 【CV】Pytorch一小时入门教程-代码详解

    目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...

  4. python tornado教程_Tornado 简单入门教程(零)——准备工作

    前言: 这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端).学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考.完 ...

  5. python向量计算库教程_NumPy库入门教程:基础知识总结

    原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...

  6. mysql query browswer_MySQL数据库新特性之存储过程入门教程

    MySQL数据库新特性之存储过程入门教程 在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用 ...

  7. python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 TensorFlow入门教程 TensorFlow 基本使用 TensorFlow官方中文教程 TensorFlow 的特点: 使用图 (graph) 来 ...

  8. air调用java,AIR2.0入门教程:与Java应用交互

    在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++ 的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的 ...

  9. 【Arduino】开发入门教程【一】什么是Arduino

    Arduino Arduino 是一款便捷灵活.方便上手的开源电子原型平台,包含硬件(各种型号的arduino板)和软件(arduino IDE).它适用于艺术家.设计师.爱好者和对于"互动 ...

  10. python 三分钟入门_Cython 三分钟入门教程

    作者:perrygeo 译者:赖勇浩(http://laiyonghao.com) 原文:http://www.perrygeo.net/wordpress/?p=116 我最喜欢的是Python,它 ...

最新文章

  1. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_05 List集合_1_List集合_介绍常用方法...
  2. MM模块操作流程及相关建议代码
  3. 模型学习 - HNN、RBM、DBN
  4. 惊呆!骑士一天收入过万?顺丰同城回应:用户打赏约7856元
  5. 你知道怎么用Python发送邮件吗?
  6. 装x玩法:插上你的专有U盘才能开机
  7. 2021最新抖音H5电玩城游戏平台多玩法模式全套源码
  8. R语言dplyr包学习笔记(吐血整理宇宙无敌详细版)
  9. 2018山东冬令营:还钱问题,UPC(5700) 还钱问题
  10. 使用计算机时应先按,计算机应用基础试卷及答案
  11. 双曲三角函数图像及计算
  12. 从零开始开发Android相机app(三)简单介绍图像滤镜功能
  13. wisp5学习日记1
  14. 微软携手联想来酷试水渠道共享,打造创新销售通路
  15. kip6000打印服务器系统安装,KIP6000驱动安装步骤.
  16. 网络编程--TCP/IP协议(一)
  17. 郑州大学远程教育《比较文学》网考辅导老师详解
  18. A. BNU ACM校队时间安排表
  19. 用c语言编写有趣的图形,大班数学教案:有趣的图形
  20. Bigemap GIS数据处理及开发应用一站式解决方案

热门文章

  1. 前端实现动画的方法总结
  2. 双盘转子动力学仿真c语言程序,[转载]基于ANSYS经典界面的双转子电机的转子动力学仿真...
  3. 美女视频都想下载,今天我们就来批量下载它们~
  4. Java接入腾讯云短信接口
  5. fences卸载_fences是什么意思?WIN10专业版彻底删除fences的技巧
  6. MCU OTA升级流程
  7. nmos和pmos导通条件
  8. 佳能Canon imageCLASS MF236n 一体机驱动
  9. ZEMAX | 探究 OpticStudio 偏振分析功能
  10. 清华大学朱小燕教授做客雷锋网沙龙,分享 NLP 和人工智能的那些事儿| AAAI 2017...