【MATLAB】将机械臂运动轨迹输出为avi视频或是gif动图

这篇具有很好参考价值的文章主要介绍了【MATLAB】将机械臂运动轨迹输出为avi视频或是gif动图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

输出轨迹视频文件

figure
%将轨迹创建生成视频
out=VideoWriter('直线轨迹.avi');
out.FrameRate=10;
open(out);
robot0.plot([17,15,15,15,15,15]./180*pi)
plot3(squeeze(Tc(1,4,:)),squeeze(Tc(2,4,:)),squeeze(Tc(3,4,:)));
hold on
for K=1:50
    robot0.plot(q(K,:))%The trajectory outputs have one row per time step, and one column per axis.每一行为每个时间点的六轴角度
    F=getframe(gcf);
    writeVideo(out,F);
end
matlab输出动画,问题记录,机器人,matlab,经验分享,学习,Powered by 金山文档

将机器人的轨迹动态展示,并将其保存为一个视频文件。

使用 VideoWriter 函数创建一个名为“直线轨迹.avi”的视频文件,并设置视频的帧率为 10 帧每秒。

使用 robot0.plot 函数绘制初始关节角度为 [17, 15, 15, 15, 15, 15] 的机器人,并使用 plot3 函数绘制机器人的轨迹

在绘制轨迹时,需要使用 squeeze 函数将机器人末端执行器的位姿矩阵 Tc 中的 x、y、z 轴轨迹提取出来,并分别作为 plot3 函数的输入参数。

然后,循环 50 次,使用 robot0.plot 函数绘制每个时间点上机器人的关节角度,并使用 getframe 函数获取当前图像的帧数据

最后,使用 writeVideo 函数将每个时间点上的图像帧写入到视频文件中。这样,就可以将机器人的轨迹动态展示,并将其保存为一个视频文件,以便后续查看和分析。

输出轨迹动图

%% gif制图原理:每次画图,只画一张,截取下来,组合成为gif。
%轨迹规划方法,根据关节角位姿进行调整
[q,qd,qdd] = jtraj(init_ang,targ_ang,step);
for n = 1:1:50   
    figure(1);
    grid on
    T=robot0.fkine(q);%根据插值,得到末端执行器位姿T
    nT=T.T;
    plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));%输出末端轨迹
    robot0.plot(q(n,:));
    view(15,27);%view([Azimuth,Elevation])
    drawnow; 
    % Capture the plot as an image 
    F=getframe(gcf);
    I=frame2im(F);
    [I,map]=rgb2ind(I,256);
    % Write to the GIF File 
    if n == 1
        imwrite(I,map,'五次多项式轨迹.gif','gif', 'Loopcount',inf,'DelayTime',0.2);
    else
        imwrite(I,map,'五次多项式轨迹.gif','gif','WriteMode','append','DelayTime',0.2);
    end
 end

使用关节空间插值方法生成机器人末端执行器的轨迹,并将生成的轨迹动态地绘制在三维坐标系中,同时将每一帧绘制的结果保存下来,最终生成一个 GIF 动画。

其中,变量 q 存储了关节空间插值后的机器人关节角位姿,变量 qdqdd 分别存储了关节角的速度和加速度。

在每一次循环中,使用 fkine 函数计算机器人末端执行器的位姿,并将得到的位姿数据存储在 T 变量中。

由于 T 是一个机器人位姿矩阵,包含了机器人末端执行器的位置和姿态信息,因此使用 T.T 将其转换为一个 4x4 的矩阵 nT

matlab输出动画,问题记录,机器人,matlab,经验分享,学习,Powered by 金山文档
matlab输出动画,问题记录,机器人,matlab,经验分享,学习,Powered by 金山文档

nT(1:3,4,:) 存储了机器人末端执行器的轨迹

然后使用 plot3 函数将机器人末端执行器的轨迹绘制在三维坐标系中。

使用 plot 函数将机器人的关节角位姿绘制在一个机器人模型上,

使用 view 函数设置视角,将绘制结果实时显示在屏幕上。

同时,使用 getframe 函数捕获当前图形窗口的画面,并将它转换成一个图像。然后,使用 rgb2ind 函数将图像转换成 GIF 动画需要的格式,并使用 imwrite 函数将这个图像加入到 GIF 动画中。

最后,这个循环会执行 50 次,每一次都会生成一个新的图像,并将其添加到 GIF 动画中。

最终生成的 GIF 动画中,每一帧都包含了机器人末端执行器的轨迹以及机器人的运动状态文章来源地址https://www.toymoban.com/news/detail-717271.html

matlab输出动画,问题记录,机器人,matlab,经验分享,学习,Powered by 金山文档

读取视频文件输出为动图

记录每次程序运行的时间

在命令行创建结构体

t_history= struct('Time', {});

运行程序文件

tic

close all
clearvars -except t_history
clc

%使用VideoReader函数读取视频文件
video = VideoReader('直线轨迹.avi');

%获取视频的帧率
frame_rate = video.FrameRate;

%每一帧的显示时间
delay_time = 1/frame_rate;

%获取视频的总帧数
num_frames = video.NumFrames;

%预分配一个与视频大小和帧数相匹配的四维数组,用于存储缩放后的帧图像
%通过预分配内存,可以避免在循环中重复分配内存的问题,提高程序的运行效率。
frames = imresize(zeros([video.Height video.Width 3 num_frames], 'uint8'),0.5);

%使用while循环遍历视频的每一帧,将每一帧转换为图像格式,并使用imresize函数将其缩放为合适的大小
i = 1;
while hasFrame(video)
   frame = readFrame(video);
   resized_frame = imresize(frame, 0.5);%将视频中的每一帧读取,并将其缩放为原图的一半大小
   frames(:,:,:,i) = resized_frame;%遍历视频的每一帧,将其缩放后存储在预分配的数组中
   i = i+1;
end

%将所有缩放后的帧保存为gif动图,其中DelayTime参数设置为每一帧的显示时间,使得动图的播放速度和视频的帧率一致。

filename = '直线规划.gif';
for i = 1:size(frames,4)
    image = frames(:,:,:,i);
    [imind,cm] = rgb2ind(image,256);
    if i == 1
        %使用imwrite函数将缩放后的帧保存为gif动图
        %DelayTime参数控制每一帧的显示时间,LoopCount参数控制动图的循环次数。
        imwrite(imind,cm,filename,'gif','LoopCount',inf,'DelayTime',delay_time);
    else
        imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',delay_time);
    end
end

t_history(end+1).Time=toc
matlab输出动画,问题记录,机器人,matlab,经验分享,学习,Powered by 金山文档

到了这里,关于【MATLAB】将机械臂运动轨迹输出为avi视频或是gif动图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包