首页 > 其他分享 >控制系统实现_分布式框架

控制系统实现_分布式框架

时间:2024-08-04 10:07:05浏览次数:13  
标签:树莓 框架 rosnoetic 主机 控制系统 192.168 从机 64 分布式

控制系统实现_分布式框架

参考教程:
http://www.autolabor.com.cn/book/ROSTutorials/
https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?spm_id_from=333.999.0.0

1. 配置静态IP地址

1.1 配置树莓派静态IP地址

当前分布式框架搭建时,树莓派是作为主机,而PC则作为从机,关于分布式框架的搭建流程,我们需要为树莓派连接无线网络,并设置固定IP,实现如下:

  1. 硬件准备:使用显示屏或HDMI才即可连接树莓派并启动;
  2. 为树莓派连接无线网络;
  3. 为树莓派配置静态IP,具体操作如图:

点击桌面右上角的wifi图标,选择编辑连接,得到如下图所示

查看相应的IP地址

ubuntu@ubuntu:~$ ifconfig
eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether e4:5f:01:fb:b5:4b  txqueuelen 1000  (以太网)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (本地环回)
        RX packets 5533  bytes 580598 (580.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5533  bytes 580598 (580.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.167  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::e65f:1ff:fefb:b54c  prefixlen 64  scopeid 0x20<link>
        ether e4:5f:01:fb:b5:4c  txqueuelen 1000  (以太网)
        RX packets 240095  bytes 333868254 (333.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 76135  bytes 10300744 (10.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

1.2 配置虚拟机静态IP地址

配置虚拟机静态IP地址和树莓派操作类似

在详细信息(Details)下查看当前ip地址,记录好后,选择IPV4

2. 实现

2.1 准备

先要保证不同计算机处于同一网络中,最好分别设置固定IP,如果为虚拟机,需要将网络适配器改为桥接模式;

查看虚拟机的主机名

rosnoetic@rosnoetic-VirtualBox:~$ hostname
rosnoetic-VirtualBox

查看虚拟机中的ip地址

rosnoetic@rosnoetic-VirtualBox:~$ ifconfig

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.66  netmask 255.255.255.0  broadcast 192.168.43.255
        inet6 fe80::985f:4b7c:e4e0:f0f0  prefixlen 64  scopeid 0x20<link>
        inet6 2409:8920:e11:138b:d275:2010:df26:71a  prefixlen 64  scopeid 0x0<global>
        inet6 2409:8920:e11:138b:b52e:3d49:f833:41ca  prefixlen 64  scopeid 0x0<global>
        ether 08:00:27:3e:6d:01  txqueuelen 1000  (以太网)
        RX packets 223  bytes 223428 (223.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 263  bytes 26888 (26.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (本地环回)
        RX packets 183  bytes 15201 (15.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 183  bytes 15201 (15.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

可以看到虚拟机的IP地址为192.168.43.66

然后ping一下树莓派,树莓派的IP是192.168.43.192,查看是否连通

rosnoetic@rosnoetic-VirtualBox:~$ ping 192.168.43.192
PING 192.168.43.192 (192.168.43.192) 56(84) bytes of data.
64 字节,来自 192.168.43.192: icmp_seq=1 ttl=64 时间=16.4 毫秒
64 字节,来自 192.168.43.192: icmp_seq=2 ttl=64 时间=9.57 毫秒
64 字节,来自 192.168.43.192: icmp_seq=3 ttl=64 时间=8.32 毫秒
64 字节,来自 192.168.43.192: icmp_seq=4 ttl=64 时间=7.16 毫秒
64 字节,来自 192.168.43.192: icmp_seq=5 ttl=64 时间=6.92 毫秒

2.2 配置文件修改

分别修改不同计算机的/etc/hosts文件,在该文件中加入对方的IP地址和计算机名:

主要注意的是,在这里

树莓派是主机端,

虚拟机是从机端

  • 主机端(树莓派):

    从机的IP    从机计算机
    

    打开/etc/hosts

    ubuntu@ubuntu:~$ sudo gedit /etc/hosts
    
    192.168.0.126 rosnoetic-VirtualBox
    

  • 从机端(虚拟机)

    主机的IP    主机计算机名
    

    打开/etc/hosts

    rosnoetic@rosnoetic-VirtualBox:~$ sudo gedit /etc/hosts
    

设置完毕,可以通过ping命令测试网络通信是否正常。

IP地址查看命令:ifconfig
计算机名称查看:hostname

2.3 配置主机(树莓派)IP

配置主机的IP地址

~/.bashrc 追加

export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=主机IP

例如:

ubuntu@ubuntu:~$ gedit .bashrc

export ROS_MASTER_URI=http://192.168.0.166:11311
export ROS_HOSTNAME=192.168.0.166

修改完成后需要更新一下环境变量,也可以把命令行终端关掉重新开一个

ubuntu@ubuntu:~$ source .bashrc

2.4 配置从机(虚拟机)IP

配置从机的IP地址,从机可以有多台,每台都做如下设置:

~/.bashrc 追加,注意ROS_HOSTNAME当前为从机

export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=从机IP

例如:

rosnoetic@rosnoetic-VirtualBox:~$ sudo gedit .bashrc

export ROS_MASTER_URI=http://192.168.43.192:11311
export ROS_HOSTNAME=192.168.43.66

重新刷新环境变量,或者重新启动命令行

rosnoetic@rosnoetic-VirtualBox:~$ source .bashrc

3. 测试

3.1 主机启动ros核心

主机启动 roscore(必须)

在树莓派(主机端)输入roscore,启动ros核心

3.2 主机订阅,从机发布

主机启动订阅节点,从机启动发布节点,测试通信是否正常

进入到树莓派(主机端),输入如下指令,启动小乌龟节点

ubuntu@ubuntu:~$ rosrun turtlesim turtlesim_node

进入到虚拟机(从机端),启动键盘控制节点,在虚拟机中按上下左右运动一下,可以看到小乌龟运动起来了,说明分布式搭建成功

rosnoetic@rosnoetic-VirtualBox:~$ rosrun turtlesim turtle_teleop_key

3.3 反向测试

反向测试,主机启动发布节点,从机启动订阅节点,测试通信是否正常在从机端中输入如下指令,启动小乌龟节点

rosnoetic@rosnoetic-VirtualBox:~$ rosrun turtlesim turtlesim_node

在主机端中输入如下指令,启动键盘控制节点

ubuntu@ubuntu:~$ rosrun turtlesim turtle_teleop_key

移动一下小乌龟,即可看到小乌龟运动起来了

从中我们可以看到主机端和从机端的双向通信均是成功的

4. 注意事项

  • ROS从机程序的运行依赖于ROS主机的ROS Master,从机运行程序时需要先在主机启动ROS Master,再在从机中执行动作。
  • 多机通信里的主从机ip地址需要处于同一个网段,即ip地址和子网掩码为相同的网络地址。
  • 环境配置文件.bashrc中的ROS_HOSTNAME不建议使用localhost,建议使用具体的ip地址。
  • 在从机ip地址没有设置正确的情况下,它依然可以访问到Rosmaster,但不能输入控制信息。
  • 如果是虚拟机参与多机通信,其网络模式需要设置成桥接模式,并且网络连接不能选“Static IP”。
  • 多机通信无法查看或订阅本地不存在的消息数据类型话题。

标签:树莓,框架,rosnoetic,主机,控制系统,192.168,从机,64,分布式
From: https://www.cnblogs.com/windandchimes/p/18341483

相关文章

  • 推荐一个基于 Spring boot 的后台管理框架,前后端分离,可快速开发OA、CMS网站后台管理,简
    前言在当前的软件开发领域,后台管理系统的需求量巨大,但许多团队在开发过程中面临诸多挑战。常见的痛点包括开发效率低下、系统不够灵活、缺乏统一的异常处理和日志记录,以及难以实现的权限控制等。此外,许多项目在技术选型上存在局限性,导致难以适应多变的业务需求。针对这些现状,......
  • Unittest框架的介绍及使用
    介绍基本概念​ unittest是Python自带的一个单元测试框架,它可以做单元测试,也能用于编写和运行重复的测试工作。它给自动化测试用例开发和执行提供了丰富的断言方法,判断测试用例是否通过,并最终生成测试结果.四大组件testcase:就是我们的测试用例,unittest中提供了一个......
  • go-zero 微服务框架集成 gorm 实操
    目录1.config的结构体2.配置文件声明3.添加svcContext4.定义你的相关表或者模型作为服务,肯定要和数据库交互的,所以在go-zero框架里集成数据库的操作是必不可少的,今天看看go-zero的rpc应用如何集成gorm框架。总体的思路分这几步:定义你的配置项结构体定义你的配置......
  • 【Android驱动07】Sensor传感器框架以及驱动移植和调试方法(Hal层部分)
    一,Androidsensor系统架构Hal就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节。也就是说,把对硬件的支持分成了两层,一层放在用户空间(UserSpace),一层放在内核空间(KernelSpace),其中,硬件抽象层运行在用户空间,而Linux内核驱动程序运行在内核空间。二,HAL层Sen......
  • 国内如何安装Laravel框架
    上下文几天前在安装Laravel11时遇到了一个问题,如下为Composer的输出信息:Problem1-laravel/laravel[v11.1.0,...,v11.1.1]requirelaravel/framework^11.9->satisfiablebylaravel/framework[v11.9.0,v11.9.1,v11.9.2].-laravel/laravel[v11.0.0,...,v1......
  • Python框架-FastAPI
    FastAPI是一个现代、快速(高性能)的web框架,用于构建API。官网:https://fastapi.tiangolo.com/源码:https://github.com/fastapi/fastapi安装#安装FastAPIpipinstallfastapi#安装Uvicorn(用于运行ASGI服务器)pipinstalluvicorn创建一个main.pyfromfastapiimpor......
  • 科普文:万字细说微服务及其框架Netflix,Spring Cloud,Spring Cloud Alibaba梳理
    概叙微服务(Microservices)是一种软件架构风格,它将单一的应用程序拆分为多个小的服务,每个服务都是独立运行和部署的。每个微服务通常只专注于一个业务功能,具有自己的数据存储,并且通过轻量级的通信机制(如HTTP或消息队列)与其他服务进行交互。微服务发展到现在,不仅仅只是服务治理,......
  • 定制直播软件,分布式锁的演进你了解多少?
    定制直播软件,分布式锁的演进你了解多少?分布式锁的演进基本原理我们可以同时去一个地方“占坑”,如果占到,就执行逻辑。否则就必须等待,直到释放锁。“占坑”可以去redis,可以去数据库,可以去任何大家都能访问的地方。等待可以自旋的方式。阶段一 publicMap<String,L......
  • 基于强化学习的倒立摆平衡车控制系统simulink建模与仿真
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印):      2.算法涉及理论知识概要       基于强化学习的倒立摆平衡车控制系统是一个典型的动态系统控制问题,它通过不断的学习和决策过程,使倒立摆维持在垂直平衡位置,即使受到外力干扰或系统内部噪......
  • 【讲解下Web前端三大主流的框架】
    ......