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

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

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Produkte


Version

R2022b

Community Treasure Hunt

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

Start Hunting!