プロットのアニメーション

17 views (last 30 days)
ST
ST on 5 Oct 2021
Commented: ST on 1 Nov 2021
lidarのストリーミングデータをpcplayer(https://jp.mathworks.com/help/vision/ref/velodynefilereader.html)ではなく、
plot3を用いたアニメーションで表現したいです。
plot3で、3次元座標で構成される複数の点をアニメーションで表現する方法はありますでしょうか。

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 12 Oct 2021
質問のリンク先例題について、pcplayerをscatter3に置き換えました(plot3だと点群が線で結ばれてしまう為)
私の古いMATLAB環境では動かせず、アニメーションの動作確認はできていませんが、多分動くと思います。
veloReader = velodyneFileReader('lidarData_ConstructionRoad.pcap','HDL32E');
veloReader.CurrentTime = veloReader.StartTime + seconds(0.3);
figure; set(gcf,'color','k'); % figureの背景色
% 最初の10秒間のみ表示する。最後の条件を外せば全ストリームを表示する。
while(hasFrame(veloReader) && (veloReader.CurrentTime < veloReader.StartTime + seconds(10)))
ptCloudObj = readFrame(veloReader);
xx = ptCloudObj.Location(:,:,1); % scatter3がベクトルしか受け付けないのでx成分を取り出す
yy = ptCloudObj.Location(:,:,2); % scatter3がベクトルしか受け付けないのでy成分を取り出す
zz = ptCloudObj.Location(:,:,3); % scatter3がベクトルしか受け付けないのでz成分を取り出す
scatter3(xx(:), yy(:), zz(:), 3, 'b', 'filled');
ax = gca;
ax.Color = 'k'; % プロットの背景色
ax.XColor = 'w'; % x軸の線色(XColorModeは自動)
ax.YColor = 'w'; % y軸の線色(YColorModeは自動)
ax.ZColor = 'w'; % z軸の線色(ZColorModeは自動)
ax.GridColor = 'w'; % グリッドの線色(色モードは全て自動)
xlabel(gca,'X (m)'); % x軸ラベル
ylabel(gca,'Y (m)'); % y軸ラベル
zlabel(gca,'Z (m)'); % z軸ラベル
% xlim([-60 60]); % x軸の範囲設定をしない(自動に任せればオートズームみたいになる)
% ylim([-60 60]); % y軸の範囲設定をしない(自動に任せればオートズームみたいになる)
% zlim([-20 20]); % z軸の範囲設定をしない(自動に任せればオートズームみたいになる)
pause(0.1);
end
問題は点群の見た目が全く違う事です。
何でもlidarのストリーミングデータは、クルクル回っているセンサの座標系で構成されているそうです。
なので、回転角度に応じた座標系変換をしないと正しく表示されないのだそうです。
とりあえずlidarのストリーミングデータをpcplayerではなく、plot3(scatter3)を用いたアニメーションで表現しましたが、座標変換については追って調べて、出来そうだったら追記します。(なんか難しそう...)
  1 Comment
ST
ST on 1 Nov 2021
ありがとうございます。
参考にさせていただきます。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!