先鋒機器人學習筆記_1-5 Aria 編程基礎

Aria函數開發手冊可以在以下路徑找到:

C 或 D:\Program Files\MobileRobots\ARIA\Aria-Reference.html
C 或 D:\Program Files\MobileRobots\ARIA\ArNetworking\ArNetworkingReference.html
C 或 D:\Program Files\MobileRobots\ARNL\docs\
BaseArnl-Reference.html &

ARNL-Reference.html & SONARNL-Reference.html


    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;
} 


發佈了57 篇原創文章 · 獲贊 22 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章