阿里云 wordpress建站,铜仁网站优化,网页制作公司文案,wordpress 仪表板主题智能机器人的功能繁多#xff0c;全都放在一个计算机里#xff0c;经常会遇到计算能力不够、处理出现卡顿等情况#xff0c;如果可以将这些任务拆解#xff0c;分配到多个计算机中运行岂不是可以减轻压力#xff1f; 这就是分布式系统#xff0c;可以实现多计算平台上的任… 智能机器人的功能繁多全都放在一个计算机里经常会遇到计算能力不够、处理出现卡顿等情况如果可以将这些任务拆解分配到多个计算机中运行岂不是可以减轻压力 这就是分布式系统可以实现多计算平台上的任务分配。
分布式通信
什么叫分布式
之前我们也讲过在ROS系统中机器人功能是由各种节点组成的这些节点可能位于不同的计算机中。
这种结构可以将原本资源消耗较多的任务分配到不同的平台上减轻计算压力这就是分布式通信框架的典型应用之一。 比如这款机器人系统中有两个计算平台。
机器人体积比较小不适合放一个笔记本电脑在上边于是采用树莓派作为控制器主要实现传感器驱动和电机控制等功能。
不过视觉处理和应用功能就不适合在树莓派里运行了我们放在另外一个性能更强的笔记本电脑中。
此外我们还需要在电脑上监控机器人的传感器信息并且远程控制机器人运动。
两个电脑之间的通信看上去还有点复杂毕竟相互传输的数据还挺多的。
不过ROS系统都已经为我们设计好了我们只需要在每一个电脑上配置好ROS环境功能开发上完全不需要做任何变化实现非常方便。
接下来我们就带领大家一起来感受下ROS分布式系统的魅力。
分布式网络搭建
除了我使用的笔记本电脑之外另外一个计算平台我们选择了树莓派模拟一个放置在机器人上的控制器。
树莓派配置
在开发之前我们需要先配置好树莓派的环境网上也有很多资料大家都可以参考。
装系统
我们先要给树莓派装系统这里我们选择的是Ubuntu Mate针对树莓派的镜像下载镜像之后烧写到树莓派的SD卡中就可以启动系统了。
Ubuntu MATE镜像下载链接
https://ubuntu-mate.org/download/ 安装ROS2
在安装好的Ubuntu Mate系统中安装ROS2和电脑端安装的流程一样。 编译代码
将我们课程的代码也下载到树莓派中进行编译。 远程桌面
如果大家有显示器可以直接在树莓派上连接键盘鼠标显示器使用如果使用不方便的话。
也可以在树莓派上配置好远程桌面就可以通过网络访问树莓派的桌面系统了。 以上步骤的整体流程和电脑端操作基本一致大家也可以参考如下链接配置树莓派
https://blog.csdn.net/qq_52785580/article/details/122599728
分布式数据传输
树莓派配置完成后确保已经和你所使用的电脑连接到了同一个局域网络中。接下来我们打通两个计算平台的通信能力。具体需要做什么呢
简而言之什么都不需要做。我们直接用命令行测试一下话题通信的效果。
Attention
如使用虚拟机请将虚拟机网络修改为桥接模式
在树莓派端使用如下命令启动一个发布者节点
ros2 run demo_nodes_cpp talker #树莓派端图片
接下来在电脑端使用如下命令启动一个订阅者节点
ros2 run demo_nodes_py listener #PC端神奇的事情就这样发生了只要两个计算机安装好ROS2并且处于同一网络中。
他们就可以实现之前讲过的话题、服务、动作等通信了感觉就像在一个电脑里一样。
不过这也会带来一个问题如果一个网络中有很多个计算机我们并不希望他们都可以互通互联。
而是可以分组通信小组之间是无法实现通信的。
分布式网络分组
没问题ROS2提供了一个DOMAIN的机制就类似分组一样。
处于同一个DOMAIN中的计算机才能通信我们可以在电脑和树莓派端的.bashrc中加入这样一句配置即可将两者分配到一个小组中
export ROS_DOMAIN_IDlt;your_domain_idgt;如果分配的ID不同则两者无法实现通信。
案例一小海龟分布式控制
分布式通信网络似乎已经建立成功了是否真有我们想的这么神奇我们继续测试之前学习过的一些例程。
先来试试ROS中的经典案例——小海龟。
我们可以在电脑端启动小海龟仿真器树莓派上启动键盘控制节点或者反过来也可以依然可以流畅的控制小海龟运动 ros2 run turtlesim turtlesim_node # PC端$ ros2 run turtlesim turtle_teleop_key # 树莓派端案例二话题分布式通信
我们之前编写的例程是否可以在不修改任何代码的情况下直接使用呢 先试试话题通信树莓派作为发布者发布Hello World字符串电脑作为订阅者订阅Hello World字符串
ros2 run learning_topic topic_helloworld_pub # 树莓派端$ ros2 run learning_topic topic_helloworld_sub # PC端案例三服务分布式通信
话题没有问题服务也不在话下。 我们电脑端运行服务器程序树莓派端运行客户端程序还是可以顺利实现加法求和功能
ros2 run learning_service service_adder_server # PC端$ ros2 run learning_service service_adder_client 2 3 # 树莓派端案例四机器视觉分布式应用
以上这些功能还不够复杂没问题视觉识别的例程安排上。 接下来我们将使用树莓派连接摄像头模拟一个小型机器人可以采集实时图像。
然后再通过分布式网络将图像发给电脑端的处理节点识别图像中的红色物体
ros2 run usb_cam usb_cam_node_exe # 树莓派端$ ros2 run learning_topic topic_webcam_sub # PC端没有任何问题视觉识别的效果如下。 好啦我们在分布式网络中测试了ROS一系列例程都没有任何问题在实际的机器人开发中。
类似的方法会频繁用到ROS为分布式网络的搭建提供了非常友好的支持我们几乎不需要任何配置代码也不需要做任何修改。
只要使用ROS系统一切都会变得如此轻松。
参考链接
https://docs.ros.org/en/humble/Concepts/About-Domain-ID.html