ROS的学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


ROS实体机器人

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


仿真实验 到 实体机器人过渡


理论到实物的过度

  • 原本是偏理论的仿真实现。现在是涉及硬件的实体机器人。
  • 学习目标:由仿真到实物的过渡。ROS系统控制
    (1)底盘运动:前进丶后退等
    (2)传感器的使用:雷达丶摄像头

从0到1构建简易机器人平台

  • ROS系统与ROS系统设计复杂且难实现
    (1)ROS系统:电气一体化的系统。
    (2)ROS系统设计:高度集成性系统性的实现。
  • 为了方便ROS的硬件上手,通过制作一个两轮差速机器人来理解ROS
    (1)成本低,简易,可拓展性强的入门级机器人
    (2)还可以从0到1构建属于自己的机器人平台

学习内容和学习目标

学习内容

  • 机器人的组成部分
  • 电机相关知识
  • 开发板驱动电机和多个电机协同工作,实现前后等运动
  • 基于树莓派和anduino的开发板的学习
    (1)底盘使用andruino开发板
    (2)主控采用树莓派开发板
  • 树莓派环境的搭建
  • 传感器的使用
    (1)单个传感器使用:激光雷达丶相机的使用
    (2)多种传感器的协同配合,即ROS上集成使用。

学习目标

  • 无论如何,学会构建属于自己的机器人平台
  • 掌握ROS分布式架构
    (1)ROS主从式通信与主机/从机设备的版本和算法等无关
    (2)两个设备的版本不同,只要符合分布式ROS通信协议,就可通信。

ROS分布式特点:主机和从机不同版本,但符合ROS通信协议也能通信

  • 注意:本课程是ROS主从式分布。
    (1)主机:树莓派
    版本:低版本,melodic。新版本noetic底盘控制的功能包未更新
    (2)从机:个人PC机
    版本:高版本,noetic
    (3)只要符合分布式ROS交互协议,就可通信。

案例演示

ROS组成部分

底盘上面 和 底盘下面

  • 底盘上面:轮子和开发板
    (1)一个电池
    (2)两个开发板 :anduino开发板 电机驱动板
    (3两个电机轮 和 两个万向轮(支撑作用)

在这里插入图片描述


  • 底盘下面:主控和外设
  • 主控:树莓派
  • 外设传感器的使用: 单目激光雷达salam 和 单目摄像头
    在这里插入图片描述

ROS分布式

ROS分布式下,个人PC端获取传感器数据和控制电机运动

  • 个人PC端主控树莓派端 通过ROS分布式下建立的catkin_ws通道进行交互通信
  • ROS分布式通信就是 树莓派板子通过WIFI或串口与PC端通信,并把数据回传到PC端。来自树莓派端的传感器数据被PC端处理,并利用坐标系图等形式展示出来。
  • 主控树莓派端

树莓派主控端,启动ROS底盘和各种传感器外设

(1)先进入catkin_ws交互通道
(2)再通过mycar_start功能包,启动ROS底盘和各种传感器外设

   $ source ./devel/setup.bash
   $ roslaunch mycar_start start.launch

在这里插入图片描述


PC端:获取传感器数据和控制树莓派端的外设

(1)首先进入ROS分布式 $ rviz
在这里插入图片描述

(2)添加odom坐标系和ROS模型:By topic是一步到位,无需再次改动topic
在这里插入图片描述

(3)在坐标系和模型下,Add传感器的数据


PC端:建系,建模,展示传感器数据

建odom系,添加ROS模型

  • 建系
    在这里插入图片描述

  • 添加模型
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


Add拿到传感器数据
(1)获取里程数数据
在这里插入图片描述
在这里插入图片描述


(2)添加激光雷达salam数据
在这里插入图片描述
在这里插入图片描述

(3) 添加单目摄像头数据

在这里插入图片描述
PC端控制树莓派外设的运动

  • 先设置线速度和角速度
  • 再通过键盘控制运动:左转,右转等
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py _speed:0.1 _turn:=0.2

在PC端,通过键盘控制主控树莓派端的外设运动
在这里插入图片描述


右转:
在这里插入图片描述

后退:
在这里插入图片描述

测速原理

编码电机

编码器的定义和分类

  • 编码器的定义
    (1)一个设备。
    (2)作用:信号通过 编码器 变成 电信号(信号传递,存储的一种方式)
    (3)角位移---->电信号 是码盘。 线位移—>电信号 是码尺。
  • 编码器分类
    (1)读出方式角度:接触式和非接触式。
    (2)工作原理角度:增量式和绝对式(一步到位,直接读出结果)。

增量式编码电机:霍尔电机

  • 得到的不是位移大小,而是对应的脉冲个数。位移转化成周期性电信号,电信号再转变成计数脉冲。故统计周期数(脉冲的个数)相当于位移的大小
  • 周期个数越多(脉冲个数越多),位移量越大。

绝对式编码电机:伺服电机

  • 无中间过程。直接读出对应的结果数据。类似一个钟表,某个位置对应某个值

增量式电机测速原理

角速度=圈数(由统计脉冲的个数计算出)/时间

  • 电机转动一定的角度会产生一个脉冲信号。每一圈会产生固定的脉冲数。

不同的增量式电机,参数标准不同
霍尔电机规律性产生方波|脉冲(低电平+高电平)。
(1)A相和B相一圈输出固定的脉冲数
(2)A相和B相产生脉冲的时间 间隔是 1/4T,B相延迟或者提前绝定了电机的正转和翻转


正转和反转

  • 正转 B相提前时间间隔在这里插入图片描述

  • 反转 B相推迟时间间隔
    在这里插入图片描述

脉冲计数的理论

角速度 = 圈数 / 时间

  • 圈数 与 周期脉冲的个数有关。
  • 一个脉冲 就是 高电平+低电平(两次突变,也称两个事件上升沿事件下降沿事件
    (1)一圈输出 固定个数的脉冲。
    (2)圈数 = 总脉冲数/每圈产生的脉冲个数。(单倍频下,其他1/M.M是频数)

单相,只能得到速度大小

  • 正转时的A相和反转时的A相,通过Count统计的结果都是一样的,无法区分角速度的方向性
    在这里插入图片描述

A相和B相配合,到速度大小和方向

  • 一个事件 = 一个上升沿 或者 一个下降沿。
  • 得到速度方向方法:A相上升沿时(或下降沿),检测B相的电平。高电平时,Count++.。低电平时,Count- -。

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值