Effacer les filtres
Effacer les filtres

ロボットの進む角度を導く

4 vues (au cours des 30 derniers jours)
大空
大空 le 31 Jan 2023
Commenté : Atsushi Ueno le 5 Mar 2023
ロボットが移動する動画を撮影しその動画からロボットがどの程度の角度で移動したか導くことは可能ですか?
またどのような方法がありますか?
ロボットが進んだ道のりを線に出すといったサイトは見たことあるのですが
やり方が見つけられずお願いいたします。
  3 commentaires
大空
大空 le 3 Mar 2023
  • 動画の1フレーム内に映るロボットを認識する
  • 出来ればロボットの何れかの部位も認識し、同じ部位の座標を得る
  • 1フレームずつ座標取得を繰り返し、動画の長さ分の座標(時系列データ)を得る
  • 座標データ(一定の時系列データ)の差分から速度(時系列データ)を得る
  • 速度データから速度ベクトルの角度(時系列データ)を求める
これらを教えて頂いてもよろしいでしょうか?
Atsushi Ueno
Atsushi Ueno le 5 Mar 2023
%% ロボットが動く動画を作成
vid = VideoWriter('moving_robot.avi');
open(vid);
N = 20; radius = 10; rsize = 3; t = (0:pi/N:pi*2)';
r(1:N*2+1,1) = radius * cos(t);
r(1:N*2+1,2) = radius * sin(t);
xp = rsize * cos(t + pi/4 + (0:pi/2:2*pi));
yp = rsize * sin(t + pi/4 + (0:pi/2:2*pi));
p = plot(r(1,1)+xp(1,:),r(1,2)+yp(1,:),'k'); % ロボット描画
xlim([-radius - rsize,radius + rsize]);
ylim([-radius - rsize,radius + rsize]);
axis off
for k = 1:size(r,1)
p.XData = r(k,1) + xp(k,:);
p.YData = r(k,2) + yp(k,:);
drawnow
frame = getframe(gcf);
writeVideo(vid,frame);
end
close(vid);
%% 動画からロボットの位置と動作方向を検出
vidObj = VideoReader('moving_robot.avi')
lastr = [0 0]; k = 0;
while hasFrame(vidObj)
k = k + 1; % 動画フレーム数
vidFrame = readFrame(vidObj);
BW = rgb2gray(vidFrame) < 127;
r(k,1:2) = [mean(find(sum(BW,1))), mean(find(sum(BW,2)))];
v(k,1:2) = r(k,:) - lastr;
t(k) = atan2(v(k,2),v(k,1));
aglx = radius * 10 * cos(t(k));
agly = radius * 10 * sin(t(k));
imshow(vidFrame);
hold on
quiver(r(k,1),r(k,2),aglx,agly,'k');
lastr = r(k,:);
end

Connectez-vous pour commenter.

Réponses (0)

Catégories

En savoir plus sur Robotics dans Help Center et File Exchange

Produits


Version

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!