rosbridge入门教程
转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入门教程相关推荐
- [carla入门教程]-5 使用ROS与carla通信
本专栏教程将记录从安装carla到调用carla的pythonAPI进行车辆操控并采集数据的全流程,带领大家从安装carla开始,到最终能够熟练使用carla仿真环境进行传感器数据采集和车辆控制. 第 ...
- Kafka入门教程与详解
1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件负责处理连接服务.消息的路由和传送.持久 ...
- 【CV】Pytorch一小时入门教程-代码详解
目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...
- python tornado教程_Tornado 简单入门教程(零)——准备工作
前言: 这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端).学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考.完 ...
- python向量计算库教程_NumPy库入门教程:基础知识总结
原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...
- mysql query browswer_MySQL数据库新特性之存储过程入门教程
MySQL数据库新特性之存储过程入门教程 在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用 ...
- python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 TensorFlow入门教程 TensorFlow 基本使用 TensorFlow官方中文教程 TensorFlow 的特点: 使用图 (graph) 来 ...
- air调用java,AIR2.0入门教程:与Java应用交互
在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++ 的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的 ...
- 【Arduino】开发入门教程【一】什么是Arduino
Arduino Arduino 是一款便捷灵活.方便上手的开源电子原型平台,包含硬件(各种型号的arduino板)和软件(arduino IDE).它适用于艺术家.设计师.爱好者和对于"互动 ...
- python 三分钟入门_Cython 三分钟入门教程
作者:perrygeo 译者:赖勇浩(http://laiyonghao.com) 原文:http://www.perrygeo.net/wordpress/?p=116 我最喜欢的是Python,它 ...
最新文章
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_05 List集合_1_List集合_介绍常用方法...
- MM模块操作流程及相关建议代码
- 模型学习 - HNN、RBM、DBN
- 惊呆!骑士一天收入过万?顺丰同城回应:用户打赏约7856元
- 你知道怎么用Python发送邮件吗?
- 装x玩法:插上你的专有U盘才能开机
- 2021最新抖音H5电玩城游戏平台多玩法模式全套源码
- R语言dplyr包学习笔记(吐血整理宇宙无敌详细版)
- 2018山东冬令营:还钱问题,UPC(5700) 还钱问题
- 使用计算机时应先按,计算机应用基础试卷及答案
- 双曲三角函数图像及计算
- 从零开始开发Android相机app(三)简单介绍图像滤镜功能
- wisp5学习日记1
- 微软携手联想来酷试水渠道共享,打造创新销售通路
- kip6000打印服务器系统安装,KIP6000驱动安装步骤.
- 网络编程--TCP/IP协议(一)
- 郑州大学远程教育《比较文学》网考辅导老师详解
- A. BNU ACM校队时间安排表
- 用c语言编写有趣的图形,大班数学教案:有趣的图形
- Bigemap GIS数据处理及开发应用一站式解决方案
热门文章
- 前端实现动画的方法总结
- 双盘转子动力学仿真c语言程序,[转载]基于ANSYS经典界面的双转子电机的转子动力学仿真...
- 美女视频都想下载,今天我们就来批量下载它们~
- Java接入腾讯云短信接口
- fences卸载_fences是什么意思?WIN10专业版彻底删除fences的技巧
- MCU OTA升级流程
- nmos和pmos导通条件
- 佳能Canon imageCLASS MF236n 一体机驱动
- ZEMAX | 探究 OpticStudio 偏振分析功能
- 清华大学朱小燕教授做客雷锋网沙龙,分享 NLP 和人工智能的那些事儿| AAAI 2017...