简介

ROS有强大和易用的特性,用的人很多,目前已经推出2.0版本,有相关的官网和论坛。然而其缺点也比较明显。

  只能基于Ubuntu系统,且一个ROS版本只能对应一个具体的Ubuntu版本
      通信效率相对较低,基于Tcp协议。据说2.0以后支持udp协议,但效率如何位置,据说2.0以后版本变化也比较大
      系统较大。ROS使用与一个系统较大的平台,包括移动机器人、机械臂、平台机器人、室外展示机器人等。对于一般的开发者而已,往往只专注与1~2个核心点,很少涉及全部功能。而ROS的升级和维护往往涉及较大的文件和相关库,开发并不轻便。

故需要找到替代品。Yarp标榜了“Another"不知作者是否是相对ROS而言。

Yarp是开源系统,源码在Github中可以得到,且有几个稳定版本共选择。https://github.com/robotology/yarp
官方文档在 http://www.yarp.it/

然而官方文档似乎由doxgen生成,并不条理,且很多文档并没有相关注释,tutorial下来也没有一个明确的理解概念,所以在此需要记录学习过程的体会和经验,希望给后来者提供需求和帮助。

Yarp的优势:

  •    分布式,支持tcp/udp/http 协议
  •    跨平台,用c++编写,依赖库很少,Linux下只需要必备的几个三方库。Windows下需额外下载一个库编译后即可使用
  •    开源,支持修改
  •      简单,支持CMake工具

基于以上有点,在跨平台开发时得心应手,目前没有碰到太多效率问题,比较时候当前的项目需求。

安装

  利用Git工具获取源码或相应稳定版本 https://github.com/robotology/yarp
      Windows下尚需按照源码ACE
      利用CMake生成工程,编译,设定YARP_DIR为CMake相关目录

  Enjoy!

简单实例

  新建CMakeLists.txt, 内容如下
  

 cmake_minimum_required(VERSION 2.8.)

 project(yarp_demo)

 find_package(YARP REQUIRED)
include_directories(${YARP_INCLUDE_DIRS})
add_executable(simple_sender simple_sender.cpp) target_link_libraries(simple_receiver ${YARP_LIBRARIES})

  简单的CMake代码,主要包含Yarp引用的header files,以及在链接时需要加入的Yarp库。Windows和Linux下面均经过测试。其中Windows需要在环境变量中指定Yarp_dir。当然,Yarp最好是自己编译通过。

  simple_sender.cpp的源码如下:

#include <yarp/os/Network.h>
#include <yarp/os/Port.h>
#include <yarp/os/Bottle.h>
#include <yarp/os/Time.h>
#include <stdio.h>
#include <yarp/os/all.h>
#include <yarp/sig/all.h> #include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp> using namespace yarp::os;
using namespace yarp::sig;
using namespace yarp::sig::draw;
using namespace yarp::os; int main(int argc, char **argv)
{
char* ipAddr = "127.0.0.1";
const int defaultPort = ; Network yarp; // connect to the name server
Contact nameServer(ipAddr, defaultPort);
Network::setNameServerContact(nameServer); BufferedPort<ImageOf<PixelRgb> > port;
port.open("/circle"); cv::VideoCapture mCap; mCap = cv::VideoCapture();
if (mCap.isOpened())
{
while ()
{
cv::Mat frame;
mCap >> frame; ImageOf<PixelRgb>& img = port.prepare();
img.setExternal(frame.data, frame.cols, frame.rows);
port.write(); cv::imshow("image", frame);
int val = cv::waitKey();
if(val > ) break;
} }
else
{
int ct = ;
int idx = ;
while (true)
{
ImageOf<PixelRgb>& img = port.prepare();
img.resize(, );
img.zero(); PixelRgb blue(, , );
addCircle(img, blue, ct, , ); printf("send msg: %d \n", ++idx);
port.write(); Time::delay();
ct = (ct + ) % ;
if (idx > 0xffff) break;
} } mCap.release();
port.close();
return ;
}

  相对于Yarp Example里面的范例,本例略复杂,即将发送的数据由OpenCV采集摄像头的数据,再转化为图片格式,发送出去。如果客户端没有摄像头,则直接创建一张简单图片,画一个圆形发送出去。

  其接受代码如下simple_receiver.cpp(CMakeList可参照上面的写,非常简单):

#include <yarp/os/Network.h>
#include <yarp/os/Port.h>
#include <yarp/os/Bottle.h>
#include <stdio.h> #include <yarp/os/all.h>
#include <yarp/sig/all.h> using namespace yarp::os;
using namespace yarp::sig; #include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp> #include <string> int main(int argc, char **argv)
{
std::string ipAddr("127.0.0.1");
const int defaultPort = ; Network yarp;
// connect to the name server
Contact nameServer(ipAddr, defaultPort);
Network::setNameServerContact(nameServer); Port input;
auto ret = input.open("/receiver");
if (!ret)
{
printf("Could not connect server \n. ## Please retry. \n");
return -;
} Bottle bot;
ImageOf<PixelRgb> img; Network::connect("/circle", "/receiver", "udp"); while (true)
{ input.read(img);
auto img2 = img.getIplImage();
IplImage *img3 = static_cast<IplImage*>(img2); cvShowImage("Image", img3);
cvWaitKey(); printf("\t======================== \n");
//printf("got msg: %s\n", bot.toString().c_str());
} input.close(); return ;
}

  连接正常的话,可以实时收到sender发送过来的图像。

其他几个要点:

  Network::connect函数的第三个参数可选择tpc或upd

  Yarp默认不需要选择ipAddr或者port。在多机通信时,需要指定ip或端口

  单机通信效率比较高。

另外Yarp含有Ros的结构,同时也有类似Ros的Topic的概念,会我后面的文章中介绍。

  

机器人平台框架Yarp - Yet another robot platform的更多相关文章

  1. Robot Framework自动化测试框架核心指南-如何做好自动化测试平台框架的设计

    自动化测试如果需要能高效快速的支撑软件项目的测试,项目的快速迭代以及上线,除了以上我们介绍的需要许多的Lib来支持以及需要高效的去编写自动化测试案例外,还需要一个好的自动化测试框架平台来支撑我们的自动 ...

  2. 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...

  3. SNF软件开发机器人平台2018-发展升级履历-零编程时代

    一.SNF软件开发机器人产品白皮书 二.SNF开发机器人教程:链接:https://pan.baidu.com/s/1Qpomg11c_1b1NKY5P7e4Bw 密码:jwc3 三.SNF软件开发机 ...

  4. AI中台——智能聊天机器人平台的架构与应用(分享实录)

    内容来源:宜信技术学院第3期技术沙龙-线上直播|AI中台——智能聊天机器人平台 主讲人:宜信科技中心AI中台团队负责人王东 导读:随着“中台”战略的提出,目前宜信中台建设在思想理念及架构设计上都已经取 ...

  5. 5G和AI机器人平台

    5G和AI机器人平台 Qualcomm Launches 5G and AI Robotics Platform 高通技术公司(Qualcomm Technologies)周三推出了一款高级5G和人工 ...

  6. 5G和AI机器人平台为工业4.0和无人机提供服务

    5G和AI机器人平台为工业4.0和无人机提供服务 Qualcomm 5G and AI robotics platform delivers for Industry 4.0 and drones 高 ...

  7. 通过Django Channels设计聊天机器人WEB框架

    这两个月都在忙着设计针对银联客服业务的智能聊天机器人,上一周已经交完设计报告,这一周还和部门同事一起分享了系统设计及运行效果.因为时间的关系,系统原型我使用了Flask+jQuery的组合,感觉用以原 ...

  8. 易普优APS高级计划排程系统系列提纲:行业知识,业务建模,排程算法,计划可视化,平台框架,案例分享

    专注于高级计划排程系统研发与实施10来年了,国内外各种APS软件基本都研究过,这里列个提纲主要从6个方面跟大家一起讨论分享,欢迎大家鼓掌或拍砖 易普优APS高级计划排程系统系列001:行业知识,APS ...

  9. OpenStack云计算平台框架

    概:  OpenStack是包含很多独立组件的一个云计算平台框架.在安装组件前,需要先将框架搭建出来,才能向其中放置组件. 搭建open stack云计算平台框架 一.安装open stack云计算平 ...

随机推荐

  1. programming-languages学习笔记--第10部分

    programming-languages学习笔记–第10部分 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.sr ...

  2. TensorFlow安装-Windows

    参考:https://blog.csdn.net/dou3516/article/details/77836459 一.安装环境 TensorFlow即可以支持CPU,也可以支持CPU+GPU.前者的 ...

  3. java xml文件

    xml: 是可扩展的标签语言.其中标签可以自定义. 作用是存储数据,即配置文件. 书写规范: 1:区分大小写,html不区分. 2:应该有根标签(类似html的<html>标签) 3:标签 ...

  4. LeetCode872. Leaf-Similar Trees

    自己的代码: # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = ...

  5. [NOIp2016]蚯蚓 (队列)

    #\(\color{red}{\mathcal{Description}}\) LInk 这道题是个\(zz\)题 #\(\color{red}{\mathcal{Solution}}\) 我们考虑如 ...

  6. NYOJ 252 01串 普通dp

    题目链接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=252 分析: dp[2][0]=2;//表示长度为2的满足要求的且以0结尾的串个数 ...

  7. H.264编码格式简单分析

    H.264的重要性不再提了.本文主要记录一下H.264的编码格式.H.264官方文档:https://github.com/jiayayao/DataSheet/tree/master/encode- ...

  8. java中跳出循环的方式

    continue:跳出本次循环,继续下一次循环,也就是不执行本次循环continue下面的语句. 例如:"will you"不会被打印 for(int i = 0; i< 8 ...

  9. 【11.18总结】从SAML出发在重定向中发现的XSS漏洞

    Write-up地址:How I Discovered XSS that Affects around 20 Uber Subdomains 作者:fady mohammed osman 总算回家了, ...

  10. 【10.15总结】绕过CSRF的Referer保护

    今天下午可能要出远门,所以现在就把总结写好了. Write-up地址:[Critical] Bypass CSRF protection on IBM 这个CSRF漏洞存在于IBM的修改邮箱页面,修改 ...