主要内容

签署后机器人在MATLAB与ROS

这个例子展示了如何控制模拟机器人在ROS ROS-based模拟器上运行网络。你产生的ROS节点控制算法并将其部署到远程设备运行ROS。这里显示的示例使用ROS和MATLAB仿真,和MATLAB编码器™代码生成和部署。其他例子的ROS 2或仿真软件®,见:金宝app

在本例中,您实现一个sign-following算法和控制模拟机器人跟随路径基于环境的迹象。算法接收信息从模拟机器人位置和摄像机。算法检测到的颜色标志和发送速度命令把机器人基于颜色。机器人左拐在这个例子中,当遇到一个蓝色标志,当遇到一个绿色的迹象。机器人停止当遇到一个红色标志。

连接到机器人模拟器

开始为一个差动式驱动机器人ROS-based模拟器和配置一个MATLAB®与机器人模拟器。

下载一个虚拟机使用说明从露台和模拟TurtleBot开始,然后按照以下步骤。

  1. 虚拟机启动Ubuntu®桌面。

  2. 单击露台追随者ROS迹象图标启动露台世界对于这个示例。

  3. 指定的IP地址和端口号ROS大师在露台MATLAB可以与机器人通信模拟器。对于这个示例,ROS主在露台IP172.18.228.122和端口号11311年,和你的主机地址192.168.31.1

  4. 启动ROS 1网络使用rosinit

masterIP =“172.18.228.122”;rosinit (masterIP, 11311);
初始化全局节点/ matlab_global_node_12033 NodeURI http://172.18.228.249:60144和http://172.18.228.122:11311 MasterURI。

配置ROS通信

创建发布者和订阅者将消息传递到网络上ROS和机器人模拟器。你需要用户的图像和量距数据。控制机器人,建立了一个出版商发送速度命令使用/ cmd_vel。的rossubscriberrospublisher功能只支持代码生成消金宝app息结构。返回一个消息结构,指定名称-值对的论点,“DataFormat”、“结构”,当创建用户和出版商。

imgSub = rossubscriber (“/相机/ rgb / image_raw”,“sensor_msgs /形象”DataFormat =“结构”);odomSub = rossubscriber (“/”奥多姆,“nav_msgs /测程法”DataFormat =“结构”);[velPub, velMsg] = rospublisher (“/ cmd_vel”,“geometry_msgs /扭曲”DataFormat =“结构”);

创建一个rosbagwriter对象记录机器人发布订阅的形象和量距数据。

bagWriter = rosbagwriter (“sign_following_data.bag”)
bagWriter = rosbagwriter属性:32 FilePath:“Z: \ \ psahu.Bdoc23a.j2115093 \ sign_following_data。袋的开始时间:0 EndTime: 0 NumMessages: 0压缩:“未压缩的ChunkSize: 786432字节文件大小:4117字节

定义图像处理颜色阈值参数。每一行定义的阈值对应的颜色。

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

创建Sign-following控制器使用Stateflow®图表

这个示例提供了一个辅助MATLAB Stateflow®图表,作为输入的图像大小,从处理图像坐标,机器人测程法。图返回线速度和角速度驱动机器人。

控制器= ExampleHelperSignFollowingControllerChart;打开(“ExampleHelperSignFollowingControllerChart”);

运行控制回路

运行控制器接收图像和移动机器人的迹象。控制器执行这些步骤:

  • 获得最新的图像和测程法从ROS网络消息。

  • 运行算法检测图像特征(ExampleHelperSignFollowingProcessImg)函数。

  • 生成控制命令从Stateflow®图表使用一步

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

机器人看到蒙面形象化形象,改变的价值doVisualization真正的

ExampleHelperSignFollowingSetupPreferences;doVisualization = false;r = rosrate (10);收到(imgSub);收到(odomSub);(~ controller.done)%获得最新的传感器信息和处理它们。imgMsg = imgSub.LatestMessage;odomMsg = odomSub.LatestMessage;[img,构成]= ExampleHelperSignFollowingROSProcessMsg (imgMsg odomMsg);%日志订阅形象和量距数据到一个包文件。currentTime = rostime (“现在”);写(bagWriter imgSub.TopicName、currentTime imgMsg);写(bagWriter odomSub.TopicName、currentTime odomMsg);%的愿景和控制功能。(面具,blobSize blobX] = ExampleHelperSignFollowingProcessImg (img, colorThresholds);步骤(控制器,“blobSize”blobSize,“blobX”blobX,“姿势”,构成);v = controller.v;w = controller.w;%速度发布命令。velMsg.Linear。X = v;velMsg.Angular。Z = w;发送(velPub, velMsg);%选择可视化%注意:可视化数据将减缓执行循环。%如果你有计算机视觉的工具箱,我们推荐使用%的愿景。DeployableVideoPlayer代替imshow。如果doVisualization imshow(面具);标题([“线性韦尔:”num2str (v)“角韦尔:”num2str (w)]);drawnow (“limitrate”);结束%的速度执行循环。等待(r);结束

机器人的迹象和停在最后一个停车标志。这图显示了机器人在运动。

删除rosbagwriter对象关闭包文件后,重置露台场景仿真使用/露台/ reset_simulation服务。创建一个rossvcclient为服务对象。使用调用目标函数调用服务和重置露台模拟场景。

删除(bagWriter);gazeboResetClient = rossvcclient (“/露台/ reset_simulation”DataFormat =“结构”);调用(gazeboResetClient);

可视化ROS消息记录

打开ROS袋查看器应用程序通过输入rosbagViewer在MATLAB®命令窗口。您还可以启动应用程序从MATLAB将来发布应用程序部分。

点击开放和负载生成的sign_following_data.bag文件。检查主题列表源细节左侧面板应用程序检查包文件的信息。发射图像测程法专业的将来发布并选择数据源。使用回放面板控件包文件和可视化记录消息。

生成和部署ROS节点

你验证控制器后,可以生成一个ROS节点sign-following机器人算法使用MATLAB编码器™软件。然后您可以将该节点部署在远程虚拟机运行露台。使用部署,您可以直接在远程机器上运行ROS节点,导致更快的执行。创建一个MATLAB编码器配置对象,使用硬件“机器人操作系统(ROS)”。

cfg = coder.config (“exe”);cfg。硬件= coder.hardware (“机器人操作系统(ROS)”);

设置配置参数。您可以调整这些值,所以他们适合你的远程设备和验证之前的部署。机器人的迹象和停在最后一个停车标志。

cfg.Hardware。DeployTo =“远程设备”;cfg.Hardware。RemoteDeviceAddress =“192.168.192.129”;cfg.Hardware。RemoteDeviceUsername =“用户”;cfg.Hardware。RemoteDevicePassword =“密码”;

设置构建行动”构建运行“确保部署ROS节点代码生成后开始运行。

cfg.Hardware。BuildAction =“构建和运行”;

生成活性氧控制器节点和部署。的DeploySignFollowingRobotROS函数包含控制器算法代码。

codegenDeploySignFollowingRobotROS配置cfg

复位后的露台场景节点通过调用执行rossvcclient对象,gazeboResetClient

调用(gazeboResetClient);

重新部署节点使用rosdevice

重新运行部署的ROS节点,创建一个rosdevice对象。指定deviceAddress,用户名、密码输入ROS之间建立一个SSH连接设备和MATLAB。

gazeboVMDevice = rosdevice (“192.168.192.129”,“用户”,“密码”);

检查可用的节点连接远程设备。验证部署ROS节点,deploysignfollowingrobotros,远程设备上存在。

gazeboVMDevice.AvailableNodes

运行远程设备上的ROS节点使用runNode函数。机器人的迹象和停在最后一个停车标志。

runNode (gazeboVMDevice“deploysignfollowingrobotros”)