0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用DJI M100+ROS的行人追随项目

云深之无迹 来源:云深之无迹 2023-01-29 15:10 次阅读

因为这个项目是视觉+控制,使用纯裸机实现我还没有看到,目前就是依托操作系统来实现:

cb96059c-9694-11ed-bfe3-dac502259ad0.png

需要ROS,OSDK,MSDK,三大类的包,后面是行人监测+KCF追踪。

cbadc2fe-9694-11ed-bfe3-dac502259ad0.png

在具体的看实现以前,我们看一下这个launch文件

roslaunch 命令允许我们一次启动 launch 文件中定义的多个 ROS 节点,启动参数等在启动文件(launch 文件)中配置,并且如果系统之前没有启动 roscore,则 roslaunch 会自动启动它。

cbc2fb24-9694-11ed-bfe3-dac502259ad0.png

使能人追踪

cbde7624-9694-11ed-bfe3-dac502259ad0.png

4个主题,图像发布,人的目标监测,追踪,GPS信号的发送。

然后开启:

roslaunch dji_sdk_demo dji_sdk_client.launch
roslaunch dji_sdk sdk_manifold.launch

后面这个我没有找到。。。,上面分别是:dji_sdk_client 和 dji_sdk节点。

roslaunch people_detect ros_people_detect.launch

运行监测

roslaunch ros_kcf ros_kcf_node.launch

追踪

在之后,可以使用具有自定义功能的遥控器来控制跟踪和检测的停止和启动:

void StartMission1Callback(DJIDrone *drone)
{
    drone->request_sdk_permission_control();
    sleep(1);


    ros::Rate loop_rate(50);


    while(ros::ok())
    {
        ros::spinOnce();
        drone->attitude_control(0x4B,forwardV,leftrV,heightV,yawV);
        cout<

cbfbe876-9694-11ed-bfe3-dac502259ad0.png

该回调函数用于启动任务,即启动自主检测和跟踪

该回调函数用于开始跟踪,即people_detect节点给kcf_track节点一个目标。实际上,这个目标就是离图像中心最近的人,如果没有检测到人,跟踪程序就不会运行,但是当再次检测到人时,跟踪程序就会自动运行。

cc170d7c-9694-11ed-bfe3-dac502259ad0.png

该回调函数用于启动和停止人员检测

cc36e278-9694-11ed-bfe3-dac502259ad0.png

此回调函数用于停止 kcf 跟踪器

cc47bfda-9694-11ed-bfe3-dac502259ad0.png

cc51e38e-9694-11ed-bfe3-dac502259ad0.png

因为OSDK4是支持新飞机的,我这里就选择3.9

cc7f18e0-9694-11ed-bfe3-dac502259ad0.png

看了看issue,也是说明了这个问题,很新

也可以看到这个视觉+控制是很常见的应用

cccffe04-9694-11ed-bfe3-dac502259ad0.png

我的A3也就是在3版本玩耍了

ccf79e28-9694-11ed-bfe3-dac502259ad0.png

有用到CV

cd04931c-9694-11ed-bfe3-dac502259ad0.png

这个是飞行的控制参数

cd174f0c-9694-11ed-bfe3-dac502259ad0.png

???啥子???

cd37de16-9694-11ed-bfe3-dac502259ad0.png

还有一个CIL的控制函数,是Python2版本的

原来以前有Python接口

下载一下看看

cd8dc380-9694-11ed-bfe3-dac502259ad0.png

大开眼界

cd9d1222-9694-11ed-bfe3-dac502259ad0.png

牛逼,直接就是一个类

1cda665e8-9694-11ed-bfe3-dac502259ad0.png

在这里封装

cdbf5152-9694-11ed-bfe3-dac502259ad0.png

在这里实现

cde84ec2-9694-11ed-bfe3-dac502259ad0.png

把文件放入这里

cdfaa8a6-9694-11ed-bfe3-dac502259ad0.png

改一下导入位置

"[a] Request to obtain control"

ce132854-9694-11ed-bfe3-dac502259ad0.png

这个就是一个重定向的代码,应该是

ce40d0a6-9694-11ed-bfe3-dac502259ad0.png

请求控制的函数

ce5e94ec-9694-11ed-bfe3-dac502259ad0.png

在下面

ce788cd0-9694-11ed-bfe3-dac502259ad0.png

在这里最终控制,就是信息的流转

ROS服务由srv文件定义,其中包含请求消息和响应消息。ROS 使用简化的服务描述语言(“srv”)来描述 ROS 服务类型。

这直接建立在 ROS消息格式之上,以启用节点之间的请求/响应通信。服务描述存储在包的srv/子目录下的.srv文件中。

ce82fe68-9694-11ed-bfe3-dac502259ad0.png

我们最后看一个飞行任务控制,RC,手机,板载

反正就是测试的文件,还是挺有学头的,再说吧。

ceba02e6-9694-11ed-bfe3-dac502259ad0.png

也可以看下具体的控制函数,实现

ced4eb60-9694-11ed-bfe3-dac502259ad0.png

这个是PID的内容,就两个PID函数

cef4d63c-9694-11ed-bfe3-dac502259ad0.png

普通的

cf2590f6-9694-11ed-bfe3-dac502259ad0.png

增量式的

cf4ac31c-9694-11ed-bfe3-dac502259ad0.png

人控制型,试试上这个是派生的子类

cf78f23c-9694-11ed-bfe3-dac502259ad0.png

这个是追踪的爸爸,是OpenCV实现的,看不懂。。。,对了,应该是配置

cf95c36c-9694-11ed-bfe3-dac502259ad0.png

上面也说过了

cfa364f4-9694-11ed-bfe3-dac502259ad0.png

接着看这个追踪的节点

cfc203a0-9694-11ed-bfe3-dac502259ad0.png

先获取一些在launch里面设置的东西,接着就是设计高度,下面都是像子进程一样的东西。

cfed2f30-9694-11ed-bfe3-dac502259ad0.png

处理的频率50Hz

d013c884-9694-11ed-bfe3-dac502259ad0.png

在图像和明确接收到东西的前提下,开始追踪的初始化

void trackerInit(const double &cameraInfo)
{
        tracker.setParams(cameraInfo, max_v).
setImgSize(image.cols,image.rows).
setTarget(cv::Point(image.cols/2,image.rows/2),
cv::Point(image.cols/2+1,image.rows/2+1)));
}

是鄙人学识不够了,这nm这么长,语法有点古怪。得到相机的信息,和最大的速度,然后是设置的图像的尺寸,接着设置追踪的目标,里面是生成一个追踪的框子(这里是生成了点而已,写错了)。

最后是在中间生成一个点。

void videoInit(const std::string &fileAddr)
{
        int t = cv::getTickCount();
        std::string fileName_ = fileAddr + std::to_string(t);
        std::string fileName = fileName_ + ".avi";
        writer = cv::VideoWriter(
        fileName, 
        CV_FOURCC('F', 'L', 'V', '1'), 25.0, 
        cv::Size(image.cols, image.rows));
    }

这个是视频的初始化,可以留下追踪的视频:

d030f738-9694-11ed-bfe3-dac502259ad0.png

目录在电脑的桌面

d0663290-9694-11ed-bfe3-dac502259ad0.png

控制好高度的函数

d0862ae6-9694-11ed-bfe3-dac502259ad0.png

在一开始的类里面写的参数

d0a8a9ea-9694-11ed-bfe3-dac502259ad0.png

这个是画框的函数,看来上面我有写错的地方

d0c6cf2e-9694-11ed-bfe3-dac502259ad0.png

画完框,然后就写入

d0e95c4c-9694-11ed-bfe3-dac502259ad0.png

写入到MP4文件

好久没有摸ROS,一些API不记得了,明天继续。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OSDK
    +关注

    关注

    0

    文章

    3

    浏览量

    8108
  • ROS
    ROS
    +关注

    关注

    1

    文章

    272

    浏览量

    16693
  • 裸机
    +关注

    关注

    0

    文章

    37

    浏览量

    6155
  • KCF
    KCF
    +关注

    关注

    0

    文章

    2

    浏览量

    840

原文标题:DJI OSDK开发-检测行人+追踪.1

文章出处:【微信号:TT1827652464,微信公众号:云深之无迹】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Micro-ROS:把ROS2放在MCU上

    对于熟悉机器人应用的读者,ROS想必定是不会陌生的。ROS可以说是目前机器人相关开源社区最流行的项目。每一种类型的机器人都需要以硬件的实际情况编写符合用户需要的功能,起初代码的复用率很低,大大阻碍
    的头像 发表于 04-07 07:13 6618次阅读

    【youyeetoo X1 windows 开发板体验】基于ROS开发的LIO系统——项目计划+前言开箱

    我们开发者的使用需求; 那我们从本次项目出发评价这一块板子,首先就是可以根据需求,可以再对其进行扩展,比如通过M.2或者SATA来实现扩展存储空间,或者扩展我们的无线网卡和4G,以及板载接口支持触摸屏
    发表于 01-26 17:58

    无人机领导者大疆创新DJI招聘--汽车软件岗位。工作地深圳。

    DJI大疆创新介绍】公司介绍:深圳市大疆创新科技有限公司 (简称DJI大疆创新) ,在全球无人机市场独占鳌头,产品不断推陈出新,成功步入千家万户,享誉100多个国家,重新定义了“中国制造”的魅力
    发表于 10-23 16:44

    请问如何理解运放的电压追随电路?

    如何理解运放的电压追随电路?
    发表于 03-16 12:06

    在Android中使用ROS

    %] Compiling Java code for galileo_serial_server[100%] Linking CXX executable /home/xiaoqiang/Documents/ros
    发表于 05-16 19:16

    ROS与STM32是如何进行通信的

    角速度、实际线速度STM32端ROS端之前运行的ROS项目都是在终端编译,用vim或者gedit修改代码,很不方便,函数跳转查看都没办法实现。所以今天先安装一个IDE试试ROS官网上有
    发表于 08-11 07:25

    【科研纪实】ROS下基于视觉的无人机室内定点飞行全程记录(T265+PX4+mavros)精选资料分享

    配置二、软件配置三、环境配置第二部分:分块测试一、无人机本体测试二、T265测试三、mavros通讯测试第一部分:资源配置一、硬件配置指标参数机架型号DJi F450电机型号朗宇 A2212电子调速器好盈科技 XRotor A20供电系统格氏 3S 5300m
    发表于 09-02 07:42

    什么是ROS?如何学习ROS

    什么是ROS?如何学习ROS
    发表于 11-11 07:21

    ROS简介

    目录一、ROS简介1、什么是ROS2、ROS产生、发展和壮大的原因和意义二、在Ubuntu系统中,安装对应版本的ROS软件1、确定Ubuntu配置2、添加
    发表于 12-17 08:24

    什么是ROSROS产生、发展和壮大的原因和意义

    机器人操作系统(ROS)入门(嵌入式系统应用开发)一、ROS 基本问题1. 什么是 ROS2. ROS 产生、发展和壮大的原因和意义二、安装 ROS
    发表于 12-17 06:08

    ROS自动导航小车的设计资料分享

    ROS自动导航小车1.材料清单项目ValueJeston nano(套餐一)¥899GM37-545直流减速电机带编码器 DC24V 1:90¥138板子自己画(附带电机接口以及IMU)¥200
    发表于 01-05 06:48

    搭建ARM+ROS的硬件载体之ROS的移植及测试方法

    arm64架构)  如下所示。  下载命令如下所示,《tags》填入上图的字符串。  3. 下载ROS镜像  根据项目需求选择合适的ROS镜像,本例以kinetic-ros-core为
    发表于 03-09 13:55

    ROS的含义与机器人操作系统ROS的介绍

    为了说明讲清楚 ROS,我就从 ROS 是什么,为什么使用 ROS,如何使用 ROS 三个方面展开。 △出自今年《机器人视觉与应用》课程本人制作的课件 是什么
    发表于 09-26 14:08 12次下载

    ROS与STM32通信

    角速度、实际线速度STM32端ROS端之前运行的ROS项目都是在终端编译,用vim或者gedit修改代码,很不方便,函数跳转查看都没办法实现。所以今天先安装一个IDE试试ROS官网上有
    发表于 12-24 19:00 11次下载
    <b class='flag-5'>ROS</b>与STM32通信

    ROS部署PaddlePaddle的CV模型

    paddle_inference_ros_demo功能包是基于paddle_inference_ros开发的,帮助开发者快速体验paddle_inference在ROS环境下的推理部署效果的功能包。可以直接进入该
    的头像 发表于 10-20 17:02 302次阅读
    <b class='flag-5'>ROS</b>部署PaddlePaddle的CV模型