AR Drone系列之:使用ROS catkin创建package并使用cv_bridge实现对ar drone摄像头数据的处理
1 开发环境
Ubuntu 12.04
ROS Hydro
2 前提
可參考这篇blog:http://blog.csdn.net/yake827/article/details/44564057
blog:http://blog.csdn.net/celesius/article/details/39188119
已安装adrone_autonomy package 而且能够执行
https://github.com/AutonomyLab/ardrone_autonomy
文档:http://ardrone-autonomy.readthedocs.org
已通过catkin创建一个package (方法见上一篇文章)这里我创建的名称为droneTest
3 欲实现效果
获取ar drone的摄像头实时图像而且能够进行处理
4 參考网页
http://answers.ros.org/question/79306/help-with-streaming-ardrone-camera-images-to-opencv/
http://wiki.ros.org/cv_bridge/Tutorials/UsingCvBridgeToConvertBetweenROSImagesAndOpenCVImages
http://wiki.ros.org/vision_opencv
5 详细实现Step-by-Step
Step 1:在~/catkin_ws/src/droneTest/src/ 中创建一个新的文件这里命名为droneTest.cpp
Step 2: 编辑droneTest.cpp文件,代码例如以下:
#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <sensor_msgs/image_encodings.h>
#include <cv_bridge/cv_bridge.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
static const char WINDOW[]="RGB Image";
static const char WINDOW2[]="Gray Image";
void process(const sensor_msgs::ImageConstPtr& cam_image){
cv_bridge::CvImagePtr cv_ptr;
try
{
cv_ptr = cv_bridge::toCvCopy(cam_image,sensor_msgs::image_encodings::BGR8);
}
catch (cv_bridge::Exception& e)
{
ROS_ERROR("cv_bridge exception:%s",e.what());
return;
}
Mat img_rgb = cv_ptr->image;
Mat img_gray;
cvtColor(img_rgb,img_gray,CV_RGB2GRAY);
imshow(WINDOW,img_rgb);
imshow(WINDOW2,img_gray);
cvWaitKey(1);
}
int main(int argc, char **argv){
ros::init(argc,argv,"droneTest");
ros::NodeHandle n;
image_transport::ImageTransport it(n);
image_transport::Subscriber image_sub = it.subscribe("/ardrone/image_raw",1,process);
cv::namedWindow(WINDOW);
cv::namedWindow(WINDOW2);
ros::spin();
return 0;
}
这里使用cv_bridge的toCvCopy来实现格式转换。很easy
Step 3:编辑CMakeLists.txt
主要目的是加入依赖和加入opencv库
cmake_minimum_required(VERSION 2.8.3)
project(droneTest)
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
sensor_msgs
cv_bridge
image_transport
)
catkin_package()
find_package(OpenCV)
include_directories(
${OpenCV_INCLUDE_DIRS}
)
include_directories(include ${catkin_INCLUDE_DIRS})
add_executable(droneTest src/droneTest.cpp)
target_link_libraries(droneTest ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
add_dependencies(droneTest droneTest_generate_messages_cpp)
Step 4:编译
编译catkin。在terminal中输入:
cd ~/catkin_ws
catkin_make
这里说明一下就是package.xml这个文件改不改不影响,我发现甚至把里面的dependency都删掉也能够make。
接下来是执行
这里我为了执行方便一般把package拷贝到~/workshop下
然后把~/catkin_ws/devel/lib/droneTest 拷贝到~/workshop/droneTest下。这里我的ROS_PACKAGE_PATH 包括~/workshop
我在bashrc中有加入例如以下代码:
source /opt/ros/hydro/setup.bash
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/workshop
Step 6:执行
1打开一个terminal执行roscore
2 连接ar drone
3 再打开一个terminal执行rosrun ardrone_autonomy ardrone_driver
4 再打开一个terminal执行rosrun droneTest droneTest
ok了
AR Drone系列之:使用ROS catkin创建package并使用cv_bridge实现对ar drone摄像头数据的处理的更多相关文章
- Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问
本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...
- Ros学习——创建程序包
1.程序包 一个程序包要想称为catkin程序包必须符合以下要求: 该程序包必须包含catkin compliant package.xml文件 这个package.xml文件提供有关程序包的元信 ...
- [Unity3D插件]2dtoolkit系列二 动画精灵的创建以及背景图的无限滚动
经过昨天2dtoolkit系列教程一的推出,感觉对新手还有有一定的启发作用,引导学习使用unity 2dToolKit插件的使用过程,今天继续系列二——动画精灵的创建,以及背景图的无限循环滚动,在群里 ...
- Intellij Idea系列之JavaSE项目的创建(一)
Intellij Idea系列之JavaSE项目的创建(一) 一.Intellij Idea于 Intellij Idea是捷克的Jetbrain公司的一款优秀的针对Java程序员的IDE,其自从问世 ...
- .NET CORE学习笔记系列(2)——依赖注入[4]: 创建一个简易版的DI框架[上篇]
原文https://www.cnblogs.com/artech/p/net-core-di-04.html 本系列文章旨在剖析.NET Core的依赖注入框架的实现原理,到目前为止我们通过三篇文章从 ...
- windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...
- Java Thread系列(一)线程创建
Java Thread系列(一)线程创建 Java 中创建线程主要有三种方式:继承 Thread.实现 Runnable 接口.使用 ExecutorService.Callable.Future 实 ...
- 【ABAP系列】SAP ABAP BAPI_REQUISITION_CREATE创建采购申请
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP BAPI_RE ...
- 【HANA系列】SAP ECLIPSE中创建ABAP项目失败原因解析
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP ECLIPSE中创建AB ...
随机推荐
- 1.1 Introduction中 Putting the Pieces Together官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Putting the Pieces Together 拼在一起 This comb ...
- 【原创】基于pyautogui进行自动化测试
前期准备: python3.6 pyautogui pywinauto 以下代码实现内容: 1.打开记事本 2.记事本中输入This is a test 3.保存内容 4.退出进程 import py ...
- 【Codeforces Round #299 (Div. 2) D】Tavas and Malekas
[链接] 我是链接,点我呀:) [题意] 给你n个位置,然后让你从某些位置开始的|p|个位置,填上p这个字符串. 问你填的时候是否会发生冲突->输出0 否则输出最终n个位置组成的可能的字符串的总 ...
- 四种卸载Mac软件的方法
从 Mac 电脑上卸载已经安装的应用程序可能是你知道的操作系统里面最简单的一种了.而如果你是一名新买了 Mac 电脑的用户,那么你可能比较困惑:怎么没有控制面板中的相应板块来卸载它们呢?但是其实你想不 ...
- 【习题 5-14 UVA - 1598】Exchange
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 各组数据之间有空行! 且最后一行后面没有空行! 然后就是用set来模拟就好. 删除的时候,不着急删除. 因为并不用时刻输出集合大小. ...
- shiro 中的filterChainDefinitions详解(转)
springrain使用shiro控制权限,配置filterChainDefinitions结合数据库校验权限. 我们在web.xml中配置一个全局过滤器,也就是在springrain配置的是一个sp ...
- Debian 上创建新的用户
Debian 上创建新的用户 使用Gnome的窗口界面创建 使用Linux的命令创建 添加用户: useradd -d /home/your_username -m your_username 添加密 ...
- swift项目第四天:动态加载控制器
一:Appdelegate import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate ...
- Spring配置文件头及xsd文件版本
最初Spring配置文件的头部声明如下: Xml代码 <?xml version="1.0" encoding="UTF-8"?> <!D ...
- go 生成随机小数 指定范围
package main import ( "crypto/hmac" "crypto/sha1" "encoding/base64" &q ...