基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)

  1. Matlab与Ros简介

众所周知:Matlab拥有强大的数据处理、可视化绘图能力以及众多成熟的算法函数,非常适合算法开发。而ROS系统,则是一种新的标准化机器人系统软件框架。通过ROS,你可以使用大量的示例代码和开源程序轻松地完成机器人编程和控制任务。

那么:

如何利用matlat和ROS不同的优势,协同进行机器人设计与仿真?

如何用matlat程序通过ROS直接控制物理世界中的机器人?

以下内容摘自:古月居博客
ROS探索总结(三十五)——Matlab中的ROS

(相关参考:ROS与Matlab系列:一个简单的运动控制)

答案是利用Matlab提供的tool box(工具箱)。Matlab有一个吊炸天的工具箱,几乎和哆啦A梦的口袋差不多,可以提供丰富而强大的扩展功能,其中有一个robotics工具箱,提供了一些机器人需要用到的工具,当然也包括ROS相关的工具。

在Matlab中的robotics system toolbox提供了ROS的大部分功能,我们可以通过Matlab启动rosmaster,创建ROS节点,发布ROS消息/服务,查看ROS话题数据,控制ROS机器人等,更重要的是可以结合Matlab强大的功能,实现机器人算法设计和实现,直接接入ROS系统,结合gazebo或者V-REP完成仿真。
基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第1张图片

上边这张框图就是ROS-MATLAB和机器人系统的通信框架,可以看到,Matlab拥有强大而丰富的算法功能包(视觉处理、控制系统、信号处理等等),通过ROS-MATLAB可以获取机器人的数据,在处理之后再将控制指令发送到机器人。简而言之,ROS-MATLAB让Matlab成为了机器人强大的计算后台。

需要注意的是,ROS-MATLAB在Matlab2013之后的版本才有,而且需要Matlab安装robotics system toolbox,可以登录官网链接下载安装。

Matlab中的robotics system toolbox到底可以实现哪些ROS的功能?我们还是打开Matlab看一下。

在Matlab的命令窗口中,输入“help robotics.ros”,如果工具箱没有问题的话,可以看到如下命令列表,每个命令后边都进行了相应功能的说明:
基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第2张图片

我们首先通过一个简单的例子对ROS-MATLAB有个大致的概念。

运行例程的第一步是什么?当然是把roscore跑起来,在ubuntu里我们使用的是roscore命令,而在Matlab里边,我们需要使用rosinit命令。
在这里插入图片描述
运行成功会有上图的提示。

然后我们来运行例程 exampleHelperROSCreateSampleNetwork,输入命令后稍等一下例程就会启动,使用rosnode、rostopic命令我们就可以查看节点和消息。

基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第3张图片
是不是有一种在ubuntu下的穿越感,仿佛是一个运行在windows下的虚拟机一般。

2.Ubuntu16.04 下的Matlab+Ros/Gazebo联合仿真
关于 Matlab与Ros的通信,网络上常见的教程是,在两个不同的操作系统平台下Matlab(Windows)+Ros(Ubuntu)的通信,这个过程需要配置两台计算机的IP地址,如下所示:
( 同样摘自:古月居博客
ROS探索总结(三十五)——Matlab中的ROS )
基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第4张图片
但是,如果只是做简单的运动仿真的话,无需像上述这么麻烦,需要两台计算机并进行复杂的配置操作,因为在Ubuntu下已有Matlab软件可以使用,这样就无需进行IP配置的操作,如本人所做的9自由度串并联机器人冗余运动的仿真。
基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第5张图片
仿真的步骤如下:

1)在MATLAB软件中写好运动仿真计算程序和话题发布程序

(机器人运动学计算脚本)
基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第6张图片
(Ros话题发布脚本)
基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第7张图片

2)用URDF文件建立在Gazebo中仿真的机器人模型和相关的launch启动文件
基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第8张图片

3)通过启动launch文件运行Ros core和Gazebo,加载进机器人模型
基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第9张图片

基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第10张图片

4)再在Matlab的命令行窗口输入以下命令,建立Matlab与Ros的通信连接

rosinit

基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第11张图片

  • 最后运行Matlab下的Ros话题发布脚本,将每一时刻的机器人关节运动量发布到对应的关节控制器中
    基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第12张图片

3 存在问题:Matlab 话题发布脚本编程注意事项

在Matlab的Robotics System Toolbox下进行话题发布的命令为rospublisher
基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第13张图片
个人之前发布话题的方法时将话题发布写成一个Matlab的函数脚本文件(function.m),然后在程序的循环体语句中调用它,结果出现两种情况:

  • Matlab报错奔溃的现象基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第14张图片

在终端中查看话题发布的消息数据的频率很低(3s左右),和话题脚本程序运行全程中Gazebo中模型无明显运动现象。

基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第15张图片
分析原因在于:编程逻辑错误,导致程序运行低效

具体原因为:用Matlab中Robotics System Toolbox下进行话题发布的命令rospublisher来初始声明话题名称和消息类型时,将其放入一个函数脚本文件中,然后在话题发布脚本程序中的循环体中调用该函数脚本,导致每循环一次都要进行一次话题的初始化声明,这将极大的耗费时间,从而导致话题的发布频率极低

基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第16张图片
基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第17张图片

正确的做法是:将rospublisher来初始声明话题名称和消息类型的程序语句放置到话题发布脚本程序的循环体之前,让其只执行一次,即可。基于Matlab+Ros/Gazebo联合仿真:9自由度串并联机器人冗余运动(1)_第18张图片

你可能感兴趣的:(Linux/Ubuntu,ROS,MATLAB,机器人学)