Matlab robotics仿真结果在Matlab Arduino联调实现

机缘巧合知道了Matlab Arduino这个东西,可以看官方的文档https://ww2.mathworks.cn/help/supportpkg/arduinoio/index.html

当时就想到可以把robotics tool仿真的结果发到Arduino控制舵机模拟,大概有点ROS的意思?(根本没有接触ROS的机会啊,遗憾)

于是就想试试看,首先拿出了师兄给我的一个祖传机械臂,比较简单。用robotics搭建模型就是这样的(有没有大神知道怎么让这个模型立起来?)


L1=Link('d',0,'a',97,'alpha',0,'qlim',[-pi/2 pi/2]);
L2=Link('d',0,'a',91,'alpha',0,'qlim',[-pi/2 pi/2]);
L3=Link('d',-13,'a',96,'alpha',-pi/2,'qlim',[-pi/2 pi/2]);
L4=Link('d',0,'a',38,'alpha',0,'qlim',[-pi/2 pi/2]);
bot = SerialLink([L1 L2 L3 L4], 'name', 'my robot');
bot.plot([0 0 0 0]);
% T1=transl(322,0,0);
% T2=transl(0,-200,0);
% T = ctraj(T1, T2, 20);
% q = bot.ikine(T,[0 0 0 0],[1 1 1 1 0 0]);
% bot.plot(q);

去掉注释就能得出机器人的运动轨迹,q是各个关节的弧度值。

然后要实现Matlab Arduino联调首先要安装Arduino Hardware Package,我是Matlab 2016A,从网上down下来一个ArduinoIO,然后把相应的文件通过Arduino IDE烧进Arduino里才能实现联调。帮我同学弄Matlab 2017A的时候发现他的好像可以直接安装,比较方便。

%  a=arduino('COM5','Uno');
%  s0 = servo(a,'D2','MinPulseDuration',7.00e-4,'MaxPulseDuration',2.3e-3);
%  s1 = servo(a,'D3','MinPulseDuration',7.00e-4,'MaxPulseDuration',2.3e-3);
%  s2 = servo(a,'D4','MinPulseDuration',7.00e-4,'MaxPulseDuration',2.3e-3);
A=size(q);
qt=q(:,1:3)/pi+0.5;
qt=max(qt,0);
            writePosition(s0, 0.5);
            writePosition(s1, 0.5);
            writePosition(s2, 0.5);
            pause(5);
        for i=1:A(1)
            writePosition(s0, qt(i,1));
            writePosition(s1, qt(i,2));
            writePosition(s2, qt(i,3));
            pause(0.2);
        end

这是Matlab的代码,去掉注释,运行即可。

这里需要注意的是,当我第二次运行这个程序的时候,会提示板子上已经有Matlab Arduino的程序了,不能再次烧入。这里我摸索出来的土办法是,给Arduino断电,然后发烧

 writePosition(s0, 0.5);

之类的指令,它会提示Matlab和Arduino失去连接,这时候再去跑上面的代码就重新烧入了。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值