亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

自主家庭助理机器人

组件和用品

Arduino UNO
× 1
Arduino Braccio 机械臂
× 1
Odroid XU4
× 1
SparkFun EasyDriver - 步进电机驱动器
× 1
步进电机
× 1
L298 电机驱动器
× 1
直流电机(通用)
× 4
GY-85 IMU
× 1
麦克纳姆轮
× 1
5V USB 集线器
× 1
微软 Kinect 传感器
× 1
OpenBuilds V 型槽直线导轨
× 2
OpenBuilds V 形槽龙门板
× 1
OpenBuilds Solid V Wheel Kit
× 4
0.8 m Acme 丝杠
× 1
6mm 至 8mm 轴耦合器
× 1
8 毫米轴承支架
× 1
1.2 m 弹簧线
× 1
限位开关
× 1
5V BEC
× 1
可变 DC-DC 转换器
× 2
12 V 可充电电池 5000 mAh
× 1

应用和在线服务

亚马逊 Alexa Alexa 技能套件
亚马逊网络服务 AWS Lambda
ROS 机器人操作系统
PubNub 发布/订阅 API

关于这个项目

一、简介

认识奥九!个人家庭机器人伴侣,可以四处走动、捡起物品并照顾您的房屋。多亏了 Alexa,O'nine 可以听到您的声音并执行可编程的任务,例如喂鱼。

该项目希望通过提供一个可扩展和开放的机器人平台来扩展 Alexa 的能力,该平台可以在智能家居环境中执行动态任务。当前的智能家居解决方案需要专门为特定功能设计的定制钻机。 O'nine 旨在通过最小化这些硬件要求并使用机器人作为替代方案来弥合这一差距。这个想法是创建一个技术验证平台来测试使用机器人作为家庭自动化系统的另一个组件的可行性和可行性。希望我们可以回答“使用机器人关闭空调设备而不是在每个房间安装微控制器来控制每个空调设备是否有意义? " 因为以前的静态解决方案现在可以在机器人的帮助下移动。

这是奥九喂我的鱼的视频。

TL;DW(延时视频)

全长视频。

您想检查您的宝宝或谁在门口? O'nine 有一个内置相机,所以你也可以要求它拍照。

本教程将引导您了解如何构建机器人以及如何创建可以命令机器人执行自主任务的 Alexa 技能。

2. 高层架构

总之,O'nine - Alexa 集成的工作原理如下:

1. Amazon Echo Dot 听语音指令。

2.自定义Alexa技能检测意图。

3. AWS Lambda 函数接收来自 Amazon Alexa Skill 的请求并发布到 PubNub MQTT 代理。

4.O'nine通过订阅MQTT代理接收数据。

5.O'nine自主执行所需任务。

3.硬件

3.1 机器人基地

如下图所示连接组件。该电路将从 ROS 导航堆栈发送的所有速度命令转换为电机运动。固件包括一个 PID 控制器,以使用来自电机编码器的反馈来维持所需的速度。

组装好的机器人底座的几张照片。

机器人底盘是一个升级改造的 A4 纸罐。您也可以使用旧塑料容器盒来放置您的组件。

您可以查看我的 Linorobot 项目,了解有关如何构建 DIY ROS 兼容机器人的综合教程。

3.2 垂直 电梯 电路 (手臂 父母)

如下图所示连接组件。该电路控制手臂的垂直提升并将 http://moveit.ros.org/ 发送的所需高度转换为步进运动。这是一个开环系统,它通过将完成的步数与以毫米为单位的距离相关联来计算手臂的当前高度。微控制器还将 MoveIt 发送的数据中继到安装在移动垂直平台上的机械臂。

这是垂直升降机组装电路的照片。

螺旋电缆包含用于垂直升降电路和机械臂控制器之间串行通信的 Tx/Rx 线,以及为机械臂供电的 +12V 直流电源。

3.3 机器人 手臂 控制器 ( 手臂 孩子 )

组装机械臂并将其屏蔽层堆叠到 Arduino Uno 后,如下图所示连接组件。该电路通过串行通信与父臂通信。接收到的数据是用于驱动伺服电机的每个关节所需角度的数组。

这是堆叠在 Arduino Uno 上的组装机械臂控制器的照片。

还有一些用于展示 O'nin 的其余机械部件。

3.4 集成所有电路

最后,将您之前连接在一起的所有电路连接在一起,如下所示。该图还显示了如何为每个电路供电:

4. 软件

请注意,此项目需要在两台 Linux 机器(Ubuntu 14.04 或 16.04)上运行。一台开发机器运行 MoveIt 和数据可视化 (Rviz),另一台机器(ARM 开发板)运行机器人的导航包和硬件/传感器驱动程序。

单击此处查看可用于机器人的 ROS 支持的开发板(最好是 2GB 内存)。

4.1 ROS 安装

在两台机器上安装ROS:

git clone https://github.com/linorobot/rosmecd rosme./install 

安装程序会自动检测机器的操作系统和架构,让您不必担心安装哪个版本的 ROS。

4.2 活性氧 套餐 安装

4.2.1 在开发机上安装如下:

cd ~/catkin_ws/srcgit clone https://github.com/linorobot/lino_pidgit clone https://github.com/linorobot/lino_msgsgit clone https://github.com/linorobot/lino_visualizecd .. &&catkin_make 

4.2.2 在机器人电脑(机器人底座)上安装 Linorobot:

git clone https://github.com/linorobot/lino_installcd lino_install./install mecanum kinect 

这将安装机器人底座的固件、导航软件和硬件/传感器驱动程序。

4.2.3 在两台机器上安装O'nin的包:

cdgit clone https://github.com/grassjelly/onine_installcd onine_install./install 

这将安装机械臂的固件、运动学求解器和 Onine 的自主任务。

4.2.4 安装alexa_tasker:

cd ~/onine_ws/srcgit clone https://github.com/grassjelly/onine_alexacdcatkin_make 

这将下载链接 O'nine 和 alexa 的 MQTT 客户端。该软件包还包含将被压缩为 zip 文件并上传到 AWS Lambda 中的 NodeJS 应用程序。

5. 软件设置

5.1 设置 向上 Alexa 技能

5.1.1 注册和登录

在此处创建一个 Alexa 开发人员帐户,然后单击 '开始 技能 :

输入您的电子邮件地址和密码:

5.1.2 启动 Alexa 技能

点击'获取 开始' 在 Alexa 技能套件下。

点击'添加 技能 顶部 窗口:

5.1.3 技能信息

勾选'自定义 互动 模型 在技​​能类型下。

'Name'下输入你的技能名称(可选你的机器人名称)。

'Invocation下输入你的技能的调用名称(激活你的技能的名称) 名称'。

点击“下一步”。

5.1.4 交互模型

将 https://github.com/grassjelly/onine_alexa/blob/master/lamda/assets/schema.json 中的代码复制并粘贴到 'Intent Schema' .

将 https://github.com/grassjelly/onine_alexa/blob/master/lamda/assets/utterances.txt 中的代码复制并粘贴到'Sample 话语。

点击“下一步”。

5.1.5 技能配置

从左上角复制您的应用技能 ID,然后跳到步骤 5.2 以创建 Lambda 函数。创建完函数后,记下 Amazon 资源名称。

勾选'AWS Lambda ARN' 并在默认选项卡上输入您的 ARN。

点击“下一步”。

5.1.6 技能测试

'Enter 下输入语音命令 话语 然后点击' 询问 <技能名称>'

如果'服务下有回复,您可以检查您的技能是否有效 响应'。

5.2 设置 上传 Lambda 函数

5.2.1 注册和登录

在此处创建一个 AWS Lamda 帐户并单击 'Sign 控制台 顶部 窗口 :

输入您的电子邮件地址和密码。

5.2.2 创建 Lambda 函数

点击“创建 功能 在窗口右上角开始制作 Lambda 函数。

选择 'NodeJS 4.3' 在运行时*下。

选择'选择 一个 现有 角色 在角色*下。

选择'lambda_basic_execution' 在现有角色*下。

点击“创建函数” .

5.2.3 连接Alexa

添加触发器并选择 'Alexa 技能 Kit'

输入您的 Alexa 技能“技能 ID” 在技​​能 ID 下。

然后点击“添加”。

5.2.4 上传应用

在创建函数之前,将 PubNub 的 Pub-Sub 密钥复制并粘贴到函数代码中。

cd ~/onine_ws/src/onine_alexa/lambda/appnano 

现在生成将上传到 AWS Lambda 的 zip 文件:

cd ~/onine_ws/src/onine_alexa/lambda/appnpm install./zipme 

这会将所需的 lambda 函数和 node_modules 压缩为 .zip

在功能代码上,选择'上传 .ZIP 文件 在代码条目类型下。

点击'上传' 并选择之前创建的 Onine.zip 进行上传。

点击“保存” 顶部 窗口。

现在您的 Lambda 函数已完成。

5.3 创建 PubNub 帐户

5.3.1 注册和登录

在此处创建一个 PubNub 帐户。

输入您的电子邮件和密码:

5.3.2 创建一个新的 PubNub 应用

点击'创建 APP' 顶部 窗口 :

在“App”下输入您的应用名称 名称 :

5.3.3 记录您的发布和订阅密钥。

5.3.4 在这些行中输入您的发布和订阅密钥。

5.4 创建 逾越节 通知

O'nine 使用 Pushover 将照片发送到用户的手机。在此处注册一个帐户并下载该应用程序,这样当您要求 O'nine 检查房屋内的某些东西时,您就可以收到来自 O'nine 的照片。

5.4.1 登录 Pushover

并输入您的电子邮件和密码:

成功登录后记下您的用户密钥。

5.4.2 创建应用程序

点击“应用和插件” 在窗口的顶部。点击'创建 应用 / API 令牌' .

'Name'下输入应用程序的名称 .

选择'应用程序'“类型”下。

键入应用程序的任何描述。

点击'创建 应用程序'。

完成后,记下您的 API 令牌。

5.4.3 将您的应用令牌和用户密钥复制并粘贴到 O'nine 的“snaptask”。

5.5 安装 固件

5.5.1 uDev 规则

微控制器的串行端口是使用 roslaunch 文件上的静态名称定义的。为了记住串行端口并将其链接到其静态名称,必须创建 uDev 规则。在机器人的计算机上运行 uDev 工具。

 rosrun lino_udev lino_udev.py 

插入机器人底座的青少年板并输入“linobase”。对垂直升降电路做同样的事情,并将其命名为“oninearm”。按 CTRL+C 保存您的 uDev 规则。

将保存的udev规则复制到/etc/udev/rules.d:

sudo cp 58-lino.rules /etc/udev/rules.d/58-lino.rules 

重启udev:

sudo service udev reloadsudo service udev restart 

确认 uDev 规则是否有效:

ls /dev/linobasels /dev/oninearm 

如果未检测到端口,请重新启动机器人计算机并再次检查。

5.5.2 上传机器人底座固件

在上传机器人底座固件之前,您必须定义您的组件规格,例如轮直径、编码器的 PPR 等。点击此处配置您的机器人。

将机器人底座的 Teensy 板插入机器人的计算机并运行:

roscd linorobot/firmware/teensyplatformio run --target 上传 

5.5.3 上传垂直升降机固件

将垂直升降机的 Teensy 板插入机器人的计算机并运行:

cdplatformio run --target upload 

5.5.4 上传机器人控制器固件

将 Arduino Uno 插入机器人的计算机并运行:

cdplatformio run --target upload 

请记住在上传代码后拔下 Arduino Uno,因为接收到的数据是使用串行通信通过 Vertical Lift 的 Teensy 板中继的。

5.6 编辑 Linorobot 的 代码

您必须在 Linorobot(机器人基础)启动文件中编辑几行以添加运行 Onine 所需的驱动程序。

5.6.1 在bringup.launch中的这一行后面追加以下内容。

      

这增加了与垂直升降机的微控制器对话所需的软件包,而 Onine 则定义了 Onine 的变换(Onine 机械部件在 3D 空间中的位置)。

5.6.2 将此行改为:

  

这是为了创建一个虚拟框架,用于将从 Kinect 读取的点云数据转换为二维激光扫描数据。

5.6.3 注释掉这一行,因为此链接的转换已经在 Onine 的 URDF 文件中定义。

5.6.4 将以下几行替换为:

      

这会运行软件包,将从 Kinect 读取的点云数据转换为二维激光扫描数据。

5.6.5 将 Linorobot 的基础参考系从 base_link 替换为 base_footprint:

从“base_link”更改 ' 到 'base_footprint ' 如下:

linorobot/launch/amcl.launch

linorobot/launch/slam.launch

linorobot/param/navigation/global_costmap_params.yaml

linorobot/param/navigation/local_costmap_params.yaml

linorobot/src/lino_base_node.cpp - 第 90 行

linorobot/src/lino_base_node.cpp - lino 111

5.6.6 重新编译里程计节点:

cd ~/linorobot_wscatkin_make 

5.7 设置 向上 O'nin's 对象 检测器

为了让 O'nine 更容易检测物体,它在执行拾取和放置任务时使用 AR 标签来区分感兴趣的物体。与这些机器人相似的概念:

打印下面的图像并将其粘贴到您希望 O'nine 拾取的对象上。图片尺寸应为 2cm x 2cm。这些数字是任意的,请记住更改 Onine 跟踪器启动文件中的维度。

使用的感知软件是 http://wiki.ros.org/ar_track_alvar 。如果您更喜欢使用自己的对象检测软件或使用其他一些与 ROS 兼容的软件包,例如:

http://wiki.ros.org/find_object_2d

http://wiki.ros.org/tabletop_object_detector

6. 运行演示

确保在开始演示之前配置您的网络。查看此 ROS 网络以获得更全面的教程。

6.1 创建 地图

O'nine 使用预先创建的地图来定位自己并在房子周围导航时规划其路径。运行以下命令以创建地图:

在机器人的计算机上,打开 2 个新的终端窗口。运行bringup.launch:

roslaunch linorobot 启动.launch 

运行 slam.launch:

roslaunch linorobot slam.launch 

在您的开发计算机上,打开 2 个新的终端窗口:运行 teleop_twist_keyboard:

rosrun teleop_twist_keyboard teleop_twist_keyboard.py 

运行rviz:

roscd lino_visualize/rvizrviz -d slam.rviz 

使用teleop_twist_keyboard,驱动机器人绕着你想绘制的区域走。

完成映射后,通过在机器人的计算机上运行 map_server 来保存地图:

rosrun map_server map_saver -f ~/linorobot_ws/src/linorobot/maps/map 

检查 map.pgm 和 map.yaml 是否已经保存:

roscd linorobot/mapsls -a map.pgm map.yaml 

更改navigate.launch 上调用的地图以加载您自己的地图。更改 'house.yaml' 'map.yaml' .

6.2 获取目标坐标

当您要求 O'nine 执行需要在房屋内进行自主导航的任务时,它必须知道它必须完成工作的点的坐标。

您可以通过订阅 move_base_simple/goal 并在 Rviz 中指向目标位置来回显这些坐标。

通过 SSH 连接到机器人计算机并运行以下命令:

运行bringup.launch:

roslaunch linorobot 启动.launch 

在另一个终端上运行导航堆栈:

roslaunch linorobot navigation.launch 

在您的开发计算机上运行 Rviz:

roscd lino_visualize/rvizrviz -d navigate.rviz 

在您的开发计算机上打开另一个终端并运行:

rostopic echo move_base_simple/goal 

这将回显您将在 Rviz 上单击的目标姿势的坐标和航向。

On Rviz, click the point that is approximately 1 meter away from where you want the robot to perform the task and drag towards where the robot is supposed to face when it has reached it's goal. (1 box in Rviz is equals to 1 square meter).

Copy the coordinates on the window where you echo 'move_base_simple/goal '

Edit onine/onine_apps/scripts/fishtask.py and replace Point(x,y,z) with position/x position/y, and position/z from the echoed values. Replace Quaternion(x,y,z,w) with orientation/x, orientation/y, orientation/z, and orientation/w from the echoed values.

6.3 Running O'nine

6.3.1 Open a new terminal on the development computer and run the ROSCORE:

roscore 

Open three new terminals on the development computer and SSH to the robot computer.

6.3.2 Run robot base's and robotic arm's driver:

roslaunch linorobot bringup.launch 

6.3.3 Run the navigation software on the second terminal:

roslaunch linorobot navigate.launch 

6.3.4 Run the object detection software on the third terminal:

roslaunch onine_apps ar_tracker.launch 

On the development computer open two new terminals.

6.3.5 Run MoveIt software:

roslaunch onine_moveit_config demo.launch  

This will run all the software required to move the robotic arm and open Rviz for data visualization.

6.3.6 Run the PubNub client which launches the autonomous task upon voice command through Amazon Echo Dot:

rosrun onine_alexa alexa_tasker.py 

6.3.7 Before talking to executing voice commands, you have to help O'nine localize relative to the map.

On Rviz, click '2D Post Estimate' and click on the map the approximate location of the robot and drag towards O'nine's current heading.

Once O'nine is localized, you're now ready to command Alexa to ask Onine to perform tasks.

Have fun with your new personal home assistant robot!

7. Future Works

7.1 O'nine simulation model

Building the hardware can be time consuming and tedious. I'm planning to create a Gazebo simulation model so that users can play around with O'nine without the need of a hardware. This way, O'nine's Alexa Custom skill can be tried purely with software.

7.2 Better computing power

The first ARM board I used to run O'nine was an Nvidia Jetson TK1 which comes in nifty for computer vision applications. Due to power reasons I replaced it with an Odroid XU4 as it only requires 5V and has a smaller form factor. I'm currently eyeing on a Rock64 board which has 4GB of RAM and hopefully get more juice to run more applications concurrently. The current setup requires to offload some of the applications to my laptop and has to be hardwired to the dev board (ethernet cable) as there's a huge stream of data running across both machines.

代码

O'nine Software
Contains all robotics related code - Autonomous Navigation, Kinematics Solver, and high level scripts to accomplish pick and place tasks.https://github.com/grassjelly/onine
Alexa - Robot integration
Contains all the codes that integrate Alexa Skill with the robotics system - Lambda App (NodeJS), Robot Tasker (A PubNub client that waits for Alexa commands and runs high level scripts to perform robot tasks).https://github.com/grassjelly/onine_alexa
Robot Base
This is another project of mine - Linorobot. It is a suite of Open Source ROS compatible robots that aims to provide students, developers, and researchers a low-cost platform in creating new exciting applications on top of ROS.https://github.com/linorobot/linorobot

示意图


制造工艺

  1. 通过蓝牙控制的树莓派机器人
  2. JQR Quadruped Autonomous Robot
  3. 简单的 Pi 机器人
  4. 在家制作 DIY 作业书写机
  5. 带伺服电机的机器人避障
  6. 线跟随机器人
  7. 语音控制机器人
  8. Arduino 培训平台
  9. DIY Arduino 机械臂——由手势控制
  10. 使用 Dabble 控制的 Arduino 制成的 4 轮机器人
  11. 家庭监视器
  12. 超酷室内导航机器人