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

12 views (last 30 days)
大空
大空 on 31 Jan 2023
Commented: Atsushi Ueno on 5 Mar 2023
ロボットが移動する動画を撮影しその動画からロボットがどの程度の角度で移動したか導くことは可能ですか?
またどのような方法がありますか?
ロボットが進んだ道のりを線に出すといったサイトは見たことあるのですが
やり方が見つけられずお願いいたします。
  3 Comments
大空
大空 on 3 Mar 2023
  • 動画の1フレーム内に映るロボットを認識する
  • 出来ればロボットの何れかの部位も認識し、同じ部位の座標を得る
  • 1フレームずつ座標取得を繰り返し、動画の長さ分の座標(時系列データ)を得る
  • 座標データ(一定の時系列データ)の差分から速度(時系列データ)を得る
  • 速度データから速度ベクトルの角度(時系列データ)を求める
これらを教えて頂いてもよろしいでしょうか?
Atsushi Ueno
Atsushi Ueno on 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

Sign in to comment.

Answers (0)

Products


Release

R2022b

Community Treasure Hunt

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

Start Hunting!