• 【ROS】树莓派3B+配合虚拟机ubuntu16.04实现远程小车控制


    文章目录

    前言

    ROS小车上位机控制器是基于树莓派3B或树莓派3B+,虽然树莓派配备了LCD显示屏,可以连接鼠标键盘进行控制操作,但在实际工程中并不能实现,不符合工程原则,通常常使用SSH或VNC Viewer等方式,通过让树莓派和主机端连接同一网段,进行WIFI远程控制的方式实现,在本次我们使用SSH的方式进行远程操控,然后将小车的ROS_IP和主机的ROS_IP设置为同一个,利用ROS的分布式松耦合通讯机制进行话题间的共享,在主机端接收到话题后,使用可视化软件Rviz进行显示和可视化操控。


    硬件列表:

    虚拟机系统:ubuntu16.04

    树莓派:3B+或3B

    激光雷达:思岚科技A1或A2

    电机:普通直流电机+编码器

    里程计:IMU和编码器

    可选:摄像头、RGB-D

    最开始配置需要显示屏、鼠标、键盘连接树莓派


    一、远程控制

    把小车组装好,电池充满电,小车主控接 HDMI显示器、鼠标、键盘,让树莓派连接手机热点,不要连接校园网等公用网络,要连接局域网。使用ifconfig命令查看小车的IP地址:

     电脑端也连接到同一个手机热点,打开虚拟机,在设置中将虚拟机的网络适配器改为桥接模式:

     在虚拟机中使用ifconfig查看虚拟机的IP地址:

     现在两边以及连接到了同一个网段,使用ping命令看两边能不能顺畅通讯:

     

     现在两边通畅,可以在虚拟机中使用ssh方式远程控制树莓派的终端:

    ssh hit@172.20.10.8

    hit是自定义的连接名,后面是树莓派IP

     输入密码后即可进入树莓派端的终端,至此远程连接配置完成。


    二、分布式通讯

    1.修改环境变量

    首先需要修改环境变量,ROS的通讯机制是分布式松耦合通讯,多台电脑可以通过注册到同一个Master节点,共享话题消息,其中只需要修改每台机器的环境变量,让这几台电脑上运行的节点彼此认识即可。

    在ROS的环境变量中,需要在~/.bashrc中设置的并不多,出现频率最高的有三个:ROS_MASTER_URI、ROS_HOSTNAME、ROS_IP
    ROS_MASTER_URI比较好理解,就是整个ROS系统的主机的IP网址。

    ROS_IP和ROS_HOSTNAME是可选的环境变量,用来设置ROS节点或工具的公开网地址。这两个选项是互斥的,如果两者都设置优先使用ROS_HOSTNAME。如果你指定一个IP地址,使用ROS_IP;如果指定一个主机名(a host name),使用ROS_HOSTNAME。当一个ROS成员报告URI给master或者其他成员,这个值就会被用到。这个设置只用在一台计算机有多个地址,需要强制ROS到特定的一个的情况。

    除了’localhost’(本地主机),ROS成员绑定到所有可用的网络接口,他不影响实际绑定地址。如果这个值设定为本地主机,ROS成员只绑定在环回接口。这将会阻止远程成员与本地成员交流。

    说白了,就是HOSTNAME的优先级要比IP的优先级高,设定了hostname就以hostname为准,不在管后面是否还有IP的设置。在配置中我们只要设置HOSTNAME就行了,这个HOSTNAME就是从机节点的身份证,需要让主机认识它。

    大概清楚了这几个概念,我们就可以做以下修改,实现分布式通信:

    主机选择为树莓派,从机选择为虚拟机

    在树莓派端使用以下命令配置环境变量:

    vi ~/.bashrc

     使用下面这条命令使修改立刻生效:

    source ~/.bashrc

     在主机端使用以下命令,修改环境变量:

    gedit ~/.bashrc

     使用下面这条命令使修改立刻生效:

    source ~/.bashrc

    至此分布式通信配置完成,下面进行实验演示 

    2.效果展示

    首先在虚拟机中使用Ctrl+Alt+T打开一个终端,使用ssh进入树莓派端:

    ssh hit@172.20.10.8

    在小车端使用以下命令,启动与STM32通讯的节点,并进行各硬件的初始化:

    roslaunch rikirobot bringup.launch 

    连接成功,初始化结果: 

    在虚拟机端使用以下代码,开启键盘控制节点:

    rosrun teleop_twist_keyboard teleop_twist_keyboard.py

    整个逻辑是:树莓派作为主机端,虚拟机作为从机端,从机注册到主机的ROS_MASTER_URI,就是从机的节点向主机的ROS_MASTER进行注册,然后从机有自己的身份证(网络IP),以便主机端认识它的节点,这样从机和主机之间就能共享话题,从机端的键盘控制节点发布速度指令/cmd_vel,主机端接收到速度指令控制小车进行移动。

    实物效果如下:

     


     

    总结

    本文利用了ROS分布式通讯的优点,利用树莓派3B+配合虚拟机实现了使用SSH的方式远程对小车的控制,更贴近与工业科研领域的ROS使用方法,最后进行了实物演示,验证了该通讯的正确性和便捷性。

  • 相关阅读:
    sql语句报错
    JavaScript数据类型学习脑图
    定义一个Date类,创建两个对象存放两个日期,求两个日期的间隔(单位:天)
    Docker(狂神)
    影视新闻查询易语言代码
    Vue2 基础语法
    王学岗音视频开发(二)—————OpenGLES开发实践
    【K8S系列】深入解析k8s 网络插件—Antrea
    数字化转型如何赋能企业营销?企业数字化营销怎么做?
    【好文鉴赏】优秀的后端应该有哪些开发习惯
  • 原文地址:https://blog.csdn.net/qq_52785580/article/details/125497630