1 概覽
當你在Ros中開發完成,想要匯入系統驗證功能的時候,是不是苦于需要去Ros,但是去了Ros又沒法使用很多很好用的工具,如rviz、rosbag等,除錯起來費心費力,如果在非ros平臺開發一套可視化、記錄工具等又是龐大工程,頓時累覺不愛,

如果你也有同樣的煩惱,那快來點贊收藏關注博主,下面的工具絕對適合你,提高你的開發效率,Ros官方已經想到這個問題并且幫大家提供了解決方案:RosBridge
在RosWiki中介紹了RosBridge的功能:
Rosbridge provides a JSON API to ROS functionality for non-ROS
programs. There are a variety of front ends that interface with
rosbridge, including a WebSocket server for web browsers to interact
with. Rosbridge_suite is a meta-package containing rosbridge, various
front end packages for rosbridge like a WebSocket package, and helper
packages.
簡而言之就是,RosBridge提供了在Ros與非Ros平臺的Json介面,通過多種方式可以實作在不同平臺的資料溝通功能,
看來官方很貼心, 下面就來看看這個功能包提供的工具,有三部分:rosbridge_library(將Json轉換為Ros的功能)、rosapi(Ros的功能入口)、rosbridge_server (實作了多種服務器模式),因此RosBridge的解決方案就是這樣:

RosBrideg實作了左側紅色的部分,接收JSON指令并發送至ROS環境中,這么看來很清晰對不對?下面看看使用方法
2 使用方法
2.1 安裝
代碼專案地址:https://github.com/RobotWebTools/rosbridge_suite
提供了原始碼,不過最好不要想著從原始碼編譯安裝,博主被層出不窮的依賴問題逼得沒脾氣,最后弄到系統還原,

使用命令安裝方式:
$ sudo apt-get install ros-[des_name]-rosbridge-*
解決問題簡單快捷,
同時可以下好原始碼,畢竟可以幫助理解功能包,
2.2 使用
RosBridge的Server的DemoServer保存在rosbridge_server/launch檔案夾中,可以看到提供了三種實作方式:

TcpUdp適合單向的鏈接,在機器人系統中,傳感器資料和運算結果、控制命令等需要頻繁的雙向鏈接,所以選用websocket模式,
$ roslaunch ./rosbridge_websocket.launch

看到這里就啟動成功了,默認的配置是監聽localhost:9090埠,
如果該埠收到合適指令的JSON資料,RosBridge就會同步發送同樣指令給Ros系統,從而實作ros與非ros的資料互通,
2.3 指令格式
{ "op": "subscribe",
"topic": "/cmd_vel",
"type": "geometry_msgs/Twist"
}
這就是一個簡單的訂閱指令Json格式,訂閱的topic名稱是cmd_vel,資料型別是geometry_msgs/Twist,當RosBridge收到上述指令時,就會執行相應功能,當收到符合的Topic資料,就會發送給相應的非ros環境,看起來就像是我們的系統也訂閱了該話題一樣,
具體的更多指令格式可以參考:https://github.com/RobotWebTools/rosbridge_suite/blob/groovy-devel/ROSBRIDGE_PROTOCOL.md
3 效果
這一篇僅實作了通信程序的一半,另一半在非ros環境中的實作需要我們自己根據自己的環境來實作,下一篇,我會介紹一個在Unix/C++環境中的高效實作工具,真正建立起跨系統環境的通信結構,需要就點贊關注收藏我吧,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292313.html
標籤:其他
