posted @ 2013-06-09 22:00 from [FreedomShe]

玩WowWee Rovio小车有段时间了,整理了一下之前写的代码,在ROS Groovy里面,对WowWee Rovio的CGI接口进行了封装,这次封装的主要是控制接口(三个全向轮,摄像头),图像接口(为了节约流量没有采取视频流的方式获取图像,而是采用request来response实时图像),MCU Report接口(包含红外传感,编码盘信息,电池信息等)。

Environment: Ubuntu 12.10 + Ros groovy (catkin workspace)

科普

WowWee Rovio是WowWee的早些年的一款WIFI小车,对于机器人爱好者来说,它的强大在于不错的硬件配置:

  1. 三个全向轮,附带三个编码传感器
  2. WIFI功能+摄像头
  3. 双向语音
  4. 一个红外障碍传感器

而对于普通玩家来说,它的亮点还在于北极星导航系统,内置的WEB控制页面易于访问控制,外观高端。只可惜国内流行的都是洋垃圾,电池老化,内置部件质量差,电路设计早已过时,不合理效率低,以至于大部分产品都是随时可能坏掉崩溃的产品,对普通玩家来说没有实用价值。但是对于机器人爱好者,做一些改装也能变废为宝。
ROS (Robot Operating System),无需多言,做机器人研究的不用ROS,永远都会比别人落后一步。

How to use rovio_base package to develop with Rovio API

1. Download rovio_base package into your catkin workspace (here is ros_ws)

$ cd ~/ros_ws/src
$ git clone https://github.com/yuanboshe/rovio_base.git

2. Edit rovioServer.launch

$ roscd rovio_base
$ gedit launch/rovioServer.launch

Change the parameter values to yours

<param name="/rovio_base/host" type="string" value="192.168.10.18" />
<param name="/rovio_base/port" type="string" value="80" />
<param name="/rovio_base/user" type="string" value="admin" />
<param name="/rovio_base/pw" type="string" value="admin" />

3. Create rovio_test package

$ cd ~/ros_ws/src
$ catkin_create_pkg rovio_test std_msgs roscpp cv_bridge

4. Create rovioTest.cpp

$ roscd rovio_test
$ gedit src/rovioTest.cpp

Paste the following code in to rovioTest.cpp and save.

#include "ros/ros.h"
#include "rovio_base/manDrv.h"
#include "rovio_base/image.h"
#include "rovio_base/report.h"
#include <cv_bridge/cv_bridge.h>
#include <sensor_msgs/image_encodings.h>
#include <opencv2/opencv.hpp>int main(int argc, char **argv)
{ros::init(argc, argv, "rovioTest");ros::NodeHandle n;ros::ServiceClient imageClient = n.serviceClient<rovio_base::image>("rovioImage");ros::ServiceClient controlClient = n.serviceClient<rovio_base::manDrv>("rovioControl");ros::ServiceClient reportClient = n.serviceClient<rovio_base::report>("rovioReport");rovio_base::image imageSrv;rovio_base::manDrv controlSrv;rovio_base::report reportSrv;// Head middle controlcontrolSrv.request.drive = 13;controlSrv.request.speed = 9;if (controlClient.call(controlSrv)){ROS_INFO("Control response code: %d", (int )controlSrv.response.code);}else{ROS_ERROR("Failed to call service rovioControl");return 1;}// Get report infoif (reportClient.call(reportSrv)){int length = reportSrv.response.length;int lDirection = reportSrv.response.lDirection;int lNum = reportSrv.response.lNum;int rDirection = reportSrv.response.rDirection;int rNum = reportSrv.response.rNum;int rearDirection = reportSrv.response.rearDirection;int rearNum = reportSrv.response.rearNum;int headPosition = reportSrv.response.headPosition;bool isLedOn = reportSrv.response.isLedOn;bool isIrOn = reportSrv.response.isIrOn;bool isDetectedBarrier = reportSrv.response.isDetectedBarrier;ROS_INFO("MCU Report:\nlength=%d", length);ROS_INFO("Left direction:num=%d:%d", lDirection, lNum);ROS_INFO("Right direction:num=%d:%d", rDirection, rNum);ROS_INFO("Rear direction:num=%d:%d", rearDirection, rearNum);ROS_INFO("headPosition=%d", headPosition);ROS_INFO("isLedOn=%d,isIrOn=%d,isDetectedBarrier=%d", isLedOn, isIrOn, isDetectedBarrier);}else{ROS_ERROR("Failed to call service rovioReport");return 1;}// Show images from camerafor (int i = 0; i < 20; i++){if (imageClient.call(imageSrv)){ROS_INFO("Image size: %dx%d", (int )imageSrv.response.img.width, (int )imageSrv.response.img.height);cv_bridge::CvImagePtr cvImgPtr;try{cvImgPtr = cv_bridge::toCvCopy(imageSrv.response.img, sensor_msgs::image_encodings::BGR8);cv::imshow("", cvImgPtr->image);cv::waitKey(100);}catch (cv_bridge::Exception& e){ROS_ERROR("cv_bridge exception: %s", e.what());return 1;}}else{ROS_ERROR("Failed to call service rovioImage");return 1;}}// Head down controlcontrolSrv.request.drive = 12;controlSrv.request.speed = 9;if (controlClient.call(controlSrv)){ROS_INFO("Control response code: %d", (int )controlSrv.response.code);}else{ROS_ERROR("Failed to call service rovioControl");return 1;}return 0;
}

About how to use the API, you can refer to Rovio API document. The above test program shows that three services you can use: "rovioControl", "rovioImage" and "rovioReport". You can find them as ManualDrive(), GetImage, GetMCUReport () in the above document.

Also, you may prefer to use the rovioParser class directly, that avoids using ROS's service and client frame.

5. Edit the rovio_test CMakeLists.txt located at ~/row_ws/src/rovio_test/CMakeLists.txt and change the related regions as follows(or just add at the end)

add_executable(rovioTest src/rovioTest.cpp)
target_link_libraries(rovioTest ${catkin_LIBRARIES})

6. Build the packages

$ cd ~/ros_ws/
$ catkin_make

7. Run them to test

Run the follow commands in three terminals respectively

$ roscore
$ roslaunch rovio_base rovioServer.launch
$ rosrun rovio_test rovioTest

After you executed the last command, your WowWee Rovio would head middle and head down, and you would view the images from camera 2 seconds.

在测试程序rovioTest node的terminal中,Control response code为0,MCU Report length > 0,Image size 显示正确值,则三个services调用返回了正确数据。

转载于:https://www.cnblogs.com/freedomshe/archive/2013/06/10/Rovio_API_for_ROS_Groovy.html

WowWee Rovio API for ROS Groovy相关推荐

  1. ROS on ARM--RK3066上本地编译ROS Groovy

    ROS on ARM--RK3066上本地编译ROS Groovy [日期:2016-01-17] 来源:Linux社区  作者:sununs11 [字体:大 中 小] 1. 开源机器人操作系统ROS ...

  2. WOWWEE ROVIO小车改造思路

    23年5月接触到这个车,大约是07年的玩具,初看到外观,真的是惊艳,三爪着地,长长的脖子,有些科幻电影中外星生物的味道.这个ID设计,放到今天,也是能镇住国内一众玩具厂商的.惊讶之余,从它的配置看,也 ...

  3. ROS资料----工业机器人 ROS-I Kinetic 培训课程

    -----------☺---------- 全部资料幻灯片和示例代码:http://download.csdn.net/detail/zhangrelay/9772491 ----------☻-- ...

  4. ROS机器人高效编程(原书第3版)勘误、问题及资料汇总

    ROS机器人高效编程(原书第3版)勘误.问题及资料汇总--持续更新 如果小伙伴发现书中错误,恳请批评指正,非常感谢.勘误在文末. 补充一行代码装ROS,适用于14.04LTS(indigo)和16.0 ...

  5. Gazebo機器人仿真學習探索筆記(七)连接ROS

    中文稍后补充,先上官方原版教程.ROS Kinetic 搭配 Gazebo 7 附件----官方教程 Tutorial: ROS integration overview As of Gazebo 1 ...

  6. ROS机器人操作系统中级教程 5

    自定义消息 教程描述: 本教程将展示如何使用ROS消息描述语言来定义你自己的消息类型. 教程难度: 中级 下节预告: 在Pyhon中使用C++类 目录 自定义消息 引用和输出消息类型 C++ Pyth ...

  7. ROS与gazebo中常见问题【持续更新中】

    ROS中常见问题 [gazebo] Spawn service failed. Exiting gazebo模型与服务器 gazebo中添加动态障碍物 [actor] [ROS] rosdep ins ...

  8. ROS发行版列表完整版

    官方原文:http://wiki.ros.org/Distributions Distro Release date EOL date ROS Melodic Morenia (Recommended ...

  9. ROS 不能再详细的安装教程

    ROS 不能再详细的安装教程 版权声明:本文为博主原创文章,转载请标明出处: http://www.cnblogs.com/liu-fa/p/5779206.html 关于ROS(Robot OS 机 ...

  10. 《Groovy官方指南》目录

    入门篇(Getting Started) 下载Groovy(Download Groovy) 安装Groovy (Install Groovy) 与Java的比较 (Differences with ...

最新文章

  1. 计算机视觉顶会CVPR2020接收论文列表已公布,1470篇上榜, 你的paper中了吗?
  2. python代码示例下载-Python下载网易云歌单歌曲的示例代码
  3. Linux结构体变量报错,23. Linux模式设计
  4. Linux网卡eth0变成eth1修改方法
  5. 查询Linux系统网卡流量负载,超好用linux系统查询网卡等流量参数的工具,分享给大家!!!...
  6. (JAVA)Object类之Scanner
  7. 判断是否大于_电动车是否属于机动车的辩论要点
  8. 关于范数与正则化详解(转)
  9. windows 程序库
  10. Linux文本三剑客超详细教程---grep、sed、awk
  11. 输入一正整数,将各数字反转后输出
  12. 【联合路由频谱分配】多跳认知无线电网络中的联合路由和动态频谱分配的matlab仿真与分析
  13. Wincc服务器右下RT状态,关于wincc rt
  14. matlab从无到有系列(九):Simulink基础仿真详解(全网最全,从入门到放弃)
  15. java ttf_java直接使用ttf字体,解决window和linux之间的差异
  16. c++语言字母转换,c++大小写字母转换的思路有几种?
  17. 网站遭到恶意攻击有什么危害
  18. 嵌入式学习——周总结
  19. 【7班】【笔记】人体姿态估计与MMPose-卢策吾
  20. 校招----中信银行一面面经

热门文章

  1. IIS网站发布详细流程
  2. Springboot2.3.x整合Canal
  3. iOS集成 Paypal 贝宝支付
  4. VMware安装CentOS7以及CentOS官网下载自选镜像
  5. 2013年8个存储热点话题总结及高端存储发展趋势
  6. 全球及中国仿制药产业未来发展走势及营销产量规模预测报告2021-2027年
  7. 开启更优网络的时代:Po.et迈入主网
  8. neutron使用数据库
  9. 玩客部落ASO解读:应用商店关键词曝光原理
  10. 2019美国大学计算机本科排名,美国大学计算机排名2019最新排名