提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
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- -。