21、机器人搭建与模拟库使用指南

机器人搭建与模拟库使用指南

1. 推物机器人的搭建

推物机器人能够借助直流电机沿着轨道前后移动,利用摄像头寻找带有匹配二维码的物体,一旦找到,就可以通过连接在舵机上的机械臂将物品从台子上推下。以下是搭建该机器人的具体步骤:
1. 完成移动机器人配置 :先完成移动机器人的配置,然后将 Pibow 外壳从机器人底盘上拆卸下来。
2. 安装云台套件
- 裁剪一块纸板,将其固定在底盘上,再使用胶水或双面泡沫胶带把云台套件(Pan - Tilt Kit)安装到纸板上。也可以用短尺子代替纸板。
- 要把云台套件安装在树莓派没有端口的那一侧,这样安装摄像头和舵机就不会挡住端口。
3. 安装摄像头
- 像之前一样,通过对齐魔术贴方块,将 Pibow 外壳重新安装到机器人底盘上。
- 在 Pibow 外壳侧面粘贴一些魔术贴方块,以便将摄像头安装到机器人侧面。
- 把摄像头安装到机器人侧面,安装后摄像头外壳会放置在机器人底盘上,摄像头的排线从顶部引出,这会使拍摄的视频上下颠倒,但可以在软件中通过翻转图像来解决。
4. 制作舵机臂
- 使用云台套件的倾斜舵机作为推动物体的舵机,利用套件上的安装支架的侧片和插槽来固定一个机械臂,以扩大舵机的作用范围。
- 可以用铅笔作为机械臂,将橡皮擦一端朝下,用两个扎带固定铅笔,一个扎带在侧片上方,一个在下方,确保扎带拧紧。

以下是搭建流程的 mermaid 流程图:

graph LR
    A[完成移动机器人配置] --> B[拆卸 Pibow 外壳]
    B --> C[裁剪纸板并安装云台套件]
    C --> D[重新安装 Pibow 外壳]
    D --> E[粘贴魔术贴方块]
    E --> F[安装摄像头]
    F --> G[制作舵机臂]
2. 推物机器人轨道的创建

推物机器人需要在轨道上前后移动,我们可以用两根棍子或杆子来创建轨道,并在轨道两端放置书籍以固定轨道。具体步骤如下:
1. 放置轨道材料 :取两根棍子或杆子,将它们平行放置在桌子上。
2. 调整轨道间距 :让两根棍子之间的距离尽可能靠近,刚好能贴合机器人的轮胎。同时,将机器人要推的物品沿着桌子边缘放置,使二维码朝向机器人。
3. 固定轨道 :在轨道两端放置一些书籍,确保轨道在机器人移动时不会移位。
4. 设置标记 :在轨道起点放置起始标记,在轨道末端放置结束标记。

3. 零食盒的设置

零食盒可以是任何带有所需二维码的容器或包装,二维码应贴在容器正面,尺寸建议为宽和高均为 6 厘米,以便摄像头能轻松读取。二维码要面向机器人,测试表明摄像头与二维码之间保持 8 厘米的距离效果较好。

4. 模拟 CRICKIT 库的安装与使用

模拟 Adafruit Python CRICKIT 库在测试软件时非常有用,它能让我们在没有机器人硬件的情况下运行代码,还能在非树莓派的 Linux 系统上执行代码,提供更好的编码体验。

4.1 安装模拟库

将以下脚本保存为 adafruit_crickit.py 文件:

#!/usr/bin/env python3
import os
from unittest.mock import Mock, PropertyMock
from functools import partial
DEBUG = bool(os.environ.get('ROBO_DEBUG'))
PROP_VALUES = {'touch_1.value': True}
def print_msg(msg):
    if DEBUG:
        print('MOCK_CRICKIT:', msg)
def prop_access(name, *args):
    action = 'set' if args else 'get'
    if action == 'set':
        PROP_VALUES[name] = args[0]
    val = PROP_VALUES.get(name)
    print_msg(f'{action} crickit.{name}: {val!r}')
    return val
def pixel_fill(val):
    print_msg(f'call crickit.onboard_pixel.fill({val!r})')
def add_property(name):
    parent, child = name.split('.')
    property_mock = PropertyMock(side_effect=partial(prop_access, name))
    setattr(type(getattr(crickit, parent)), child, property_mock)
crickit = Mock()
crickit.onboard_pixel.fill = Mock(side_effect=pixel_fill)
names = [
    'onboard_pixel.brightness', 'touch_1.value', 'dc_motor_1.throttle',
    'dc_motor_2.throttle', 'servo_1.angle', 'servo_2.angle',
    'servo_1.actuation_range', 'servo_2.actuation_range']
for name in names:
    add_property(name)
def demo():
    print('starting mock_crickit demo...')
    crickit.onboard_pixel.brightness = 0.01
    crickit.onboard_pixel.fill(0xFF0000)
    crickit.touch_1.value
    crickit.dc_motor_1.throttle = 1
    crickit.dc_motor_2.throttle = -1
    crickit.servo_1.angle = 70
    crickit.servo_1.angle
    crickit.servo_2.angle = 90
    crickit.servo_2.angle
    crickit.servo_1.actuation_range = 142
    crickit.servo_2.actuation_range = 180
if __name__ == "__main__":
    demo()
4.2 运行模拟库示例

设置环境变量并运行脚本:

$ export ROBO_DEBUG=1
$ ./adafruit_crickit.py

输出示例:

starting mock_crickit demo...
MOCK_CRICKIT: set crickit.onboard_pixel.brightness: 0.01
MOCK_CRICKIT: call crickit.onboard_pixel.fill(16711680)
MOCK_CRICKIT: get crickit.touch_1.value: True
MOCK_CRICKIT: set crickit.dc_motor_1.throttle: 1
MOCK_CRICKIT: set crickit.dc_motor_2.throttle: -1
MOCK_CRICKIT: set crickit.servo_1.angle: 70
MOCK_CRICKIT: get crickit.servo_1.angle: 70
MOCK_CRICKIT: set crickit.servo_2.angle: 90
MOCK_CRICKIT: get crickit.servo_2.angle: 90
MOCK_CRICKIT: set crickit.servo_1.actuation_range: 142
MOCK_CRICKIT: set crickit.servo_2.actuation_range: 180
4.3 安装到 Python 虚拟环境

可以将模拟库安装到任意 Python 虚拟环境中,代码和安装程序可在 GitHub(https://github.com/marwano/robo)上找到。在包含 setup.py 脚本的目录下运行以下命令:

(main) robo@robopi:/tmp$ cd mock_crickit
(main) robo@robopi:/tmp/mock_crickit$ pip install .

安装完成后,运行 pip list 可以查看已安装的包:

(main) robo@robopi:/tmp/mock_crickit$ pip list
Package      Version
------------ -------
mock-crickit 1.0
pip          23.1.2
setuptools   59.6.0
4.4 验证模拟库功能

使用以下命令调用 demo 函数来验证库是否正常工作:

(main) robo@robopi:~$ python -m adafruit_crickit

通过使用这个模拟库,项目可以在多种硬件上运行,例如 Linux 系统的笔记本电脑或台式机可以使用附录中提到的操纵杆硬件,任何标准网络摄像头都可以替代树莓派摄像头模块,且无需修改代码,就能实现人脸和二维码检测的计算机视觉功能。

以下是模拟库安装与使用的步骤表格:
| 步骤 | 操作 | 命令示例 |
| ---- | ---- | ---- |
| 1 | 保存脚本 | 将代码保存为 adafruit_crickit.py |
| 2 | 运行示例 | export ROBO_DEBUG=1; ./adafruit_crickit.py |
| 3 | 安装到虚拟环境 | cd mock_crickit; pip install . |
| 4 | 查看安装包 | pip list |
| 5 | 验证功能 | python -m adafruit_crickit |

5. 相关代码与功能索引

在整个机器人搭建与模拟库使用的过程中,涉及到了众多的代码和功能,下面对一些关键的代码和功能进行索引说明。

代码/功能 说明
backward function 控制机器人向后移动的函数
forward function 控制机器人向前移动的函数
detect_face function 用于人脸检测的函数
decode_qr function 用于二维码解码的函数
call_api function 调用 API 的函数
call_robot function 调用机器人相关操作的函数

以下是部分代码功能的 mermaid 流程图,展示了人脸检测和二维码解码的大致流程:

graph LR
    A[开始] --> B[读取图像]
    B --> C{是否为人脸检测}
    C -- 是 --> D[调用 detect_face function]
    D --> E[标记人脸]
    E --> F[输出结果]
    C -- 否 --> G{是否为二维码解码}
    G -- 是 --> H[调用 decode_qr function]
    H --> I[获取解码数据]
    I --> F
    G -- 否 --> J[其他操作]
    J --> F
6. 硬件相关信息

在搭建机器人的过程中,硬件的选择和配置至关重要。以下是一些硬件的相关信息:

硬件名称 说明
Adafruit CRICKIT HAT 用于树莓派的扩展板,可控制电机、舵机等
Anker PowerCore Select 10000 电源银行 为机器人提供电源
电机和底盘套件 构成机器人的移动基础
操纵杆控制器 用于手动控制机器人
7. 常见问题与解决方法

在机器人搭建和模拟库使用过程中,可能会遇到一些常见问题,下面为大家列举并给出解决方法。

问题 解决方法
摄像头拍摄的视频上下颠倒 在软件中通过翻转图像来解决,例如在视频捕获时进行图像翻转操作
模拟库安装失败 检查网络连接,确保在包含 setup.py 脚本的目录下运行 pip install . 命令,也可以查看 GitHub 上的项目说明获取更多帮助
机器人移动异常 检查电机连接是否正常,检查代码中控制电机的参数是否正确
8. 总结

通过以上的步骤和说明,我们完成了推物机器人的搭建、轨道的创建、零食盒的设置,并且学会了如何安装和使用模拟 CRICKIT 库。在搭建过程中,我们需要注意硬件的安装和连接,确保各个部件正常工作。在使用模拟库时,要按照正确的步骤进行安装和验证,以便在没有实际机器人硬件的情况下也能进行代码的测试和开发。

整个过程涉及到了机器人控制、计算机视觉、软件模拟等多个领域的知识和技术,希望大家能够通过这些内容,更好地理解和掌握机器人搭建和开发的相关技能。同时,在实际操作中遇到问题时,可以参考前面提到的常见问题解决方法,或者进一步查阅相关资料进行解决。

以下是整个机器人搭建与模拟库使用的整体步骤列表:
1. 推物机器人的搭建
- 完成移动机器人配置
- 安装云台套件
- 安装摄像头
- 制作舵机臂
2. 推物机器人轨道的创建
- 放置轨道材料
- 调整轨道间距
- 固定轨道
- 设置标记
3. 零食盒的设置
- 准备带二维码的容器
- 调整二维码尺寸和朝向
4. 模拟 CRICKIT 库的安装与使用
- 保存脚本
- 运行示例
- 安装到虚拟环境
- 查看安装包
- 验证功能

通过遵循这些步骤,你可以顺利地完成机器人的搭建和模拟库的使用,开启机器人开发的新旅程。

跟网型逆变器小干扰稳定性分析控制策略优化研究(Simulink仿真实现)内容概要:本文围绕跟网型逆变器的小干扰稳定性展开分析,重点研究其在电力系统中的动态响应特性及控制策略优化问题。通过构建基于Simulink的仿真模型,对逆变器在不同工况下的小信号稳定性进行建模分析,识别系统可能存在的振荡风险,并提出相应的控制优化方法以提升系统稳定性和动态性能。研究内容涵盖数学建模、稳定性判据分析、控制器设计参数优化,并结合仿真验证所提策略的有效性,为新能源并网系统的稳定运行提供理论支持和技术参考。; 适合人群:具备电力电子、自动控制或电力系统相关背景,熟悉Matlab/Simulink仿真工具,从事新能源并网、微电网或电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 分析跟网型逆变器在弱电网条件下的小干扰稳定性问题;② 设计并优化逆变器外环内环控制器以提升系统阻尼特性;③ 利用Simulink搭建仿真模型验证理论分析控制策略的有效性;④ 支持科研论文撰写、课题研究或工程项目中的稳定性评估改进。; 阅读建议:建议读者结合文中提供的Simulink仿真模型,深入理解状态空间建模、特征值分析及控制器设计过程,重点关注控制参数变化对系统极点分布的影响,并通过动手仿真加深对小干扰稳定性机理的认识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值