先锋机器人pioneer-3DX主要类库函数

    xiaoxiao2021-03-25  196

    ARIA是为MobileRobots开发的,面向对象的,用于机器人控制的应用程序接口系统。该系统基于C++语言,是一个可以简单、方便的用于先锋系列机器人的运动控制以及传感器操作的客户端软件。该软件具有强大的功能和适应性,是机器人高端软件编写的理想选择,包括MobileSim在内的先锋机器人基本软件系统都是以ARIA为基础的。

    **ArRobot - 最基础的,也是最重要的ARIA类库:** enableMotors();//启动马达 disableMotors();//禁用马达 disconnect();//断开连接 lock();unlock();//锁定机器人实例,解除锁定,通常用来保护发给机器人的命令 findAngleTo(const ArPose pose);//机器人当前位置到指定位置的绝对角度 findDeltaHeadingTo(const ArPose pose);//相对角度 findDistanceTo(const ArPose pose); //距离 move(1500); //前进1.5米 setDeltaHeading(90); //左转90度,右转为负 setHeading(90);//转动绝对角度,初始朝向为0度 setRotVel(double velocity);//转动速度 setVel(50); getVel(); //设置/获取机器人速度 setVel2(50,100); //分别设置左右轮速度 getLeftVel();getRightVel();//获取两轮的速度 getSonarReading(i);//获得声纳的读数,i为声纳的序号,逆时针 getPose(); //获得机器人当前的位置 getTh(); getX(); getY(); //详细的信息,x,y, th checkRangeDevicesCurrentPolar(10,20);//检查所有传感器读数,获得10-20度的读数,返回一个最近距离 moveTo(ArPose pose,); //将机器人位置移动到pose这个位置,并不是真正移动,而是一个坐标变化 run(true) ; //启动机器人线程,以单线程方式 runAsync(true); //启动机器人线程,以多线程方式,参数为true,则如果机器人连接失去,则线程终止,为false则等待发送停止命令stop(void)后终止线程判断机器人状态的一些函数 isConnected(void);//是否连接 isMoveDone();//是否完成移动 isHeadingDone();//是否完成转动 isRunning();//是否在运行中 **ArPose - 和机器人位置相关的一个类** setPose(double x, double y, double th = 0) ;setPose(ArPose position) ;//设置机器人的位置 setX(100);setY(100);setTh(45);setThRad(1.33);//设置具体的操作,最后一个为设置弧度同样的有获取位置信息的操作 getPose() ;//获取机器人的位置 getX();getY();getTh();getThRad();//获取具体的信息,最后一个返回值为弧度 findAngleTo(ArPose position) ;//到指定位置的角度 findDistanceTo(ArPose position) ;//距离 ArSensorReading - 获取传感器数据的一个类,必须为一个传感器对象的实例。 getRange(void) ;//获取障碍物到机器人的距离 isNew() ;//当前的读数有没有更新 getPose(void) ;//获得传感器读数的位置信息(比如声纳返回的位置) getLocalPose(void);//局部坐标系中的位置 getPoseTaken(void);//获取读数发生时机器人的位置 getSensorPosition(void) ;//获取传感器在机器人上的位置信息 getCounterTaken(void) ;//当前是第几次读数 **ArRangeDevice - 控制所有传感器的一个类,声纳类ArSonarDevice,激光雷达类ArSick都是从这个类派生出来的。** getName(void);//获取传感器名字 setRobot(ArRobot *robot);//设置传感器连接的机器人getRobot(void) setCurrentBufferSize(size_t size);setCumulativeBufferSize(size_t size);//设置缓冲区 addReading(double x, double y);//增加一个读数 currentReadingPolar(double startAngle, double endAngle);//获取当前角度内读数的最小值 currentReadingBox(double x1, double y1, double x2, double y2);//获取当前给定区域的读数的最小值 getCurrentRangeBuffer(void);//获取当前读数的缓冲区 clearCurrentReadings(void);//清空所有当前读数 getRawReadings(void);//获得未经过处理的传感器得到的数据 setMaxRange(unsigned int maxRange);getMaxRange(void);//设置,获取传感器的最大测量范围 lockDevice();unlockDevice();//锁定设备,解除锁定 setMaxSecondsToKeepCurrent(int maxSecondsToKeepCurrent); getMaxSecondsToKeepCurrent();//获取/设定读数的保存时间 **ArSick** configure(false,true,false,ArSick::BAUD38400,ArSick::DEGREES180,ArSick::INCREMENT_HALF);//设定激光雷达参数,波特率,扫描角度,扫描间隔 setDeviceConnection(&con);//设置连接 runAsync();//启动线程 blockingConnect();//连接激光雷达 setSensorPosition(ArPose pose);//设置激光雷达在机器人上的位置 getSensorPosition();//获取位置 isUsingSim(void);//是否应用模拟器 其它一些用于连接的类 **ArSimpleConnector 用于同机器人连接的类** setupRobot(ArRobot *robot);connectRobot(ArRobot *robot);//同机器人连接 setupLaser(ArSick *sick);sick.runAsync();sick.blockingConnect() ;//必须运行后面两个才能连接 connectSecondLaser(ArSick *sick);//同激光器连接 ArDeviceConnection 一个基础的连接类,可以同机器人和模拟器连接,也可以用来连接激光雷达和其他的设备。 以下两个类为ArDeviceConnection的派生类 **ArSerialConnection通过串口连接设备 ArTcpConnection通过tcp/ip连接** open();//打开连接 close();//关闭连接 setPort();//设置端口 getPort();//获取端口 read(const char *data, unsigned int size, unsigned int msWait = 0); write(const char *data, unsigned int size);//读/写数据 openSimple(void);//连接并判断 ArAction - 这是一个比较高级的类,封装了机器人的一些行为,比如壁障,移动等等,我们要想实现自己的操作,可以从这个类派生。 class ArActionAvoidFront //前方壁障的行为类 class ArActionAvoidSide //侧面壁障的行为类 class ArActionGoto //移动机器人到目的地的行为类 class ArActionColorFollow //追踪颜色的行为类 class ArActionBumpers //处理碰撞开关的行为类 class ArActionConstantVelocity //以一个恒定的速度直走的行为类

    例程:

    #include "Aria.h“ int main(int argc,char **argv)//移动0.5m { Aria::init(); //初始化 ArRobot robot; 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(500); //机器人向前移动500mm do { }while(!robot.isMoveDone());//检查机器人动作是否完成,否则循环等待 robot.lock(); robot.disconnect(); //断开连接 robot.unlock(); Aria::shutdown(); //退出 return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-5665.html

    最新回复(0)