ardupilot开发 --- 视觉伺服 篇
风驰电掣云端飘,相机无法对上焦
- 1.视觉伺服分类
- 2.视觉伺服中的坐标系
- 3.成像模型推导
- 4.IBVS理论推导
- 5.IBVS面临的挑战
- 6.visp 实践
- 参考文献
1.视觉伺服分类
控制量是在图像空间中推导得到还是在欧式空间中推导得到,视觉伺服又可以分类为基于位置(PBVS)和基于图像的(IBVS)视觉伺服。

2.视觉伺服中的坐标系
- 概述
世界坐标系W:用于测量(估计)飞机、机器人的位姿(位置和姿态)。
飞机机体坐标系B:最终运动控制量应转换到这个坐标系。
目标机体坐标系O:用于描述目标物体与相机间的位姿,用于描述相机坐标系和目标物体机体坐标系之间的位姿关系。
相机坐标系C:是推导IBVS最重要的坐标系。
图像坐标系I:是描述特征点运动状态的坐标系。
像素坐标系P:最终的图像数据最终以该坐标系的形式存储信息。 - 表示
W 即 world,表示世界坐标系,E即 end,表示末端坐标系,类似还有I表示 image,O表示 object,C 表示 Camera等。而各种坐标系齐次变换矩阵T的左上标表示转换后的坐标系,右下标表示转换前的坐标系。如 c T e ^{c}T_e cTe或 c V e ^{c}V_e cVe表示从末端坐标系E到相机坐标系C的坐标变换矩阵或称为齐次变换矩阵(齐次变换矩阵即旋转变换和位移变换融合到了一个矩阵当中)。

3.成像模型推导
-
相关概念:透视投影模型。
-
关于透视投影这篇文章讲的很好: 深蓝AI:经典干货|相机模型与张氏标定。参考了这篇文章。
-
小孔成像模型
光心位于成像平面的前方,成倒立的像,这样不方便IBVS的推导。

-
透视投影模型
光心位于成像平面的后方,成正立的实像,更符合实际成像过程,方便IBVS的推导。

-
世界系、相机系、图像系、像素系的轴向、原点位置示意图



相机系记作Oc-XcYcZc.
图像系记作o-xy.
像素系记作o-uv.
相机系的原点在光心,Xc轴水平向右,Yc轴竖直向下,Zc轴水平向前。
图像坐标系的原点在Zc轴与成像平面的交点处,x、y轴分别与Xc、Yc轴同向。
像素坐标系的原点在成像平面的左上角,u、v轴分别与图像系的x、y轴同向。
图像系原点在像素系中的坐标为【u0,v0】,也被称为主点坐标。
相机系原点到成像平面的距离为 f,即焦距。 -
像素系坐标与图像系坐标间的关系
{ u = x d x + u 0 = p x + u 0 v = x d x + u 0 = p x + u 0 (式 1 ) \begin{cases} u=\frac x {dx}+u_0=p_x+u_0 \\ v=\frac x {dx}+u_0=p_x+u_0 \end{cases}(式1) {u=dxx+u0=px+u0v=dxx+u0=px+u0(式1)
其中:
[u0,v0]是图像系原点在像素系中的坐标;
px,py是图像系中 xy 轴的单位长度对应的像素个数;
uv是像素系中的坐标;
xy是图像系中的坐标。 -
图像系坐标与相机系坐标间的关系
{ x = f Z X y = f Z Y (式 2 ) \begin{cases} x=\frac f {Z}X \\ y=\frac f {Z}Y \end{cases}(式2) {x=ZfXy=ZfY(式2)
其中:
f f f 是相机焦距;
x y xy xy 是图像系中的坐标;
X Y Z XYZ XYZ 是目标点在相机系中的坐标。 -
相机内参
(式1)、(式2) 提到的参数 u 0 , v 0 , p x , p y u_0,v_0,px,p_y u0,v0,px,py 被称为相机的内参,通过相机标定得到。
4.IBVS理论推导

问题描述:
假设在世界3维空间中有一点P,
在相机系中的坐标记作 [ X , Y , Z ] [X,Y,Z] [X,Y,Z],
在图像系中的坐标记作 [ x , y ] [x,y] [x,y],
在像素系中的坐标记作 [ u , v ] [u,v] [u,v]。
记相机的6自由度运动速度矢量(相机坐标系的速度矢量)为:
V c = [ v x , v y , v z , w x , w y , w z ] T (式 3 ) V_c=[v_x,v_y,v_z,w_x,w_y,w_z]^T(式3) Vc=[vx,vy,vz,wx,wy,wz]T(式3)
根据物体的旋转运动和直线运动的经典理论公式,可得到点P在相机系中的运动方程为:
[ X ˙ Y ˙ Z ˙ ] = − [ v x v y v z ] − [ w x w y w z ] × [ X Y Z ] (式 4 ) \begin{bmatrix} \dot{X} \\ \dot{Y} \\ \dot{Z} \end{bmatrix} = - \begin{bmatrix} v_x \\ v_y \\ v_z \end{bmatrix} - \begin{bmatrix} w_x \\ w_y \\ w_z \end{bmatrix} \times \begin{bmatrix} {X} \\ {Y} \\ {Z} \end{bmatrix}(式4) X˙Y˙Z˙ =− vxvyvz − wxwywz × XYZ (式4)
注意:因为 V c = [ v x , v y , v z , w x , w y , w z ] T V_c=[v_x,v_y,v_z,w_x,w_y,w_z]^T Vc=[vx,vy,vz,wx,wy,wz]T是相机的速度矢量,正好与点P的速度矢量相反,因此(式4)右边取的是负号!!
将(式2)对时间求导可得:
{ x ˙ = X ˙ / Z − X Z ˙ / Z 2 y ˙ = Y ˙ / Z − Y Z ˙ / Z 2 (式 5 ) \begin{cases} \dot{x}=\dot{X}/Z-X\dot{Z}/Z^2\\ \dot{y}=\dot{Y}/Z-Y\dot{Z}/Z^2\\ \end{cases}(式5) {x˙=X˙/Z−XZ˙/Z2y˙=Y˙/Z−YZ˙/Z2(式5)
将(式2)和(式4)代入(式5)可得:
{ x ˙ = − v x / Z + x v z / Z + x y w x − ( 1 + x 2 ) w y + y w z y ˙ = − v y / Z + y v z / Z − x y w y + ( 1 + y 2 ) w x − x w z (式 6 ) \begin{cases} \dot{x}=-v_x/Z+xv_z/Z+xyw_x-(1+x^2)w_y+yw_z\\ \dot{y}=-v_y/Z+yv_z/Z-xyw_y+(1+y^2)w_x-xw_z\\ \end{cases}(式6) {x˙=−vx/Z+xvz/Z+xywx−(1+x2)wy+ywzy˙=−vy/Z+yvz/Z−xywy+(1+y2)wx−xwz(式6)
写成矩阵形式:
s ˙ = [ x ˙ y ˙ ] = L s V c (式 7 ) \dot{s}= \begin{bmatrix} \dot{x} \\ \dot{y} \end{bmatrix} =L_sV_c(式7) s˙=[x˙y˙]=LsVc(式7)
其中 s s s 被称为视觉特征, L s L_s Ls被称为图像雅可比矩阵或相互作用矩阵:
L s = [ − 1 / Z 0 x / Z x y − ( 1 + x 2 ) y 0 − 1 / Z y / Z 1 + y 2 − x y − x ] (式 8 ) L_s= \begin{bmatrix} -1/Z&0&x/Z&xy&-(1+x^2)&y \\ 0&-1/Z&y/Z&1+y^2&-xy&-x \end{bmatrix} (式8) Ls=[−1/Z00−1/Zx/Zy/Zxy1+y2−(1+x2)−xyy−x](式8)
记视觉特征 s s s的期望值为 s d s_d sd,则视觉特征误差为:
s e = s − s d (式 9 ) s_e=s-s_d(式9) se=s−sd(式9)
因为 s d s_d sd是常量因此有:
s ˙ d = 0 (式 10 ) \.s_d=0(式10) s˙d=0(式10)
将(式9)对时间求导,得到误差系统的状态空间方程:
s ˙ e = s ˙ − s ˙ d = L s V c (式 11 ) \.s_e=\.s-\.s_d=L_sV_c(式11) s˙e=s˙−s˙d=LsVc(式11)
设计一个控制律 V c Vc Vc使得(式11)表示的误差系统的全部状态随着时间呈指数衰减到0,即控制律使得最终的误差系统变成如下形式:
s ˙ e = − λ s e (式 12 ) \.s_e=-\lambda s_e(式12) s˙e=−λse(式12)
那么可以反推出控制律:
V c = − λ L s + s e (式 13 ) V_c=-\lambda L_s^+ s_e(式13) Vc=−λLs+se(式13)
其中 L s + L_s^+ Ls+是 L s L_s Ls的广义逆矩阵, λ \lambda λ是一个常量。
待续…
5.IBVS面临的挑战
- 计算 L s + L_s^+ Ls+时会产生奇异值。
- L s L_s Ls不容易得到, L s L_s Ls的几种计算方式请参考:https://zhuanlan.zhihu.com/p/422634446
- 待续…
6.visp 实践
- cJc :相机坐标系的运动控制自由度,可以看作是运动控制自由度雅可比矩阵。
- L:图像雅可比矩阵,相互作用矩阵
- J1:task雅可比矩阵
- signInteractionMatrix:相互作用矩阵的符号,1 for eye-in-hand, -1 for eye-to-hand
- inversionType:指定求广义逆矩阵还是求转置矩阵
- Transpose matrix:转置矩阵
- Inverse matrix:逆矩阵
- task Jacobian 是什么?J1???
V c = − λ L ^ s + e V_c = -\lambda {\widehat {\bf L}}^{+}_{s} {\bf e} Vc=−λL s+e,得到的控制律 V c V_c Vc是相机系的运动矢量!
V e = − λ ( L ^ s c V e ∗ e J e ) + e {V_e }= -\lambda \left( {{\widehat {\bf L}}_{s} {^c}{\bf V}_e* {^e}{\bf J}_e} \right)^{+} {\bf e} Ve=−λ(L scVe∗eJe)+e,得到的控制律 V e V_e Ve是终端系的运动矢量!
其中 L ^ s \widehat {L}_s L s是 L s L_s Ls的估计值!
why ??
推导如下:
s ˙ = L s V c \dot{s}=L_sV_c s˙=LsVc
记终端系的速度矢量为 V e V_e Ve,终端系到相机系的坐标变换矩阵为 c V e ^cV_e cVe,允许控制的速度矢量自由度记为 e J e ^eJe eJe,则:
s ˙ = L s V c = L s c V e e J e V e \dot{s}=L_sV_c=L_s^cV_e{^eJe}V_e s˙=LsVc=LscVeeJeVe
那么控制率就变成了:
V e = − λ ( L s c V e e J e ) − 1 V_e=-\lambda (L_s{^cV_e}^eJe)^{-1} Ve=−λ(LscVeeJe)−1
对于无人机视觉伺服, c V e ^cV_e cVe即飞机机体坐标系FRD到相机系RDF的齐次变换矩阵(坐标变换)!!!!
参考文献
https://zhuanlan.zhihu.com/p/422634446
https://zhuanlan.zhihu.com/p/389903710
深蓝AI:经典干货|相机模型与张氏标定
硕士论文:基于无标定视觉伺服的定位研究-王博
相关文章:
ardupilot开发 --- 视觉伺服 篇
风驰电掣云端飘,相机无法对上焦 1.视觉伺服分类2.视觉伺服中的坐标系3.成像模型推导4.IBVS理论推导5.IBVS面临的挑战6.visp 实践参考文献 1.视觉伺服分类 控制量是在图像空间中推导得到还是在欧式空间中推导得到,视觉伺服又可以分类为基于位置(PBVS)和基…...
KVM配置嵌套虚拟化
按照以下步骤启用、配置和开始使用嵌套虚拟化,默认情况下禁用该功能,要启用它,请在宿主机物理机上进行配置。在centos stream 9和ubuntu 22部署kvm默认支持虚拟机嵌套虚拟化。 1、英特尔 1.1检查嵌套虚拟化在您的主机系统上是否可用 $cat /sys/module/kvm_intel/paramete…...
Springboot应用的信创适配-补充
Springboot应用的信创适配-CSDN博客 因为篇幅限制,这里补全Spring信创适配、数据库信创适配、Redis信创适配、消息队列信创适配等四个章节。 Springboot应用的信创适配 Springboot应用的信创适配,如上图所示需要适配的很多,从硬件、操作系统、…...
制图工具(14)导出图层字段属性信息表
在制图工具(13)地理数据库初始化工具中我们提到,有一个参数为:“输入Excel表”,并要求表格中的图层字段属性项需要按工具的帮助文档中的示例进行组织… 如下图: 此外,总有那个一个特别的需求&am…...
代码随想录——买股票的最佳时机Ⅱ(Leecode122)
添加链接描述 贪心 局部最优:手机每天的正利润 全局最优:求最大利润 class Solution {public int maxProfit(int[] prices) {int res 0;for(int i 1; i < prices.length; i){res Math.max(prices[i] - prices[i - 1], 0);}return res;} }...
使用Servlet开发javaweb,请求常见错误详解及其解决办法【404、405、500】
Servlet报错的情况多种多样,涵盖了配置错误、代码逻辑错误、资源未找到、权限问题等多个方面。以下是一些常见的Servlet报错情况及其可能的原因和解决方法: 404 Not Found: 错误原因图示: URL映射 发送请求,出现404错误 原因: 请…...
数据库管理-第210期 HaloDB-Oracle兼容性测试02(20240622)
数据库管理210期 2024-06-22 数据库管理-第210期 HaloDB-Oracle兼容性测试02(20240622)1 表增加列2 约束3 自增列4 虚拟列5 表注释6 truncat表总结 数据库管理-第210期 HaloDB-Oracle兼容性测试02(20240622) 作者:胖头…...
SpringBoot实现定时任务的动态停止和更新
目录 定时任务管理器定时任务的任务接口定时任务和定时任务结果的缓存对象定时任务使用姿势 定时任务管理器 负责启动一个定时任务、停止一个定时任务、更新一个定时任务 /*** 定时任务管理器* 1、创建并启动一个定时任务* 2、停止一个定时任务* 3、更新一个定时任务*/ publi…...
【threejs】火焰特效制作
2024-06-26 08-57-16火焰 shader 来源 //shadertory:https://www.shadertoy.com/view/ctVGD1//shadertory:https://www.shadertoy.com/view/ml3GWs 代码 import { DoubleSide, ShaderChunk, ShaderMaterial } from "three";export default fu…...
五原则四实践,REST API安全性请谨记
云原生和微服务架构等技术的流行让API受到越来越大的重视。那么当应用程序开始上云,各项需求都可以通过云服务满足的情况下,应用程序,尤其基于云端API的应用程序的安全问题该如何解决? 表现层状态转移(REST࿰…...
1390:食物链【NOI2001】
【解题思路】 并查集把三类动物划分成三个域,同类域(1-n)、捕食域〈n1-2n)、天敌域(2n1-3n)。把x放入同类域,xn放入其捕食域,x2n放入其天敌域。给在其他集合内安插两个“虚拟代表”…...
ICMAN液位检测——WS003B管道检测模组
ICMAN液位检测之WS003B管道检测模组 体积小,成本低, 液位检测精度高, 有水输出低电平无水高电平, 适用于饮水机、咖啡机、扫地机器人、洗地机等, 有需要朋友快联系我吧! AWE展会不容错过的ICMAN检测模组…...
YOLOv10使用教程及导读
首先推荐一下我的YOLOv8/v10项目,仅需一个v8的钱(69.9),付费进群,即可获取v8/v10的全部改进,欢迎进群。 1 YOLOv10简介 论文链接:https://arxiv.org/pdf/2405.14458 官方代码链接:ht…...
AIGC 在前端流式获取内容SSE
AIGC 在前端流式获取内容SSE 简介具体实现 简介 在 OpenAI 的 API 中,SSE 通常用于实现实时数据传输。例如,在聊天模型(如 ChatGPT)中,使用 SSE 可以让客户端实时接收到生成的对话内容,而不需要等待整个响…...
深度解析安全阀检测技术:方法与挑战
在工业生产中,安全阀作为防止压力容器和管道发生过压事故的关键部件,其性能和可靠性对于保证设备安全和人员安全具有重要意义。随着工业化进程的不断深入,对安全阀的检测和维护工作也日益受到重视。 接下来,佰德旨在探讨安全阀检…...
网络安全--安全设备(一)Dos
安全设备--Dos 一、Dos 是什么二、DDos是什么三、Dos&DDos的区别四、产品防御Dos&DDos方式五、常见的DDoS攻击类型包括但不限于以下几种: 一、Dos 是什么 Dos(拒绝服务攻击,Denial-of-Service),是一种试图通过压倒网络或服务器来阻止合法用户访…...
<电力行业> - 《第3课:国家电网公司100条名词解释》
序号术语解 释1十不干一、无票的不干;二、工作任务、危险点不清楚的不干;三、危险点控制措施未落实的不干;四、超出作业范围未经审批的不干;五、未在接地保护范围内的不干;六、现场安全措施布置不到位、安全工器具不合…...
“论数据访问层设计技术及其应用”写作框架,系统架构设计师
论文真题 在信息系统的开发与建设中,分层设计是一种常见的架构设计方法,区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性,使设计结构清晰,便于提高复用能力和产品维护能力。一种常见的层次划分模…...
Docker部署前端,动态配置后端地址
本文介绍了使用Docker环境变量动态配置nginx。采用的是通过docker run -e xxxxxxx先往容器注入环境变量,然后进一步通过envsubst指令将环境变量写入到conf文件中,实现动态配置文件内容。 背景 前后端分离的架构下,经常会用到nginx反向代理来…...
k8s强制删除一个 Pod
在Kubernetes(K8s)中强制删除一个Pod,通常是因为Pod处于错误状态或无法正常终止。以下是强制删除Pod的步骤和相关信息: ### 步骤一:获取Pod的名称 首先,你需要知道要删除的Pod的名称。可以使用kubectl get …...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
