主要内容

在Matlab中使用ROS签署后面的机器人

此示例显示了如何使用MATLAB®在ROS网络上控制在基于ROS的模拟器上运行的模拟机器人。这里显示的示例使用ROS和MATLAB。有关ROS 2或Simulink®的其他示例,请参阅:金宝app

在此示例中,您运行MATLAB脚本,该脚本实现签名算法,并控制模拟机器人以遵循基于环境中的符号的路径。该算法从模拟机器人接收位置信息和相机信息,该机器人在基于单独的ROS的模拟器中运行。该算法检测标志的颜色并发送速度命令以基于颜色转动机器人。在此示例中,算法旨在当机器人遇到蓝色标志时左转,然后机器人遇到绿色标志时右转。最后,机器人在遇到红色标志时停止。

连接到机器人模拟器

启动基于ROS的模拟器,用于差动驱动机器人,并使用机器人模拟器配置MATLAB®连接。

要遵循此示例,请使用说明下载虚拟机开始凉亭和模拟的火炬

  • 启动Ubuntu®虚拟机桌面。

  • 在Ubuntu桌面中,单击凉亭标志追随者ROS图标以启动为此示例而建造的凉亭世界。

  • 指定Gazebo中ROS主站的IP地址和端口号,以便MATLAB®可以与机器人模拟器通信。对于这个例子,凉亭的ROS主人是http://192.168.203.131:11311您的主机地址是192.168.31.1.

  • 使用ROS 1网络使用罗斯尼特

Masterip ='192.168.203.131';setenv('ros_ip''192.168.31.1');setenv('ros_master_uri'',['http://'杰作':11311']);Rosinit(Masterip,11311)
ROS_IP环境变量为192.168.31.1的值将用于设置ROS节点的广告地址。使用nodeuri初始化全局节点/ matlab_global_node_46296 http://192.168.31.1:57058/

设置ROS通讯

创建发布者和订阅者以通过ROS网络从机器人模拟器中继消息。您需要对图像和内径数据的订阅者。要控制机器人,请设置发布者以使用速度命令使用/ cmd_vel.

imgsub = Rossubscriber(“/ Camera / RGB / Image_raw”);OdomSub = Rossubscriber(“/ odom”);[velpub,velmsg] = rospublisher(“/ cmd_vel”“geometry_msgs / twist”);

定义图像处理颜色阈值参数。每行定义不同颜色的阈值。

colorthresholds = [100 255 0 55 0 50;......% 红色的0 50 50 255 0 50;......% 绿色的0 40 0 55 50 255]'% 蓝色

使用StateFlow®Chart创建以下控制器的标志

此示例提供了一个示例帮助MatlabStateFlow®图表,其占据了图像大小,从处理的图像坐标,机器人测量仪姿势。该图表提供了线性和角速度,以基于这些输入驱动机器人。

控制器= exampleHelpersignfollowingControllerchart;打开('examplehelpersignfollowingcontrollerchart');

运行控制循环

本节运行控制器接收图像并将机器人移动以遵循标志。控制器执行以下步骤:

  • 获取来自ROS网络的最新图像和OCOMOTRY消息。

  • 运行algoritm以检测图像特征(examplehelpersignfollowingprocessimg)。

  • 使用StateFlow®Chart生成控制命令

  • 将速度控制命令发布到ROS网络。

为了可视化机器人看到的蒙版图像,更改值愚蠢化变量到真的

examplehelpersignfollowingsetuppreferences;%控制掩模的可视化Dovisualization = false;r = RATECONTROL(10);接收(IMGsub);在开始循环之前,%等待在循环之前接收图像消息接受(OdomSub);尽管(~cliner.done)%获得最新传感器消息并处理它们imgmsg = imgsub.latestmessage;odommsg = odomsub.latestmessage;[img,pose] = examplehelpersignfollowingrosprocessmsg(imgmsg,odommsg);%运行视觉和控制功能[掩码,blobsize,blobx] = examplehelpersignfollowingprocessimg(img,colorthresholds);步骤(控制器,'blobsize',blobsize,'blobx',blobx,'姿势',姿势);v = controller.v;w = controller.w;%发布速度命令velmsg.linear.x = v;velmsg.angular.z = w;发送(Valpub,Velmsg);%可选择可视化%注意:可视化数据将减慢执行循环。%如果您有计算机Vision工具箱,我们建议使用%Vision.deplyableVideoplayer而不是imshow。如果Dovisualization imshow(面具);标题(['线性vel:'num2str(v)'角度vel:'num2str(w)]);rawingow('limitrate');结尾%pace执行循环。等待(r);结尾

您应该看到在基于ROS的机器人模拟器中移动的机器人,如下所示。