主要内容

在MATLAB与ROS签订后机器人2

这个例子向您展示了如何使用MATLAB®来控制模拟机器人运行在一个单独的ROS-based模拟器/ ROS 2网络。然后显示了如何生成一个ROS 2节点的控制算法并将其部署到一个远程设备。这里显示的示例使用ROS 2, MATLAB仿真,和MATLAB编码器™代码生成和部署。

在本例中,您运行一个MATLAB脚本,实现了一种sign-following算法和控制模拟机器人跟随路径基于环境的迹象。算法获得的位置信息和相机信息模拟机器人,这是运行在一个单独的ROS-based模拟器。算法检测到的颜色标志和发送速度命令把机器人基于颜色。在这个例子中,该算法的目的是当机器人遇到一个蓝色标志左转和右转当机器人遇到一个绿色的迹象。最后机器人停止当它遇到一个红色标志。

这个例子使用ROS 1或仿真软件®,明白了金宝app签署后机器人在MATLAB与ROS

连接到一个机器人模拟器

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

要跟随这个例子中,下载一个虚拟机使用说明从露台和模拟TurtleBot开始

  • 虚拟机启动Ubuntu®桌面。

  • 在Ubuntu桌面,点击露台ROS2迷宫图标启动露台世界建造这个例子。

  • 在MATLAB命令窗口,设置ROS_DOMAIN_ID环境变量来25与机器人模拟器ROS桥设置和运行ros2主题列表从机器人模拟器验证主题在MATLAB是可见的。

setenv (“ROS_DOMAIN_ID”,“25”)ros2 (“主题”,“列表”)
/相机/ camera_info /相机/ image_raw /时钟/ cmd_vel / imu / joint_states /奥多姆/ parameter_events / rosout /扫描/特遣部队

设置ROS 2沟通

创建一个ROS 2节点使用指定的域ID。

domainID = 25;n = ros2node (“matlab_example_robot”,domainID);

创建发布者和订阅者传递消息的机器人ROS 2网络模拟器。更新的服务质量(QoS)政策发布者和订阅者。你需要用户的图像和量距数据。控制机器人,建立了一个出版商发送速度命令使用/ cmd_vel的话题。

imgSub = ros2subscriber (n,“/相机/ image_raw”,“sensor_msgs /形象”,“可靠性”,“可靠”,“耐久性”,“不稳定”,“深度”5);odomSub = ros2subscriber (n,“/”奥多姆,“nav_msgs /测程法”,“可靠性”,“可靠”,“耐久性”,“不稳定”,“深度”5);[velPub, velMsg] = ros2publisher (n,“/ cmd_vel”,“geometry_msgs /扭曲”,“可靠性”,“可靠”,“耐久性”,“不稳定”,“深度”5);

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

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

创建标志后控制器使用Stateflow®图表

这个示例提供了一个示例助手MATLAB Stateflow®图,图像大小,从处理图像坐标,机器人测程法。图表提供了线性和角速度驱动机器人基于这些输入。

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

运行控制回路

本节运行控制器接收图像和移动机器人的迹象。控制器做以下步骤:

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

  • 运行使单机检测图像特征(ExampleHelperSignFollowingProcessImg)。

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

  • ROS网络出版速度控制命令。

蒙面形象化图像机器人看到改变的价值doVisualization变量来真正的

ExampleHelperSignFollowingSetupPreferences;%控制可视化的面具doVisualization = false;r = rateControl (10);收到(imgSub);%等待接收图像信息开始前循环收到(odomSub);(~ controller.done)%得到最新的传感器信息和处理它们imgMsg = imgSub.LatestMessage;odomMsg = odomSub.LatestMessage;[img,构成]= ExampleHelperSignFollowingProcessMsg (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;发送(velPub, velMsg);%选择可视化%注意:可视化数据将减缓执行循环。%如果你有计算机视觉的工具箱,我们推荐使用%的愿景。DeployableVideoPlayer代替imshow。如果doVisualization imshow(面具);标题([“线性韦尔:”num2str (v)“角韦尔:”num2str (w)]);drawnow (“limitrate”);结束%的速度执行循环。等待(r);结束

您应该看到机器人朝着ROS-based机器人模拟器如下所示。

机器人的迹象和停在最后一个停车标志。重置露台后仿真使用/ reset_simulation服务。创建一个ros2svcclient为服务对象和使用调用目标函数调用服务和重置露台模拟场景。

gazeboResetClient = ros2svcclient (n,' / reset_simulation ',“std_srvs /空”);调用(gazeboResetClient);

生成和部署ROS 2节点

验证了控制器后,下一步就是生成活性氧2节点签署后机器人算法使用MATLAB编码器™和部署远程虚拟机运行露台。部署使ROS节点直接运行在远程机器上,执行的速度更快。创建一个使用MATLAB编码器配置对象“机器人操作系统(ROS 2)”硬件。Linux虚拟机的ROS工具箱,远程部署之前设置以下配置参数。请注意,您的远程设备的实际值可能不同。验证之前的部署。设置构建行动”构建运行的这样ROS节点部署代码生成后开始运行。

cfg = coder.config (“exe”);cfg。硬件= coder.hardware (“机器人操作系统(ROS 2)”);cfg.Hardware。DeployTo =“远程设备”;cfg.Hardware。RemoteDeviceAddress =“192.168.192.129”;cfg.Hardware。RemoteDeviceUsername =“用户”;cfg.Hardware。RemoteDevicePassword =“密码”;cfg.Hardware。BuildAction =“构建和运行”;

使用DeploySignFollowingRobotROS2函数包含控制器算法代码在前一节中进行验证。运行以下命令生成活性氧控制器节点和部署。您应该看到机器人在露台的世界。

codegenDeploySignFollowingRobotROS2配置cfg
连接到ROS 2设备“192.168.192.129”。使用“~ / ros2_ws”ROS 2工作区建立ROS 2节点。- - -转移为‘DeploySignFollowingRobotROS2 ROS设备所生成的代码。开始构建ROS节点。- - - ROS 2项目目录:/home/user/ros2_ws/src焦油:忽略未知扩展标题关键字“SCHILY。fflags焦油:忽略未知扩展标题关键字的SCHILY。fflags焦油:忽略未知扩展标题关键字的SCHILY。fflags焦油:忽略未知扩展标题关键字的SCHILY。fflags”开始> > > deploysignfollowingrobotros2完成了< < < deploysignfollowingrobotros2[20.5]总结:1包(20.7秒)- - -完成跑步ROS 2节点。- - -使用“ros2device”对象停止或开始生成的节点。代码生成成功。

机器人的迹象和停在最后一个停车标志。复位后的露台场景节点通过调用执行rossvcclient对象,gazeboResetClient

调用(gazeboResetClient);

重新部署的节点使用ros2device

从MATLAB运行部署ROS节点,创建一个ros2device对象指定deviceAddress,用户名、密码虚拟机运行露台的价值观。这个ROS之间建立一个SSH连接设备和MATLAB。检查可用的节点连接远程设备。验证部署ROS节点,DeploySignFollowingRobotROS2,存在。

gazeboVMDevice = ros2device (“192.168.192.129”,“用户”,“密码”);gazeboVMDevice.AvailableNodes
ans =1×3细胞{' DeploySignFollowingRobotROS2} {gazebo_ros_paths。py’} {' spawn_entity.py '}

运行ROS节点部署在远程设备上使用runNode函数。

runNode (gazeboVMDevice“DeploySignFollowingRobotROS2”)
节点的DeploySignFollowingRobotROS2已经ROS设备上运行。使用“stopNode”函数来阻止它。