




已阅读5页,还剩57页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北方工业大学北方工业大学 本科毕业设计(论文)本科毕业设计(论文) 题 目: 基于 ROS 机器人系统的智能小车研制 指导教师: 专业班级: 学 号: 姓 名: 日 期: 2015 年 6 月 15 日 基于 ROS 机器人系统的智能小车研制 摘要 随着机器人技术的发展,ROS(Robot Operating System)机器人系统受 到越来越多人的研究和学习。通过本次设计研制出了一台以优秀的开源机器 人操作系统 ROS 作为软件基础的智能小车,抛弃了传统的单片机等嵌入式软 件代码从零写起的开发方案,软件代码以 ROS 系统的代码规范和理念进行设 计。硬件电路方面采用了当下流行的开发电路板,这就对小车的可复制性, 给广泛推广提供了更大的空间,从而可以让更多的人能够参与到这种科技实 践中,享受科技给生活带来的乐趣。这个系统可以作为 ROS 系统的入门级学 习的实体解决方案,也可以作为家用可移动的监控平台,也可以作为物联网 的一个终端设备。 关键词:Robot Operating System;ROS;智能小车;物联网 Design of smart car based on Robot Operating System ABSTRACT The design chosen on the excellent open-source Robot Operating System as the basis for the design , abandoned the traditional development programs that written single-chip and other embedded software code from scratch, but written software code as the ROS system code specifications. I choosen the current popular development boards as hardware ,so the car can be easily copied , which allows more people to participate in the practice of this technology , science and enjoy technology more fun. The design of a web page for the interactive , the trolley car and the client is responsible for the implementation of client commands and image transfer , web client can receive the image transported by car , and you can control the trajectory of the car , observe the ROS system status . This system can be used as a ROS platform for beginner-level learners and as a home monitoring platform . It can be used as a terminal of the internet of things . KeywordsKeywords:Robot Operating System;smart car ;web server 目录 1 引言1 1.1 课题研究背景1 1.2 本课题的发展现状.1 1.2.1 机器人的发展概况.1 1.2.2 机器人软件平台的发展概况2 1.2.3 ROS 系统的诞生和发展3 1.3 本课题的主要研究内容及安排.3 2 功能规划及设计方案论证5 2.1 功能规划5 2.2 本次设计方案选择5 2.2.1 机械结构方案6 2.2.2 主控板的选择.7 2.2.3 驱动方案选择.8 2.3 软件方案选择10 2.4 系统总体运行模式10 3 系统设置与测试11 3.1 ROS 机器人系统安装配置.11 3.2 创建 ROS 工作空间.13 3.3 创建和编译 MROB包.13 3.4 启动文件14 3.5 ROS 机器人系统节点.15 3.6 单片机节点代码.16 3.6.1 单片机开发环境的设置.16 3.6.2 单片机程序17 3.7 网页设计.18 3.8 摄像头驱动与参数设定20 3.9 摄像头测试21 3.10 小车运动控制算法22 4 装置整体调试.23 4.1 硬件连接23 4.2 启动节点24 4.3 运行网页测试25 结论27 致谢28 主要参考文献29 附件30 外文资料翻译及原文42 1 1 引言 1.1 课题研究背景 随着机器人领域的快速发展和复杂化,代码的复用性和模块化的要求越 来越强烈,而已有的机器人开源机器人操作系统很难满足要求。2010 年 Willow Garage 公司发布了开源机器人操作系统 ROS(Robot Operating System), 很快在机器人领域展开了学习和应用。 ROS 可以在许多 Linux 发行版本上运行,ROS 可以源码安装也可以采用 直接安装,Willow Garage 公司仅仅提供了 Ubuntu 系统环境下的直接安装方 法,在其他平台上采用的多是源码安装方式。本次设计软件上采用了 Ubuntu 系统,作为 ROS 系统的安装环境,方便了 ROS 的安装以及可能存在的兼容 性问题。 Linux 作为开源系统对硬件平台高度适应性,使的它能够很好的移 植到不同的平台上,在嵌入式、服务器等领域得到了广泛的应用。Ubuntu 是 Linux 众多发行版本中很优秀的的版本,Ubuntu 建基于 Debian 的不稳定分支, 是以桌面应用为主的桌面操作系统,运作主要依赖 Canonical 有限公司的支 持,同时亦有来自 Linux 社区的热心人士提供协助。现在搭载 ROS 系统的机 器人有 PR2、REEM-C 等,这些机器人都造假昂贵,适合实验室作为研究, 但不太适合初学者做为学习 ROS 的平台。 1.2 本课题的发展现状 1.2.1 机器人的发展概况 机器人的分类和定义有好多种,一般可以分为工业机器人和特种机器人, 工业机器人主要是应用在工业现场的机械臂,特种机器人主要是具有一定智 能的,具有一定的自主性的机器人,例如服务性机器人、无人机等。 2 1920 年机器人一词出现在一部文学作品中,1959 年第一台机器人被设计 出来,标志着机器人真正的诞生。经过长达半个世纪的发展,机器人应用的 领域不断地扩大,普及的程度也越来越高。越来越多的工业机器人进入到共 生产中,大大降低了工业生产的成本,服务性机器人也在不断的取得突破性 的发展。通过现在的市场调查发现,越来越多的人愿意尝试机器人产品,这 将大大刺激服务性机器人市场的发展,更多的新技术将会应运而生。 1.2.2 机器人软件平台的发展概况 机器人软件开发平台或者开发框架是指为机器人开发提供了可重用的软 件包、软件开发、编译、仿真工具等软件的集合,机器人软件平台节约了机 器人开发者的时间和成本。目前有多种机器人开发框架和软件开发平台,商 用的机器人软件开发平台有 Evolution Robotics、Microsoft Robotics Studio(MSRS) 、Skilligent 等,开源的机器人框架有 Cylon.js、Artoo、Gobot、ROS 等。 MSRS 是微软开发的机器人软件平台,能够在微软开发的 windows 和 windowsCE 下面运行,它提供了完备了的仿真和图形化的开发环境。Cylon.js 是一个机器人 JavaScript 开发框架,可以使用 Node.js 进行机器人的开发和物 理计算,他支持多个硬件平台。Artoo 是用 Ruby 语言写成的 Cylon.js 机器人 开发框架的姐妹项目,编程语言偏门,不支持 c 语言等热门的语言,不利于 机器人的扩展。Gobot 机器人开发框架采用 Go 语言编写完成,Go 语言有 Google 开发,主要用来做云计算和云服务的语言,更适合运用于服务器程序 的编写。ROS 是开源的机器人系统可以与其他开源框架进行结合,ROS 提出 了自己独特的解决方案,软件开发标准,集成了 SLAM 导航等功能,拥有独 3 立的仿真环境,通过硬件抽象语言可以建立自己的机器人模型进行仿真学习。 1.2.3 ROS 系统的诞生和发展 ROS 系统起源于 2007 年斯坦福大学人工智能实验室的 STAIR 项目与 Willow Garage 机器人技术公司的个人机器人项目(Personal Robots Program) 之间的合作,ROS 的软件研究成果在机器人 PR2 上进行体验展示。 在开源的交互中,ROS 得到完善和推广.ROS 是一种开源的、用于机器 人的后操作系统,或者说次级操作系统。它提供类似操作系统所提供的功能, 包含硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传 递、程序发行包管理等,也提供一些工具程序和库用于获取、建立、编写和 运行多机整合的程序。 1.3 本课题的主要研究内容及安排 本设计基于 Robot Operating System 和嵌入式开发板,设计一辆智能小车, 通过网页可以实现对软件系统的监控。小车硬件部分主要是将成熟的硬件进 行适当的搭配,本次设计的重点是设计软件,搭建 ROS 系统运行环境和 web 服务器,编写相关的软件代码,主要包括网页代码和 ROS 节点代码。 课题主要研究内容及安排如下: 1. 查阅相关文献资料; 2. 确定系统总体设计方案; 3. 对元器件进行选型、统计并采购; 4. 对硬件进行组装; 4 5. 搭建软件开发环境; 6. 单片机基础代码设计及调试; 7. 网页代码设计及调试; 8. 整合代码及调试; 9. 撰写毕业设计论文。 5 2 功能规划及设计方案论证 2.1 功能规划 本次设计需要搭建一个智能小车。通过网页可以实现对小车的运动轨迹 的控制,小车可以响应用户指令完成前进和后退直线运动和转向运动。网页 端可以监控系统的运行状态,可以清楚的了解系统运行状况。可以实现视频 实时传输功能,用户可以实时观察到小车拍摄到的画面。 2.2 本次设计方案选择 硬件平台的搭建需要设计合适的机械部分和硬件部分。机械部分主要包 含智能小车底盘、云台、摄像头、主控板、键盘、电机驱动等。硬件部分主 要负责运行系统和代码,小车的运动控制。可选择的方案如下: 方案 1 可以选择电脑与单片机组合。电脑负责运行 Ubuntu 系统和 ROS 系统等,单片机负责底层的小车运行控制。电脑和单片机之间通过串口通讯。 电脑的运行速度快,处理能力强,系统运行更加流畅,能够运行 ROS 系统的 完整版本,可以运行 rviz 3D 视图等图形化工具。缺点是电脑的体积大,重量 也较大,需要的车体盘会偏大,需要的更大的驱动力,会增加小车制作的成 本和控制的难度。 方案 2 选择 arm 开发板作为小车的控制层,运行 Ubuntu 和 ROS 系统等, 并且负责小车的运动控制。优点是 arm 开发板的成本较低,体积小,重量轻, 易于在小车上安装,可以缩小小车的体积,减轻小车的重量,小车更加易于 控制。缺点是 ROS 的部分功能不能在 arm 平台让很好的运行,但是不影响核 心功能。Arm 开发板直接控制小车的运行,这样可以使得系统更加的简洁, 6 由于电机驱动功率较大,在电机运行时,电流或者电电压的过大波动可能会 烧毁 arm 芯片,影响到系统的整体稳定性。 方案 3 采用 arm 开发板和单片机的组合,开发板和单片机之间采用串口 进行通讯。ARM 开发板运行 Ubuntu 和 ROS 系统,可以通过串口发送指令给 单片机。单片机可以产生 PWM 控制电机的转动。这种方案既保证了小车体 积较小,成本低,也保证了系统的稳定性。 通过以上的方案比较我们选择方案三作为本次设计的硬件解决方案, 2.2.1 机械结构方案 本次设计的是智能小车,需要选择一个移动平台作为开发的基础,由于 材质的不同,价格差别也较多。底盘可以选择铝合金、钢板、亚克力等,车 轮子可以选择普通的塑料橡胶轮、履带等。金属的车盘会使得车子更加的稳 定牢固,但是要求的电机的驱动能力更强,成本也偏高。综合考虑本次采用 的是塑料材质的车底盘。 图 2.2 所示即为本次采用的小车平台。小车底盘是亚克力材料,强度较 高,相对于铝合金更加易于加工。小车底盘有 4 个轮子,每个轮子都有独立 的电机进行驱动,小车转向操作更加灵活,驱动力更强,可以搭载更多的传 感器,完成复杂的任务。 云台采用简易的双轴的舵机云台,如图 2.1,两个舵机可以驱动摄像头云 台左右上下运动运行,本次设计没有采用云台配套的摄像头,需要对云台和 摄像头进行一定的加工,才能将摄像头固定在云台上,通过云台的移动,摄 像头的拍摄范围更加广阔。 7 图 2.1 云台和摄像头 图 2.2 小车底盘 2.2.2 主控板的选择 ARM 公司一直主导着嵌入式行业,市面上流行的 ARM 嵌入式开发板种 类较多,卡片式也是一种嵌入式开发板,树莓派是卡片式电脑的典型代表, 8 接上显示屏鼠标等就可以进行办公浏览网页等操作,使用起来十分方便,价 格低廉,性能上比不上真正意义的电脑,但是能够满足基本的需求。 本次设计计划采用树莓派 arm 开发板,树莓派第一代产品作为一款开源 的 arm 开发板,在许多志愿者的参与下,各种应用已经形成规模,很容易上 手,做各种开发。但是由于第一代产品是 2012 年的产品,不支持 ubuntu 系 统,在其他的 linux 版本下安装 ROS,需要进行编译等操作,存在兼容性问题, 不易于本次的设计开发,而且性能较差,无法本次设计的要求。本次设计采 用国产的香蕉派开源板作为主控板,如图 2.4(a)所示,相对于树莓派,香 蕉派具有运行频率高、内存大、内核更加先进等优势,而且支持 ubuntu 系统, 系统运行流畅。表 2.1 为两块开板的硬件配置对照。 表 2.1 硬件配置对比 CPU内存内存板载存储板载存储电源电源USB 借口借口 Cortex-A7 双核1GBDDR3SD 卡5V 直流电2 个 ARM1176JZF-S512MSD 卡5V 直流电2 个 2.2.3 驱动方案选择 硬件电路部分需要设计控制板和驱动电路以及其他必要的传感器电路。 本次设计采用单片机作为电机运动的控制板,控制电机运转。单片机选择 AVR 单片机,型号为 ATmega328,开发板选择 Arduino,如图 2.4(b)所示, Arduino 为一款开源硬件,具有标准的硬件接口,独立的开发环境和标准的 函数库,每一种扩展板都有对应的函数库,方便软件代码的编写,可以不用 花太多的精力放在底层的开发上,可以更好的专注于逻辑功能的实现上。本 次设计中有 4 个直流电机,2 个舵机需要控制,电机驱动需要能够驱动 4 个 9 电机。2 个舵机可以直接由单片机进行驱动。本次选择了型号为 C3A3 的 arduino 电机驱动板,如图 2.3 所示,此款电机驱动的板可以驱动 4 个直流电 机或者 2 个步进电机,同时可以驱动两个舵机,能够满足本次设计的要求。 图 2.3 电机驱动 (a) (b) 图 2.4 单片机和主控板 10 2.3 软件方案选择 ROS 系统依赖于 Linux 系统,本次设计选用了 Ubuntu 系统作为 ROS 系 统的依赖系统,由于 Ubuntu 的衍生版本众多,针对不同的应用场合和硬件平 台 Ubuntu 有多种衍生版本,由于本次设计选用的 arm 平台,运算处理能力 有限,因此选用了对硬件要求不高的 Lubuntu14.04 做为本次设计的操作系统。 ROS 系统更新速度比较快,已发行多个版本,本次设计采用的是 indigo 版本, 虽然现在的许多中文资料是 hydro 版本或者更老的版本,但这并不会影响本 次设计。Indigo 版本的 ROS 和 Lubuntu 14.04 版本都有 5 年的官方支持的维 护更新,这样能够保证在 5 年内不用跟新系统,可以不升级系统的条件下将 继续完善本次设计。 用户需要通过 Web 服务器来访问本机的网页,本次设计采用 Apache 作 为本次设计的 web 服务器。Apache 网页服务器是一款开源的软件,是世界排 行第一的网页服务器,它可以多种操作系统平台上运行,具有简单、速度快、 稳定性高、安全性高等优点,被许多世界知名的网站采用,例如亚马逊,雅 虎等。 2.4 系统总体运行模式 本章主要是对整个系统设计的一个总体概括,通过对可行性方案的分析 与研究来决定采取哪种方案更加适合这次的毕业设计,本次选择的方案运行 的基本模式如图 2.5 所示。 图中 ROS 系统核心在香蕉派开发板上运行,ROS 系统内部节点之间通 过话题进行数据交换,Arduino 开发板和香蕉派之间采用 USB 线进行链接, 通过串口通信协议进行通信。通过串口可以实现 ROS 系统和单片机的链接, 11 输入设备可以时操纵杆、摄像头、激光雷达等,本次设计中摄像头作为输入 设备,Arduino 开发板作为一个 ROS 系统节点,通过话题传递电机控制的指 令。 图 2.5 系统运行模式 3 系统设置与测试 3.1 ROS 机器人系统安装配置 1. 设置 local 指令,配置语言环境。 sudo update-locale LANG=C LANGUAGE=C LC_ALL=C LC_MESSAGES =POSIX 2. 设置源列表文件 sources.list。 sudo sh -c echo “deb /ros/ubuntu trusty main“ 12 /etc/apt/sources.list.d/ros-latest.list 3. 设置证书。 wget /ros/rosdistro/master/ros.key -O - | sudo apt-key add - 4. 安装 ROS 系统基础版本 sudo apt-get install ros-indigo-ros-base 5. 设置环境变量 在每个 shell 启动的时候,通过下面这条指令可以实现 ROS 环境变量被添 加到每个 bash 中 echo “source /opt/ros/indigo/setup.bash“ /.bashrc source /.bashrc 6. 运行 roscore 指令测试系统是否安装成功。运行结果如下: 13 图 3.1 运行结果 3.2 创建 ROS 工作空间 1. 创建工作目录 跳转到 home 目录下: cd 运行指令创建工作目录: mkdir -p /catkin_ws/src 2. 初始化工作空间 跳转工作目录: mkdir -p /catkin_ws/src 初始化指令: 14 catkin_init_workspace 3. 编译工作空间 跳转工作目录: cd /catkin_ws/ 运行编译指令: catkin_make 4. 设置工作空间环境变量 source devel/setup.bash 在每次打开终端是都需要运行一次这个指令,否则 ROS 指令找不到这个 工作空间下的任何包。 3.3 创建和编译 Mrob 包 1. 跳转工作目录到 catkin 工作空间 cd /catkin_ws/src 2. 创建 Mrob 包 catkin_create_pkg Mrob std_msgs rospy roscpp 3. 编译 Mrob 包 跳转工作目录:cd /catkin_ws 编译 Mrob 包:catkin_make -pkg Mrob 通过添加pkg 选项可以选择需要编译的 catkin 包。可以不用编译当前工 作空间下无关的包,节省时间,提高编译的效率 4. 添加当前工作空间到 ROS 环境内 . /catkin_ws/devel/setup.bash 15 3.4 启动文件 启动文件的语言风格上和 XML 文件相同,拥有自己独特的标签,可以用 来设定节点启动需要的参数,可以启动已经编译完成的 ROS 节点,在管理大 型的机器人项目时候,可以方便的管理需要启动的节点,不用通过 rosrun 指 令单个的启动节点。启动文件代码如下: 之间包含的是启动文件的主要代码,声明了需要启动的节 点和需要传递参数。声明的是启动文件需要启动的节点,节点所 在的包是 rospy_tutorials,节点类型是 talker,名字是 talker,类型和包是直接 相关的参数不能够随便改写,名字参数可以随便改,但是一般和类型名字相 同。 编写启动文件需要在/catkin_ws/src/Mrob 目录下面创建一个 launch 目录, 每个工包的所有的启动文件都存放在这个目录下面,一般以.launch 作为文件名 字的结尾。编写完成后可以通过 roslaunch 命令运行。启动文件创建过程: 1. 跳转工作目录 cd /catkin_ws/src/Mrob 2. 运行指令创建 launch 目录 mkdir launch 3. 编写启动文件并保存 vim test.launch. 16 3.5 ROS 机器人系统节点 节点在 ROS 系统是算法框图级的概念,是 ROS 系统中运行的一个基本 单位,一个完整的 ROS 机器人系统包含若干个节点,节点负责数据的处理工 作,完成特定的功能,节点可以通过节点管理器进行管理,通过 ROS 几点管 理器,各节点之间才能够通信,单个节点不能够直接进行通信。 每一个节点的代码一般包含一个主函数和回调函数,回调函数主要负责 数据运算,完成节点的主要职能。主函数通过节点的初始化,调用回调函数 处理数据,完成节点主要功能。一般 ROS 节点与其他节点通信的方式有两种, 一种是 publish,将节点运算的结果发布出去,一种是 subscribe,通过订阅的 方式获得其他节点的信息,作为节点数据的输入。例如本次设计中网页需要 摄像头拍摄的画面,就需要订阅画面的节点数据,通过这种方式,ROS 会将 摄像头的数据发布到网页上,我们才能实时的观测到摄像头拍摄的画面 3.6 单片机节点代码 3.6.1 单片机开发环境的设置 本次设计没有采用 AVR 开发环境,而是选择了 Arduino 开发板特定的开发环 境,arduino 图形开发环境 linux 也可以运行。AVR 在 linux 下直接开发需要 运用 gcc 等开发工具,设置起来十分麻烦,图形开发环境还需要配合 eclipse,开发起来相对麻烦. 1.通过指令方式安装 arduino 开发环境 sudo apt install arduino 2.设置 arduino 的工作目录,arduino 开发环境安装完成后,打开开发环境 17 选择工作目录 sketchbook 存放的地址。 3.安装 arduinor 串口驱动 sudo apt-get install ros-indigo-rosserial-arduino sudo apt-get install ros-indigo-rosserial 4.安装 ros 库到 arduino 开发环境 跳转工作目录:cd /sketchbook/libraries 运行指令安装库:rosrun rosserial_arduino make_libraries.py . 完成上面的步骤以后,ros_lib 会出现在 arduino 开发环境下,如图 3.2。 Arduino 开发环境下的 ros_lib 是将 ROS 系统内发布节点函数、点阅订阅节 点函数等移植到了单片机环境下,并且对单片机的串口波特率、系统时钟等 进行了设置,使得 ROS 系统内部的重要函数能够在单片机的环境下运行,通 过串口单片机可以与 ROS 系统的主机进行通信。ros_lib 通过不同的编译条件 可以适配到不同的单片机中,扩展了 ROS 系统的应用场合。 18 图 3.2 Arduino IDE 3.6.2 单片机程序 单片机在本次设计中是一个节点程序,负责控制 4 个电机和两个舵机。 在 arduino 的开发环境下,没有 main 函数,需要运行的代码都卸载 loop 函数 里面,loop 函数取代了 main 函数和死循环 while(1),方便了开发。在代码正 式运行前需要对代码运行需要的硬件环境进行设置,所有设置在 setup()中完 成。这种编码方式使得代码清晰明了。流程图如图 3.3。 在单片机里需要完成的 ROS 节点代码,需要编写小车控制回调函数 M_controlCallBack,负责小车的运动方向控制。舵机回调函数负责舵机的运 动控制。设定硬件资源。订阅电机和舵机控制的话题 cmd_vel,初始化订阅 结点,loop 函数里面每循环一次,运行一次 spinonce 函数,spinonce 函数负 责调用回调函数,完成控制动作。spinonce()在每次循环中值执行一次,只调 用一次回调函数。spin()函数会从被调用的的时候一直调用回调函数,知道系 统停止运行才返回,本次设计中通过 loop 函数和 spinonce()函数配合就可以 完成 spin()函数的功能。详细代码见附录。 19 图 3.3 流程图 3.7 网页设计 网页代码采用 html 和 JavaScript 语言进行编写,详细代码见附录,主要 实现实时图像观测、小车运动控制、舵机控制。页面布局依靠 HTML 和 CSS,本 次采用表格的方式负责基本的布局,通过 JS 代码在表格内部添加具体的按钮 等功能块,JavaScript 是事件驱动的语言,本次设计中大量的采用点击事件, 当基本的页面加载完成之后,JS 代码开始运行,监听页面的事件,当对应的 事件发生时,JS 会用相应的代码相应这个事件。本次大量的运用了点击事件, 通点击页面的按钮,可以实现网页与 ROS 的通信,可以发布节点、订阅节点。 本次选用 ROS 的 JS 库作为基础,文件名称是 ros.js。这个库主要定义了 与 rosbridge 通信的相关协议,以及 ROS 中订阅节点、发布节点等函数的 JS 代码实现,可以通过定义定义 ROS 对象来调用其中的函数。在设计中需要考 20 虑页面布局和需要订阅的节点和发布的节点。本次设计中每个功能都被设计 在一个独立的文件中,starting.js 文件主要实现网页和 ROS 的通信,在 stating 文件中定义了 connection 对象,这个对象复择设置 ip 地址,初始化各个模块, 实现各个模块的的页面布局和事件监听设置。Connection 对象的所有方法存 在 connection.js 文件中,所有的 JS 文件通过 index.html 文件加载到浏览器中, 通过浏览器可以查看代码,如图 3.4。 rosbridge 软件包可以作为网页和 ROS 系统之间通信的桥梁,ROS 和浏览 器通过 WebSoket 协议进行通信。WebSocet 是 HTML5 的一中新的通信协议。 他实现了浏览器和服务器的全双工通信。rosbridge_server 实现了 ROS 与浏览 器之间的通信。在使用网页功能前需要开启 rosbridge_server,否则浏览器和 ROS 系统之间不能正常的通信,网页功能将不能实现。 21 图 3.4 网页代码 3.8 摄像头驱动与参数设定 本次设计采用的市面上常见的一般摄像头,采用通用摄像摄像头驱动既可以, 因此选的是 ROS 系统摄像头包为 uvc_camera,uvc_camera 可以驱动一般的 摄像头并且可以在 ROS 内发布图像消息,其他节点可以订阅相关的消息作为 图像处理或者传输的对象。如果想要在普通权限下使用摄像头,需要设计系 统的设备规则,设置方法: 1.创建并编辑 uvc.rules sudo vim /ect/udev/rules.d/uvc.rules 2.编辑 uvc.rules,对设备 ID 信息等进行设置 # UVC cameras SUBSYSTEMS=“usb“,ENVDEVTYPE=“usb_device“, ATTRSidVendor=“1871“, ATTRSidProduct=“0316“, MODE=“0666“ 通过 lsusb 指令可以查看产品的 ID 号、生产厂家 ID 号等。如下图所示: 22 图 3.6 USB 设备信息 3.9 摄像头测试 将摄像头插在 arm 开发上面通过 guvcview 软件测试,guvcview 软件可以 正常显示画面,说明摄像头能够正常的工作,arm 板的供电也能够满足摄 像头的需要。 ROS 系统集成了许多优秀的图形化开发工具,rviz 是 3D 可视化工具,主 要用来查看图像、坐标、地图等。rviz 对硬件的依赖较强,ROS 的基础版 本里也没有对 rviz 进行安装。因此没有采用 rviz 作为本次摄像头的测试 工具,本次设计采用的是 image_view 包作为测试工具,用来订阅 camera_uvc 发布的图像信息,并且显示在屏幕上面。测试结果如图: 23 图 3.7 摄像头测试 3.10 小车运动控制算法 小车的控制信号来自网页,通过网页可以控制两个 2 个舵机和 4 个电机, 可以实现舵机的上下左右运动,小车的前后运动和左右的转向。小车的转向 是通过采集鼠标点击画布的坐标实现的。画布分为 8 个区域,每个区域发送 的坐标不同,通过判断坐标所在的区域可以控制小车不同的运方向,8 个区 域分别对应到小车的 4 种运行方式上,分别是向前运动、向后运动、左转、 右转。对应的软件代码。 摄像头的运动比较简单,通过 4 个按钮的点击完成,每个按钮可以发送 不同的坐标信息,表征不同的运动方向,当单片机接收到数据后,通过判断 数值完成相应的动作。点击 UP 时,按钮摄像头可以向上运动,DOWN 按钮 可以使摄像头向下运动,可以完成向左向右的运动。 24 4 装置整体调试 4.1 硬件连接 本次设计采用的电源是普通的移动电源, 摄像头和主控制板板之间采用 USB 连接,单片机和主控板之间采用 USB 连接,USB 口负责单片机的供电。 将 4 个电机连接到驱动板,由于 USB 口的供电能力有限,选择给驱动板单独 供电。驱动板接线如图 4.1 所示,驱动板两侧接直流电机,右下角是舵机接 线,上方为供电口,驱动板和单片机开发板通过排针链接,可将驱动板叠加 到 Arduino 上面。图 1 为小车的整体效果图: 图 4.1 小车整体效果 25 图 4.2 驱动板 4.2 启动节点 本次设计中需要启动节点有串口节点、摄像头节点,需要启动的服务是 图片传输服务和 websoket 服务。启动串口节点可以实现主板和单片机的通信。 通过 rostopic 指令可以查看 ROS 正在运行的话题如图 4.3。 26 图 4.3 话题指令 4.3 运行网页测试 在局域网内可以通过 IP 来访问小车的网站,小车的登陆账号为小车的 IP 地址,网页的右上角是登陆栏,在登陆栏中输入的设备的 IP 地址,点击 connect 按钮就可以连接到小车上,登陆后效果如图 4.4,connect 按钮会显示 为 disconnect,可以点击 disconnect 按钮断开与设备的连接。连接到设备后可 以进行相关的控制和操作,如提交话题、发布信息等。 网页被分为 5 个区域,camera 区域显示的是摄像头拍摄的实时画面, servo 是舵机的控制区域,joystick 区域为小车运动控制区域,可以遥控小车 27 的运动,左下角为 ROS 系统的检测区域,通过此区域可以观测 ROS 系统正 在运行的话题、服务、节点。 图 4.4 网页效果 28 结论 经过对本课题的研究与实际制作,制作完成了一辆基于 ROS 机器人系统 的智能小车,制作了一个网站。小车拍摄图像可以传输到网页,ROS 系统的 运行参数可以传输到网页,小车可以接收到网页传输过来的指令,调整运动 的轨迹。主要完成的工作如下: 1.完成了智能小车硬件平台的搭建工作,小车可以在相应的指令下运动, 可以拍摄画面,并且将画面实时传输到网页当中; 2.完成了网页的设计,实现了网页对小车的控制,通过网页可以注册节 点,提交话题,与 ROS 系统可以进行对话; 3.完成各种硬件选型和硬件连接调试,小车硬件系统的组装; 4.完成了网页服务器的搭建,能实现局域网内通过 IP 访问网页; 5.完成了整体装置测试,实现设计功能要求。通过本平台可以学习 ROS 系统的基础知识。 本次设计中还存在一些问题和解决方式: 1.开机后需要通过终端进行 ROS 系统的启动,在实际应用中需要转换 成随系统自启动。 2.网页界面简陋,后期需要做出美化工作。网页存在 bug 需要修补。 3.由于安全证书的原因,网页 SSH 不能够很好的工作。 4.小车运动速度太慢,小车的驱动能力不够强。后期需要自己设计驱动, 增加驱动能力。 29 致谢 非常感谢北方工业大学四年的培养,北方工业大学不仅仅教会了我专业 知识也给予了我探索未知的勇气。非常感谢杨老师对我的课题的理解和支持, 杨老师一直鼓励着我去实践,通过实践不断的学习知识,增长经验。非常感 谢斯坦福实验室提供的 ROS 系统,谢谢好心网友给我提供的帮助。 30 主要参考文献 1 张建伟,张立伟,胡颖,张俊. 开源机器人操作系统ROSM. 科学出版社, 2012,09 2 Aaron Martinez Enrique Fernndez.ROS 机器人程序设计M.2014,09 3 王淑芳,电机驱动技术M.科学出版社,2008,10(3):90-94 4 叶青,周文远,宋宇,田建国. 一种实时视频采集处理系统的设计与实现 J. 光电子激光,2006,1 5 Michael Dawson.Python 编程初学者指南M.北京:人民邮电出版社. 2014,06 6 吉鹏,马云峰等. 微机原理与接口技术M. 北京:高等教育出版社, 2003.12 7 Jason M. OKane. A Gentle Introduction to ROSM,2013,10 8 潘光洋,蔡娜.Linux 从处学到入门M.电子工业出版社,2014,06 9 胡寿松. 自动控制原理M. 北京:科学出版社,2007 10胡向东. 传感器与检测技术M. 北京:机械工业出版社,2009 31 附件 1. 单片机代码 #include #include #include #include AF_DCMotor motor1(1); AF_DCMotor motor2(2); AF_DCMotor motor3(3); AF_DCMotor motor4(4); Servo myservo1,myservo2; / create servo object to control a servo / a maximum of eight servo objects can be created int pos1 = 90; / variable to store the servo1 position int pos2 = 90; / variable to store the servo2 position float temp,temp1; ros:NodeHandle nh; void M_controlCallBack( const geometry_msgs:Twist else if(Mrun.linear.x0) else T_left(); if(Mrun.linear.x0) temp=Mrun.linear.x*(-1); if(temp=Mrun.angular.z) G_backward(); else T_left(); delay(100); if(Mrun.linear.x0) else T_right(); delay(100); if(Mrun.linear.x=temp1) G_backward(); else T_right(); 34 void servoContollCallBack(const geometry_msgs:Twist if(Mrun.linear.x=2.0) pos1+=10; myservo1.write(pos1); if(Mrun.linear.x=3) pos2+=10; if(Mrun.linear.x=4) pos2-=10; myservo2.write(pos2); ros:SubscriberservoSub(“cmd_vel1“,servoContollCal lBack); ros:SubscribermotorSub(“cmd_vel“,M_controlCallB ack); void setup() nh.initNode(); nh.subscribe(motorSub); nh.subscribe(servoSub); 35 / turn on motor motor1.setSpeed(255); / turn on motor motor2.setSpeed(255); / turn on motor motor3.setSpeed(255); / turn on motor motor4.setSpeed(255); realse_car(); myservo1.attach(9); / attaches the servo on pin 9 to the servo object myservo2.attach(10); myservo2.write(90); myservo2.write(90); void loop() nh.spinOnce(); 36 void realse_car() motor1.run(RELEASE); motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); void G_forward() motor1.run(FORWARD); motor2.run(FORWARD); motor3.run(FORWARD); motor4.run(FORWARD); void G_backward() motor1.run(BACKWARD); motor2.run(BACKWARD); 37 motor3.run(BACKWARD); motor4.run(BACKWARD); void T_left() motor1.run(BACKWARD); motor2.run(BACKWARD); motor3.run(FORWARD); motor4.run(FORWARD); void T_right() motor1.run(FORWARD); motor2.run(FORWARD); motor3.run(BACKWARD); motor4.run(BACKWARD); 38 2. 网页代码 gui 39 Camera servo Joystick Info Terminal var isConnecting=false; 40 function mov_servo(connection, servo_div) his.init=function() /while(servo_div.hasChildNode() /servo_div.removeChild(servo_div.lastChild); servo_UpButton=document.createElement(“input“); servo_UpButton.type=“button“; servo_UpButton.id=“servo_up“; servo_UpButton.value=“UP“; servo_div.appendChild(servo_UpButton); servo_DownButton=document.createElement(“input“); servo_DownButton.type=“button“; servo_DownButton.id=“servo_down“; servo_DownButton.value=“Down“; servo_div.appendChild(servo_DownButton); servo_LeftButton=document.createElement(“input“); servo_LeftButton.type=“button“; servo_LeftButton.id=“servo_up“; 41 servo_LeftButton.value=“Left“; servo_div.appendChild(servo_LeftButton); servo_RightButton=document.createElement(“input“); servo_RightButton.type=“button“; servo_RightButton.id=“servo_right“; servo_RightButton.value=“Right“; servo_div.appendChild(servo_RightButton); servo_AdviseButton=document.createElement(“input“); servo_AdviseButton.type=“button“; servo_AdviseButton.id=“servo_advise“; servo_AdviseButton.value=“Advise“; servo_div.appendChild(servo_AdviseButton); servo_AdviseButton.addEventListener(click,function(msg)advertise(connect ion,/cmd_vel,geometry_msgs/Twist);,false); servo_UpButton.addEventListene
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旅游补充协议书
- 汽车工程原理与维修技术试题集解析
- 进口产品合作合同协议
- 清工劳务协议书
- 永大税务协议书
- 车辆转让协议和转让合同
- 轮值董事协议书范本
- 配电柜楼层使用协议合同
- 车辆运输协议合同书
- 转让定制衣柜合同协议
- 中小学生心理健康诊断测验MHT(附测试量表及评分细则)
- GB/T 19706-2015足球鞋
- GB/T 13096-2008拉挤玻璃纤维增强塑料杆力学性能试验方法
- GB/T 10612-2003工业用筛板板厚
- 微量泵的临床应用及护理体会
- 子宫及附件解剖及生理课件
- XBRL原理及四步法课件
- 中医治未病课件
- 2022年广州市中医院医护人员招聘笔试试题及答案解析
- 房建技术员施工员考试参考题库(含各题型)
- 建筑物理-采光设计课件
评论
0/150
提交评论