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

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

Iniciar sesión para comentar.

Respuestas (0)

Categorías

Más información sobre Robotics en Help Center y File Exchange.

Productos


Versión

R2022b

Community Treasure Hunt

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

Start Hunting!