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

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

请先登录,再进行评论。

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Robotics 的更多信息

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!