ROS学习8:ROS机器人平台设计

news2025/7/3 3:23:49

【Autolabor初级教程】ROS机器人入门

1. 电机与电机驱动板

1.1 直流减速电机

  • 电机主体通过输入轴与减速箱相连接,通过减速箱的减速效果,最终外端的输出轴会按照比例 (取决于减速箱减速比) 降低电机输入轴的转速,当然速度降低之后,将提升电机的力矩

  • 尾部是 AB 两相霍尔编码器,通过 AB 编码器输出的波形图,可以判断电机的转向以及计算电机转速

在这里插入图片描述

  • 电机主要参数
    • 额定扭矩:额定扭矩和机器人质量以及有效负荷相关,二者正比例相关,额定扭矩越大,可支持的机器人质量以及有效负荷越高;

    • 减速比:电机输入轴与输出轴的减速比例,比如: 减速比为90,意味着电机主体旋转90圈,输出轴旋转1圈。

    • 减速后转速:与减速比相关,是电机减速箱输出轴的转速,单位是 rpm(转/分),减速后转速与减速前转速存在转换关系: 减速后转速 = 减速前转速 / 减速比。另外,可以根据官方给定的额定功率下的减速后转速结合车轮参数来确定小车最大速度。

    • 编码器精度:是指编码器旋转一圈单相 (当前编码器有 AB 两相) 输出的脉冲数

    • 注意:电机输入轴旋转一圈的同时,编码器旋转一圈,如果输出轴旋转一圈,那么编码器的旋转圈数和减速比一致(比如减速比是90,那么输出轴旋转一圈,编码器旋转90圈)
    • 编码器输出的脉冲数计算公式:输出轴旋转一圈产生的脉冲数 = 减速比 * 编码器旋转一圈发送的脉冲数(比如:减速比为90,编码器旋转一圈输出 11 个脉冲,那么输出轴旋转一圈总共产生 11 * 90 也即 990 个脉冲)

1.2 电机驱动板

  • 为什么需要选配合适的电机驱动板?
    • 因为 Arduino 的输出电流不足以直接驱动电机,需要通过电机驱动板放大电机控制信号

2. 电机测速理论

2.1 编码器

  • 编码器(encoder)是将信号(如比特流)或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备
    • 编码器把角位移或直线位移转换成电信号,前者称为码盘,后者称为码尺
    • 按照读出方式编码器可以分为接触式和非接触式两种
    • 按照工作原理编码器可分为增量式和绝对式两类
      • 增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小
      • 绝对式编码器的每一个位置对应一个确定的数字码,因此它的示值只与测量的起始和终止位置有关,而与测量的中间过程无关

2.2 测速原理

  • AB 相增量式编码器测速原理
    • AB 相编码器主要构成为 A 相与 B 相,每一相每转过单位的角度就发出一个脉冲信号(一圈可以发出 N 个脉冲信号),A 相、B 相为相互延迟 1/4 周期的脉冲输出,根据延迟关系可以区别正反转,而且通过取 A 相、B 相的上升和下降沿可以进行单频或 2 倍频或 4 倍频测速
      在这里插入图片描述

3. 电机调速:PID 控制理论

  • 场景:速度信息可以以 m/s 为单位,或者也可以转换成转速 r/s,而电机的转速是由 PWM 脉冲宽度来控制的,如何根据速度信息量化成合适的 PWM 值呢?

    • 比如:现有一辆行驶中的无人车,要求将车速调整至 100KM/h,那么应该如何向电机输出 PWM 值?或换言之,如何控制油门?

    调速实现策略由多种,PID 较为常用

3.1 PID 简介

  • PID 算法是一种经典、简单、高效的动态速度调节方式,P(Proportional) 代表比例,I(Integral) 代表积分,D(Derivative) 代表微分

3.2 PID 公式

在这里插入图片描述

  • e(t) 作为 PID 控制的输入
  • u(t) 作为 PID 控制器的输出和被控对象的输入
  • Kp 控制器的比例系数
  • Ki 控制器的积分时间,也称积分系数
  • Kd 控制器的微分时间,也称微分系数

3.3 PID 控制原理框架图

在这里插入图片描述

3.4 比例 P(Proportional)

在这里插入图片描述

3.5 积分 I(Integral)

在这里插入图片描述

3.6 微分 D(Derivative)

在这里插入图片描述

4. 分布式框架搭建

以树莓派作为主机、PC 作为从机为例

  • 硬件准备:使用显示屏或 HDMI 采集卡连接树莓派并启动

  • 为树莓派连接无线网络
    在这里插入图片描述

  • 为树莓派配置静态 IP
    在这里插入图片描述

  • 配置分布式框架

    • 准备

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

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

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

      • IP 地址查看名:ifconfig
      • 计算机名称查看:hostname
    • 配置主机 IP

      • ~/.bashrc 追加
      export ROS_MASTER_URI=http://主机IP:11311
      export ROS_HOSTNAME=主机IP
      
    • 配置从机 IP

      • ~/.bashrc 追加
      export ROS_MASTER_URI=http://主机IP:11311
      export ROS_HOSTNAME=从机IP
      
    • 测试

      • 主机启动 roscore(必须)
      • 主机启动订阅节点,从机启动发布节点,测试通信是否正常
      • 反向测试,主机启动发布节点,从机启动订阅节点,测试通信是否正常

5. ssh 远程连接

在多处理器的分布式架构中,不同的 ROS 系统之间可能会频繁的涉及到文件的传输,比如:在 PC 端编写 ROS 程序,而最终需要在树莓派上运行,如何将相关目录以及文件从PC上传到树莓派?

  • ssh 是常用手段之一
  • 概念

    • SSH(Secure Shell)是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时,SSH 都会自动对其进行加密。数据到达目的地时,SSH 自动对加密数据进行解密。整个过程都是透明的,使用 OpenSSH 工具将会增进你的系统安全性,且 SSH 安装容易、使用简单
  • 实现

  • SSH 实现架构上分为客户端和服务器端两大部分,客户端是数据的发送方,服务端是数据的接收方,当前场景下,我们需要从PC端发送数据到树莓派,那么PC端属于客户端,而树莓派属于服务端,整个实现具体流程

    • 安装 SSH 客户端与服务端

      默认情况下,Ubuntu 系统已经安装了 SSH 客户端,因此只需要在树莓派安装服务端即可(如果树莓派安装的是服务版的 Ubuntu,默认会安装 SSH 服务并已设置成了开机自启动)

      $  sudo apt install openssh-server
      
      $  sudo apt install openssh-client
      
    • 服务端启动 SSH 服务

      • 树莓派启动 ssh 服务
      $ sudo /etc/init.d/ssh start
      
      • 启动后查看服务是否正常运行
      $ ps -e | grep ssh
      
      • 以后需要频繁的使用ssh登录树莓派,为了简化实现,可以将树莓派的ssh服务设置为开机自启动
      $ sudo systemctl enable ssh
      
    • 客户端远程登陆服务端

      • 登陆树莓派可以调用如下命令
      $ ssh 账号@ip地址
      
      • 如果退出登陆,可以调用exit命令
      $ exit
      
    • 实现数据传输

      • 上传文件
      $ scp 本地文件路径 账号@ip:树莓派路径
      
      • 上传文件夹
      $ scp -r 本地文件夹路径 账号@ip:树莓派路径
      
      • 下载文件
      $scp 账号@ip:树莓派路径 本地文件夹路径
      
      • 下载文件夹
      $ scp -r 账号@ip:树莓派路径 本地文件夹路径
      

6. VScode 远程开发

借助于 ssh 可以远程操作树莓派端,但是也存在诸多不便,比如:编辑文件内容时,需要使用 vim 编辑器,且在一个终端内,无法同时编辑多个文件,本节将介绍一较为实用的功能——VSCode 远程开发,我们可以在 VScode 中以图形化的方式在树莓派上远程开发程序,比 ssh 的使用更方便快捷,可以大大提高程序开发效率

  • 为 VScode 安装远程开发插件
    在这里插入图片描述

  • 配置远程连接

    • 使用快捷键 ctrl + shift + p 打开命令输入窗口,并输入Remote-SSH:Connect to Host…,弹出列表中选择与之同名的选项

    • 上一步完成将弹出一个新的命令窗口,选择下拉列表中的 Add New SSH Host

    • 上一步完成又将弹出一个新的命令窗口,在其中输入:ssh ubuntu@192.168.43.164,其中,ubuntu 需要替换为你的登录账号,192.18.43.164 则替换为你的树莓派的 ip 地址

    • 选择上一步完成后的弹窗列表中的第一个选项(或直接回车),即可完成配置,配置成果后会有提示信息

  • 使用

    • 继续使用快捷键 ctrl + shift + p 打开命令输入窗口,并输入Remote-SSH:Connect to Host…,此时列表中将显示步骤 3 中配置的 ip 地址,直接选择,选择后,VScode 将打开一个新的窗口

      或者,也可以点击侧边栏的远程资源管理器,在弹出的服务器列表中选择要连接的服务器,并右击,选择在本窗口或新窗口中实现远程连接
      在这里插入图片描述

    • 选择菜单栏的文件下的打开文件夹,在弹窗列表中选择需要打开的文件夹并点击确定即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/468117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

effective c++ item35-39

item35:考虑虚函数的替代方案 NVI----Non-Virtual Interface 不使用虚函数接口,子类也可以实现按需求更改实现: The Strategy Pattern via Function Pointers 也可以使用函数指针 或者使用stl::function The “Classic” Strategy Pattern item…

手术麻醉信息管理系统源码,生成规范麻醉文书,自动信息采集

C#手麻系统源码,C# .net 桌面软件 C/S版手术麻醉信息管理系统源码 手术麻醉信息管理系统源码是专门为麻醉科和手术室开发的围手术期临床信息管理系统,具备以下功能: 1.规范手术流程管理:系统整合了手术室、麻醉科的工作及管理流程&#xff…

一则“孔乙己文学”,刺痛了多少学子的心?

个人主页:【😊个人主页】 孔乙已是鲁迅笔下人物,穷困流倒还穿着象征读书人的长衫,迁腐、麻木。最近,大家自我调佩是“当代孔乙己”,学历成为思想负担,找工作时高不成低不就。 文章目录 前言对待…

【C++技能树】再也不怕没有对象了 --初识类

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法…感兴趣就关注我吧!你定不会失望。 目录 0. 初识类1.类的引入**在一个结构体里可以定义函数了:**定义一个Struct的时候再也不用写Struct了. 2.类的定义类的两种定义方式:成员…

05 【Sass语法介绍-插值】

1.前言 在很多编程器语言中都有插值这个概念,在 Sass 样式表的任何地方几乎都可以使用插值,你可以将这些包裹在 #{} 中来使用,所以记住在 Sass 中使用插值的方式是 #{} ,本节我们一起来看一下插值在 Sass 中的使用场景以及它的语…

Authing 入选《2022年度中国高科技高成长企业》榜单

​ 近日,Authing 入选【2022 年度中国高科技高成长企业系列榜单 】- 【云原生高成长企业榜】,该榜单由【第一新声】联合【天眼查】发起的“数字中国”系列之 2022 年度中国高科技高成长企业系列榜单发布,该榜单旨在发现和挖掘被资本市场关注&…

Sentinel介绍及搭建

分布式流量防护 服务雪崩 服务提供者不可用导致服务调用者也跟着不可用,以此类推引起整个链路中的所有微服务都不可用 分布式流量防护 在分布式系统中,服务之间的相互调用会生成分布式流量。如何通过组件进行流量防护,并有效控制流量&…

如何在 Mac 和 Windows 上恢复未保存或删除的 PDF

Adobe Acrobat PDF 是一种常用格式。我们可能会在不同的 PDF 编辑器中编辑和保存 PDF 文件。但是,如果不保存 PDF 文件或不小心将其删除,那将是一种令人不安的体验。 保持冷静!首先,尽可能多地停止运行应用程序,这样它…

( 哈希表) 217. 存在重复元素 ——【Leetcode每日一题】

❓217. 存在重复元素 难度:简单 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true;如果数组中每个元素互不相同,返回 false 。 示例 1: 输入:nums [1,2,3,1] 输出:true…

工作7年的程序员,明白了如何正确的“卷“

背景 近两年,出台和落地的反垄断法,明确指出要防止资本无序扩张。 这也就导致现在的各大互联网公司,不能再去染指其他已有的传统行业,只能专注自己目前存量的这些业务。或者通过技术创新,开辟出新的行业。 但创新这…

go-zore入门,可能看这一篇就行了

本文主要内容 微服务框架对比goctl的安装和使用go-zore的api服务go-zore的rpc服务一探负载均衡的实现方法服务发现使用consul代替etcd实现服务发现中间件的实现相关代码已传送至gitee点击获取代码文中相关连接无跳转请点击查看原文 go微服务框架对比 参考文档 在 Go 语言中&…

AI | 浅谈AI技术以及其今后发展

文章概要 近期AI成为热点话题, GPT, new bing, bard,AI 绘画等 AI 编程工具引发大量讨论。请结合自身学习与工作经历,一起来聊聊你对AI技术以及其今后发展的看法吧。 🌟🌟🌟个人简介…

【VSCode】1、VSCode 如何连接服务器

文章目录 一、安装 remote-ssh 插件二、直接连接三、配置 SSH 公匙,免密登录 一、安装 remote-ssh 插件 点击插件搜索框,搜 remote-ssh,点击安装 安装完成后就会出现下面的图标: 二、直接连接 点击加号,输入 ssh 连接…

Web前端(更新中)

文章目录 什么是WEB前端HTMLHTML的简介运行环境和开发环境标签的语法结构页面的分类 常用标签head中常用标签body中的常用标签,特殊符号,语义化标签 什么是WEB前端 简单来说就是网页,由多种技术参与制作的,向用户展示的页面 技术…

Java 20和IntelliJ IDEA,一起让开发变得更轻松!

IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。 相…

JavaScript 中函数 柯里化风格的运用

导语 当我第一次看见 柯里化 这个词语的时候,我也表现出一脸懵,在代码程序中,看见这种 “高大上”的一些词汇叫法的时候,下意识的会觉得这个概念很难很深奥,但是当冷静下来,去深究过后,就会发现…

Jetson 学习笔记(十六):使用SDK Manager烧录Jetson Nano

SDK Manager 前期准备开始安装 前期准备 安装VMware虚拟机,Ubuntu系统,VMware tools,然后在Ubuntu中安装Nvidia SDK Manager,最后进行烧录。 VMware、Ubuntu系统以及VMware tools:安装链接Nvidia SDK Manager&#x…

ArcGIS Pro数据

目录 1 数据模型 1.1 矢量数据 1.2 栅格数据 1.2.1 栅格数据用途 1.2.2 影像数据地理属性 1.2.3 影像分辨率 1.2.4 栅格波段 2 常用数据格式 2.1 CAD 2.1.1 CAD格式 2.1.2 CAD要素数据集 2.1.3 CAD要素数据集要素类 2.1.4 ArcGIS Pro支持的AutoCAD和MicroStation要…

为什么Web自动化测试需要掌握多种技能?看完就知道了

B站首推!2023最详细自动化测试合集,小白皆可掌握,让测试变得简单、快捷、可靠https://www.bilibili.com/video/BV1ua4y1V7Db 目录 1.编程语言 2.Web开发知识 3.自动化测试框架 4.版本控制系统 5.数据库基础知识 历史进程:…

详解RocketMQ ACL机制的设计实现原理

一、序言 RocketMQ在4.4版本之后为我们提供了ACL权限校验机制,可以实现针对Topic资源级别的用户访问权限控制,ACL的实现能够在一定程度上保证RocketMQ集群数据的安全性。试想一下,如果没有ACL权限校验,在生产环境上只要部署任意的RocketMQ控制台就可以对topic进行操作,存…