200 likes | 462 Views
先锋机器人基本编程操作. 目录. 1.Windows 系统与 Linux 系统 2. 先锋机器人控制结构 3. ARIA 开发手册 4. 先锋机器人开发例程 5. 编程实践. 1. Windows 系统与 Linux 系统. Linux 操作系统 20 世纪 90 年代推出的一个多用户、多任务的操作系统,它是一个源代码公开的自由及开放源码的操作系统,其内核源代码可以自由传播。 Linux 有各类发行版,通常为 GNU/Linux ,如 :Debian (及其衍生系统 Ubuntu 、 Linux Mint )、 Fedora 等。
E N D
目录 • 1.Windows系统与Linux系统 • 2.先锋机器人控制结构 • 3. ARIA开发手册 • 4.先锋机器人开发例程 • 5.编程实践
1. Windows系统与Linux系统 • Linux操作系统 • 20世纪90年代推出的一个多用户、多任务的操作系统,它是一个源代码公开的自由及开放源码的操作系统,其内核源代码可以自由传播。 • Linux有各类发行版,通常为GNU/Linux,如:Debian(及其衍生系统Ubuntu、Linux Mint)、Fedora等。 • Linux系统的主要特点:免费、可靠、安全、稳定、多平台 。 Winndows操作系统 • Windows是有微软公司成功开发的操作系统,它是一个多任务的操作系统,采用图形窗口界面,用户对计算机的各种复杂操作只需通过点击鼠标就可以实现。 • Windows操作系统的主要特点:直观高效,易学易用;用户界面统一、友好、美观;设备无关的图形操作;多任务。
开发工具 • Windows开发工具 • Windows下开发工具多以集成开发环境IDE的形式展现给最终用户,比如像VS2008集成了编辑器,宏汇编ml,C /C++编译器cl,资源编译器rc,调试器,文档生成工具, nmake。它们以集成方式提供给最终用户,对于初学者而言十分方便。 • Linux开发工具 • Linux开发工具被切割成一个个独立的小工具。各自处理不同的问题。例如,编辑器(emacs, vim)用来进行编辑程序的,调试器(gdb)用来调试程序,编译器(GCC)用来编译和链接程序的,性能分析工具(gcov, gprof)用来优化程序的,文档生成器(doxygen)用来生成文档的。我们是很有必要准备和了解一些linux系统知识和软件开发的相关知识。可 • 以去一些论坛,获取更多参考:http://www.linuxforum.net/等。
Aria在不同编译器下的使用方法 • Windows 推荐使用Microsoft Visual Studio .NET 2003 (MS Visual C++ 7.1),Visual C++ 2008 (VC9), or Visual C++ 2010 (VC10)编译器。若使用其它版本VisualC++,需要重新编译Aria库。工程相关配置如下: 1 头文件添加:Project->Properties->“All Configurations”->“C/C++” section->“General”->“AdditiInclude Directories” 里添加..\include 。 2 库文件添加 Project->Properties->“All Configurations”->“Linker” section-> “Input”-> 附加依赖项里加“Aria.lib winmm.lib wsock32.lib” 。 3 动态链接库 将aria 的include 文件夹拷到你自己的解决方案里;将aria.dll和aria.lib拷到项目里 程序运行: 程序在上位机编译完毕后,将生成的EXE文件传送到服务器主机。注意:EXE文件需要相应的动态链接库(置于同一目录下即可)才可以运行。
Aria在不同编译器下的使用方法 • Linux 在GNU/Linux系统中的编译工具:Make。 Aria Makefile 可以编译生成Aria目录下‘examples’, ‘tests’, ‘advanced’任何一个文件夹中的程序。例如:在‘examples’下有个‘newProgram.cpp’文件,则可以直接在Aria目录下运行'make examples/newProgram' 来编译生成该程序。 一个程序名字为 “program”,其源代码为:“program.cpp” ,要编译该程序的 Makefile文件内容大致如下: all: program CFLAGS=-fPIC -g -Wall ARIA_INCLUDE=-I/usr/local/Aria/include ARIA_LINK=-L/usr/local/Aria/lib -lAria -lpthread -ldl %: %.cpp $(CXX) $(CFLAGS) $(ARIA_INCLUDE) $< -o $@ $(ARIA_LINK)
2.先锋机器人控制结构 • 先锋机器人控制框图
先锋机器人控制结构 • Pioneer3 系列机器人控制系统采用上下两层的控制结构。其中,SH2微控制器作为底层的控制以及机器人本身传感器的数据采集处理器;车载计算机作为数据的信息处理器以及附件的扩展平台。 • 车载工控机通过自身的COM1 口与SH2 上的ACOS 进行通讯。彼此之间的指令和数据信息都通过ARIA接口进行封装,构成了一套完全封装好的通讯和控制对象,做到了软件的硬件无关性。 • ARIA是用于机器人控制的应用程序接口系统。该系统基于 C++ 语言,是一个可以简单、方便的用于先锋系列机器人的运动控制以及传感器操作的客户端软件。该软件具有强大的功能和适应性,是机器人高端软件编写的理想选择,先锋机器人基本软件系统都是以ARIA为基础的。 • ARIA及其demo程序的源代码完全公开,并向所有先锋用户提供终身免费升级。
3.Aria开发手册 • 概述 • Aria是一个针对C++开发人员的开发库,用来对Mobilerobots平台以及附件设备进行编程控制。ARIA还针对机器人编程开发提供了各种有用的软件工具。要使用Aria的开发人员应该熟悉一般的C++概念(类、对象),指针、内存管理、STL容器以及编译和链接等内容。 • 安装完Aria软件以后,在C:\Program Files\MobileRobots\Aria下有“Aria-Reference”链接,此为Aria开发手册。Aria开发主要的内容点有:Aria与机器人的C-S关系;机器人通讯;;ArRobot类;机器人任务周期等。
3-1 机器人的C-S关系 • Mobilerobots公司机器人产品延续了从先锋2代机器人采用的Client-Sever控制结构。该结构示意图如下: 执行运动指令 由里程计计算位置 获取传感器信息(声呐、罗盘等) 驱动附件设备(PTZ摄像头、TCM2等) 安装了Firmware 执行底层任务 Server COM ARIA 障碍物检测与避障传感器耦合 定位 制图 导航 机械臂运动 等等 WIN/Linux OS 执行应用层次任务 Client
3-2 机器人的通讯 Aria的角色帮助用户实现Client端的应用程序以及应用程序与Server端Firmware的通讯,其中也包含了对Sever端附件设备的通讯和管理。ArRobot类是Aria的核心,管理着Client与Server的通讯周期、读取机器人平台的运行状态信息、触发通讯周期内的特定任务等工作内容。 机器人的通讯即为建立ArRobot实例与机器人平台OS(也即Firmware)的连接关系。这里的机器人平台包含了机器人本体以及从机器人本体上的AUX端口、模拟/数字IO扩展出的附件设备(例如:声呐、抓持器、PTZ云台、先锋手臂、罗盘等)。但是对于SICK激光扫描仪、图像采集卡等设备则是直接连接到车载机上,并非机器人平台上。 ArRobot实例可以与机器人Firmware建立连接,也可以与仿真器建立连接,建立连接的过程由ArRobotConnector类实现。 ArRobotConnector建立ArRobot的连接时,首先会尝试通过本地TCP端口建立与MobileSim的连接,如果不成功则会进一步建立与Firmware的本地串口(COM1)连接。 同样,像ArLaserConnector类则是用来建立与激光扫描仪的连接。当然还有其它的connector用来建立其它设备的连接。
3-3 ArRobot类 ArRobot类是Aria的核心,它负责处理机器人的通讯管理、机器人运行状态读取与分析、同步程序的运行任务与回调等内容的工作。 ArRobot对C-S通讯的处理 机器人Client与Server之间通讯传输的基本单位是符合先锋数据协议的数据包,基本过程:Client发送指令数据包( Command Packets )给机器人,来控制机器人平台。Server端则将机器人状态信息数据包( Server Information Packets ,即“SIPs”) )发给Client端,应用程序解读分析机器人状态信息进行计算。 SIPs包含了机器人及附件设备的状态信息,每100ms由Server向Client发送一次。SIPs包含的具体内容有机器人的当前位置以及预期位置、平移和旋转速度、声呐信息、电池电压、模拟及数字I/O状态信息等。这些数据信息通过ArRobot的状态映射表来实现存储 和使用。
状态映射表 • 状态映射表是Aria处理机器人即时运行状态及运行数据的工具。这些状态及数据是从最新的SIPs中解析出来的,包括了预测位置、当前速度、电池电压等数据。 • ArRobot则通过调用类中的成员函数来实现状态映射,获取相关的数据。例如:ArRobot::getPose()来获取机器人当前位置, ArRobot::getX()用来获取机器人当前X轴坐标。 • 其它的相关函数还有: • ArRobot::getY(), ArRobot::getTh(), • ArRobot::getVel(), ArRobot::getRotVel(), • ArRobot::getBatteryVoltage(), • ArRobot::isLeftMotorStalled() • 等等。
机器人的任务周期 SIPs是以一定的周期发送的,Aria每收到一个SIP就会触发一个ArRobot任务处理周期。每个任务周期处理的任务有:SIP数据包解析、传感器数据处理、机器人行为处理、状态映射、用户任务处理。任务周期框图如下:
4.先锋机器人编程 4-1 Aria基本类及成员函数 ArRobot类 enableMotors();// 启动马达 disableMotors();//禁用马达 disconnect();// 断开连接 lock();unlock();// 锁定机器人实例,解除锁定,通常用来保护发给机器人的命令 findAngleTo(const ArPose pose);// 机器人当前位置到指定位置的绝对角度 findDeltaHeadingTo(const ArPose pose);//相对角度 findDistanceTo(const ArPose pose); //距离 move(1500); //前进1.5米 ArAction 高级行为类,封装了机器人的一些行为,比如壁障,移动等 class ArActionAvoidFront // 前方壁障的行为类 class ArActionGoto // 移动机器人到目的地的行为类 class ArActionColorFollow // 追踪颜色的行为类 class ArActionBumpers // 处理碰撞开关的行为类 class ArActionConstantVelocity // 以一个恒定的速度直走的行为类
4-1 Aria基本类及成员函数 ArPose setPose(double x, double y, double th = 0) ;setPose(ArPose position) ;// 设置机器人的位置 setX(100);setY(100);setTh(45);setThRad(1.33);// 设置具体的操作,最后一个为设置弧度同样的有获取位置信息的操作 getPose() ;// 获取机器人的位置 getX();getY();getT h();getThRad();// 获取具体的信息, findAngleTo(ArPose position) ;//到指定位置的角度 findDistanceTo(ArPose position) ;//距离 ArSimpleConnector 用于同机器人连接的类 setupRobot(ArRobot *robot);connectRobot(ArRobot *robot);//同机器人连接 connectSecondLaser(ArSick *sick);// 同激光器连接 ArDeviceConnection 一个基础的连接类, open();//打开连接 close();// 关闭连接 setPort();//设置端口 getPort();//获取端口
4-2 实践例程 #include "Aria.h" int main(int argc,char **argv) // 移动0.5m { ArRobot robot; Aria::init(); //初始化ArSimpleConnector connector(&argc,argv); if(!connector.parseArgs()||argc>1) { connector.logOptions(); exit(1); } if(!connector.connectRobot(&robot)) { printf("cound not connect to robot...exiting\n"); Aria::shutdown(); return 1; } robot.comInt(ArCommands::ENABLE,1); robot.comInt(ArCommands::SOUNDTOG,0); robot.runAsync(true); //启动机器人线程 robot.move(2*500); //机器人向前运动1000mm do { }while(!robot.isMoveDone());//检查机器人运动是否完成,否则进入空循环 robot.lock(); robot.disconnect(); //断开连接robot.unlock(); Aria::shutdown(); //退出 return 0; }
程序流程图 能否建立机器人连接 开始 否 是 机器人对象实例化 Aria参数初始化 连接类实例化 使能机器人 发出提示音 输出信息 退出 启动机器人线程 机器人运行 传递参数解析是否正确 结束 运动是否完成 否 否 是 录入传递参数 是 线程锁定 断开机器人连接 线程解锁 关闭机器人线程 退出 结束
实践例程 • 此例程控制机器人向前运动2*500mm的距离。在MobileSim中仿真如下:
更多例程 • 更多例程请参考: C:/Program%20Files/MobileRobots/Aria/docs/examples.html • actionExample.cpp • actionGroupExample.cpp • actsColorFollowingExample.cpp • armExample.cpp • auxSerialExample.cpp • configExample.cpp • demo.cppdirectMotionExample.cpp • dpptuExample.cppfunctorExample.cpp • gotoActionExample.cpp • sonarnlServer.cpp