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了

时间: 2024-12-12 06:18:53

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包 这部分内容需要以下Jar包支持 mysql-connector:MySQL数据库连接驱动,架起服务端与数据库沟通的桥梁: MyBatis:一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架: log4j:Apache的开源项目,一个功能强大的日志组件,提供方便的日志记录: 修改后的pom.xm

windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)

windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) 简单说几句 在mongodb中3元素:db(数据库).collection(集合).document(文档) 其中collection类似于数据库中的表,document类似于行,这样一来我们就将内容对比起来记忆学习了. 数据格式 MongoDB documents是BSON格式(一种类json的一种二进制形式的存

Windows Azure系列 -《基础篇》- 创建虚拟网络

如何在Windows Azure中创建虚拟网络,以构建云环境中的虚拟局域网: 1.登陆Windows Azure平台,点击侧边栏网络按钮,在中间点击"创建虚拟网络". 2.在接下来的配置页面,填写虚拟网络的名称.选择地理外置和地缘组(如果已有),没有则选择创建新的地缘组. 3.接下来填写DNS服务器地址(没有则留空) 4.规划和配置IP网络,选择适用的地址空间. 5.最后点击确认按钮完成. Windows Azure系列 -<基础篇>- 创建虚拟网络,布布扣,bubuko.

【REACT NATIVE 系列教程之二】创建自定义组件&&导入与使用示例

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/react-native/2219.html 在上一篇  [REACT NATIVE 系列教程之一]触摸事件的两种形式与四种TOUCHABLE组件详解 中的最后介绍了如何使用Touchable的四种组件进行监听触摸事件.  那么紧接着我们利用Touchable来包装一个带图片的Button组件,且设计成可接受很多自定义参数. 一:创建我们自定义

Java Thread系列(一)线程创建

Java Thread系列(一)线程创建 Java 中创建线程主要有三种方式:继承 Thread.实现 Runnable 接口.使用 ExecutorService.Callable.Future 实现由返回结果的多线程. 一.继承 Thread 类创建线程类 public class MyThread extends Thread { public void run() { for (int i = 0; i < 10000; i++) { System.out.println("线程一

asp.net core 系列 20 EF基于数据模型创建数据库

原文:asp.net core 系列 20 EF基于数据模型创建数据库 一.概述 本章使用 Entity Framework Core 构建执行基本数据访问的 ASP.NET Core MVC 应用程序.使用迁移(migrations)基于数据模型创建数据库,是一种code first模式.可以在Windows 上使用 Visual Studio 2017,或在 Windows.macOS 或 Linux 上使用 .NET Core CLI 来学习.已经安装了NET Core 2.1 SDK,这

【HANA系列】SAP HANA XS创建XSJOB后台执行

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS创建XSJOB后台执行 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 详细配置等有时间在写(这一篇文章我在公众号里写了最详细的解析) 代码截图如下: 因为之前比较忙,没来得及解释一下这个XSJOB的参数 现在补充一下xscron的参数: "xscron": "

ROS学习之package.xml

目录 概述 格式2(推荐) 基本结构 所需标签 依赖关系 Metapackages 附加标签 格式1(遗产) 基本结构 所需标签 构建,运行和测试依赖关系 Metapackages 附加标签 概述 该软件包清单是一个XML文件名为package.xml中必须包括与任何兼容包的根文件夹.此文件定义有关包的属性,例如包名称,版本号,作者,维护者以及其他catkin包的依赖关系.请注意,这个概念类似于传统rosbuild构建系统中使用的manifest.xml文件. 您的系统包依赖关系在package

C# CreateDataAdapter 创建 DbDataAdapter,以及用DataTable的Load方法获取数据

ADO.NET中 有了DbConnection,就可用DbConnection的CreateCommand 创建DbCommand,BeginTransaction创建DbTransaction 可以十分方便的实现工厂模式,操作不同的数据库. 但是唯独DbDataAdapter这个重要的对象无法通过DbConnection或DbCommand来创建,也无法实例化,必须使用SqlDataReader这种明确的类来创建实例,导致 获取数据 的方法不能在基类实现 以下是两个解决办法: 1.只有我们自己