视觉伺服:IBVS vs PBVS(Matlab代码实现)

       目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码


💥1 概述

该项目是对经典和最著名的视觉伺服方法的简单比较:基于图像和基于位置。为了做到这一点,已经使用了针孔相机模型。

📚2 运行结果

 

主函数部分代码:

clear, clc, close all; 

%% parameters
% frames
O = [0; 0; 0];        % world origin frame
C = [0.2; 0.3; 0.6];  % camera origin frame
versor_origin = 0.4;
versor_camera = 0.2;
origin_axis = {'O';'X';'Y';'Z'};
camera_axis = {'oc','zc','xc','yc'};
plane_y = 0.25;       % y image plane width
plane_z = 0.18;       % z image plane height

f = 0.15;             % focal lenght
p = [1.0; 0.15; 0.8]; % point's position (x,y,z) in world frame
d = C - O;            % distance between camera and world frame
ang = [pi/2 0.0 pi/2];  

[x_proj, y_proj] = proj(p, ang, d, f); % computes the projection of the point in the image plane


%% plot point

grid on; 
quiver3([O(1);O(1);O(1)],[O(2);O(2);O(2)],[O(3);O(3);O(3)],[versor_origin;0;0],[0;versor_origin;0],[0;0;versor_origin]) % world frame
text([O(1),O(1)+versor_origin,O(1),O(1)], [O(2),O(2),O(2)+versor_origin,O(2)], [O(3),O(3),O(3),O(3)+versor_origin], origin_axis)

axis equal
hold on;
quiver3([C(1);C(1);C(1)],[C(2);C(2);C(2)],[C(3);C(3);C(3)],[versor_camera;0;0],[0;versor_camera;0],[0;0;versor_camera]) % camera frame
text([C(1),C(1)+versor_camera,C(1),C(1)], [C(2),C(2),C(2)+versor_camera,C(2)], [C(3),C(3),C(3),C(3)+versor_camera], camera_axis)

scatter3(p(1),p(2),p(3)); 
scatter3(linspace(C(1),p(1)), linspace(C(2),p(2)), linspace(C(3),p(3)),' . ')

% create image plane
x = linspace(C(1)+f,C(1)+f,20);
y = linspace(C(2)-plane_y,C(2)+plane_y,20);
z = linspace(C(3)-plane_z,C(3)+plane_z,20);

[X, Y] = meshgrid(x,y);
Z = meshgrid(z);
s = surf(X,Y,Z,'FaceAlpha',0.3);
s.EdgeColor = 'none';


%% projection of an object

w = 0.1;   % width of the object
h = 0.2;   % height of the object
% x_surf = linspace(p(1)-w, p(1)+w, 3);
% y_surf = linspace(p(2)-w, p(2)+w, 3);
% z_surf = linspace(p(3)-h, p(3)+h, 3);

x_surf = linspace(1.4, 1.8, 4);
y_surf = linspace(0.1, 0.3, 4);
z_surf = linspace(0.5, 0.7, 4);

[X_surf, Y_surf] = meshgrid(x_surf,y_surf);
Z_surf = meshgrid(z_surf);

% points of the surface

% 
% points = [x_surf             x_surf                         x_surf;
%           y_surf [y_surf(2) y_surf(3) y_surf(1)] [y_surf(3) y_surf(1) y_surf(2)]; 
%           z_surf             z_surf                         z_surf]
%       

points = zeros(length(x_surf)*length(y_surf),3);
count = 1;
for i=1:length(x_surf)
    for j=1:length(y_surf)
        points(count,:) = [X_surf(i,j) Y_surf(i,j) Z_surf(i,j)];
        count = count + 1;
    end
end

% projection of the points in the image plane
proj_points = zeros(length(points), 2);
for i = 1:length(points)
    [proj_points(i,1), proj_points(i,2)] = proj(points(i, :)', ang, d, f);
end


% plot object
figure()
subplot(1,2,1)
grid on;
quiver3([O(1);O(1);O(1)],[O(2);O(2);O(2)],[O(3);O(3);O(3)],[versor_origin;0;0],[0;versor_origin;0],[0;0;versor_origin]) % origin frame
text([O(1),O(1)+versor_origin,O(1),O(1)], [O(2),O(2),O(2)+versor_origin,O(2)], [O(3),O(3),O(3),O(3)+versor_origin], origin_axis)

axis equal
hold on;
quiver3([C(1);C(1);C(1)],[C(2);C(2);C(2)],[C(3);C(3);C(3)],[versor_camera;0;0],[0;versor_camera;0],[0;0;versor_camera]) % camera frame
text([C(1),C(1)+versor_camera,C(1),C(1)], [C(2),C(2),C(2)+versor_camera,C(2)], [C(3),C(3),C(3),C(3)+versor_camera], camera_axis)

s = surf(X,Y,Z,'FaceAlpha',0.3);
s.EdgeColor = 'none';
s = surf(X_surf,Y_surf,Z_surf,'Facealpha',1);

for i = 1:length(points)
    scatter3(linspace(C(1),points(i,1)), linspace(C(2),points(i,2)), linspace(C(3),points(i,3)),' . ')
end

🎉3 参考文献

[1]葛全益,钟涵海,侯冰,张晓龙,卢晓龙.基于SSD的轻量化无人机视觉定位算法[J].电子测试,2022(19):60-62.

部分理论引用网络文献,若有侵权联系博主删除。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
IBVS是嵌入式视觉系统(Image-Based Visual Servoing)的缩写,是一种机器视觉技术。而MATLAB(Matrix Laboratory)是一种用于算法开发、数据可视化和数值计算的高级技术计算软件。 IBVS是一种通过实时图像信息进行控制的视觉伺服技术。其基本原理是通过对机器人视觉系统采集到的图像信息进行处理和分析,实时提取特征信息,并与预先设定的目标特征进行比较,从而实现对机器人运动的实时控制。这种控制方式可以使机器人对环境变化做出快速反应,并实现对目标位置的精确控制。 MATLAB则是一种功能强大的科学计算软件平台,具有丰富的工具箱和函数库,可用于各种科学计算、数据处理和模型设计等任务。其强大的矩阵计算功能和丰富的数据可视化能力使其成为进行机器视觉算法开发和图像处理的理想工具。 对于IBVSMATLAB可以作为一种常用的开发平台。MATLAB提供了丰富的图像处理和计算机视觉工具箱,可以方便地对图像进行处理、特征提取和目标跟踪等操作。同时,MATLAB还提供了强大的数值计算和算法开发功能,可以方便地进行控制算法的设计和仿真。通过与其他传感器和执行器的集成,可以在MATLAB环境中实现完整的IBVS系统。 总之,IBVS是一种基于图像信息的实时控制技术,而MATLAB是一种用于算法开发和数据处理的高级计算软件。在进行IBVS的算法设计和图像处理任务时,MATLAB可以作为一种常用的开发平台,提供丰富的工具和函数库,方便地进行算法开发、仿真和数据可视化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值