BunnyBot是一种基于ROS的机器人平台,可以使用其内置的抓取手臂和视觉系统来执行有用的任务!
目标
- 这个机器人可以自主导航,可以躲避障碍物,可以通过一个手臂夹取物品。
- 除了最初的导航阶段,不需要远程遥控或者手工输入。
- 多功能,可执行一些简单的任务
许可证
除非特定声明,代码和设计文件均基于BSD授权协议。(例如apriltags nodelet是采用的GPL协议)。
总体设计
机器人的核心功能是将一个标的物从一个地方移动到另外一个地方。这个标的物可以是一个需要传输的物体,也可以是一个工具(比如一个清洁垫或者一个粉刷工具)。机器人必须包含这种基础硬件可以实现这个功能。
机构设计
我使用的是单自由度的手臂和简单的平面抓手。相比采用更复杂的手臂/夹持器,这个有几个优点:
- 可以相当便宜使用3D打印机制作
- 不需要复杂逆运动学
- 减少了从关节间隙,更高的承载能力,更低的重量弯曲
深度相机被安装在背面,以尽量减少其检测盲区。其结果,机器人的主体被设计成楔形,从而当手臂低于相机的时候,有一个更通畅的视野。机器人的右侧有一个三角形镶嵌图案,这是一定程度上抵消由于手臂在该侧增加的重量。
硬件
我已经经过了几个硬件的迭代,目前确认的配置如下:
- neato xv11 LIDAR 用于本地化
- intel realsense R200 深度传感器。这提供了物体检测的深度流以及一个1080的RGB流来检测基准
- Nvidia Jetson TK1 这是计算的主体。这个板子支持CUDA,能够比较轻易地处理计算视觉。
- Kobuki base 机器人平台,这是和Turlebot同样的base。这个base预装ROS,可以通过一个USB接口可以提供陀螺仪、里程计及其他传感器。
- Arduino uno 是驱动手臂/抓取器。虽然技术上TK1有GPIO,但Linux不是一个实时操作系统,并没有真正适合与PWM驱动电机。
- Actuonix/Fergelli P16 150mm 22:1 线性致动器以驱动手臂
- Polulu VNH5019 马达驱动器来驱动线性致动器
- MXL AC-404 麦克风。我用这个主要是因为ROS网站推荐。
软件
我使用ROS作为软件框架。这个项目大部分的困难都通过各种ROS包来解决。下面是我用的ROS :
gmapping - 使用SLAM来建立一个环境地图。
robot localization, AMCL - 通过LIDAR数据、车轮里程计和陀螺仪读数等本地化地图。
ROS navigation - 规划路径到地图上的路标
RTAB-map obstacle detection - 侦测障碍物,并绕开它。
pi_trees - 利用决策树建立高层次决策。
pocket sphinx - 语音识别
还有其他的。可以登录github 查看更多。
有些任务是没有现成的包,所有有些情况我需要自己写ROS包:
gpu_robot_vision - 使用TK1的 GPU去执行一个简单的CV任务,包含了图像识别、黑白/彩色转换、 缩放和降噪滤波器等
apriltags_nodelet - 一个nodelet 用于输出一个来自矫正和降噪的RGB流的基准标识列表 april_tf -将这些标识作为输入,同时输出在地图框架中转换的同样的标识。通过将其写入到文件坚持观察,并且输出一个目标为ROS导航姿势来规划到标记的路径
april_planner - 发出精确的运动,基于所检测的标记物的相对移动来对机器人发起一个精确的运动。
depth_object_detection - 这个主要用于检测我的手,打开或者关闭夹持器。
安装
- 得到一个备用机,并安装ubuntu14.04
- 安装这些ROS包(通过 apt-get获得)
rosserial_python xv_11_laser_driver laser_filters kobuki yocs_velocity_smoother map_serverrtabmap_ros amcl pocketsphinx gmapping navigation pi_trees
- git clone https://github.com/Jack000/bunnybot 到你的工作区域,同时 catkin_build
- 复制 bunnybot的内容/加载到你的home directory
- 复制 bunnybot/launch/bunnybot.py到 the package directory of pi_trees_lib
本文涉及到软硬件规格和代码,请点击阅读原文,了解详细信息!