亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? server.cpp

?? Linux下多移動機器人服務器端通訊程序
?? CPP
字號:
#include "Aria.h"//Server可以處理的命令字#define HelloToServer  1#define RobotStatus    2#define ShutdownServer 3#define RobotMove      4#define RobotStop      5#define RobotVel       6#define RobotRotVel    7#define SetHeading     8#define RobotRotate    9#define	Setting        10struct MsgRFC {//機器人上的Server從PC上Client接受到的信息msg1	double	coordx;	double	coordy;	double	th;	double	distance;	double  robRotAngle;	double	vel;	int		comm;	//請求命令};struct MsgSTC {//PC上Client從機器人上的Server接受到的信息msg2	double	posX;	double	posy;	double	th;	double	vel;	double	rotVel;	double  front_range;	double  left_range;	double  right_range;	char	buffer[20];};ArRobot robot;ArSonarDevice sonar;ArKeyHandler keyHandler;ArSerialConnection serConn;ArTcpConnection tcpConn;class ConnectHandler{public:	// Constructor	ConnectHandler(ArRobot *robot);	// Destructor, its just empty	~ConnectHandler(void) {};	// to be called if the connection was made	void connected(void);	// to call if the connection failed	void connFail(void);	// to be called if the connection was lost	void disconnected(void);	protected:	// robot pointer	ArRobot *myRobot;	ArFunctorC<ConnectHandler> myConnectedCB;	ArFunctorC<ConnectHandler> myConnFailCB;	ArFunctorC<ConnectHandler> myDisconnectedCB;};ConnectHandler::ConnectHandler(ArRobot *robot) :myConnectedCB(this, &ConnectHandler::connected),  myConnFailCB(this, &ConnectHandler::connFail),myDisconnectedCB(this, &ConnectHandler::disconnected){	// set the robot pointer	myRobot = robot;		myRobot->addConnectCB(&myConnectedCB, ArListPos::FIRST);	myRobot->addFailedConnectCB(&myConnFailCB, ArListPos::FIRST);	myRobot->addDisconnectNormallyCB(&myDisconnectedCB, ArListPos::FIRST);	myRobot->addDisconnectOnErrorCB(&myDisconnectedCB, ArListPos::FIRST);}// just exit if the connection failedvoid ConnectHandler::connFail(void){	printf("Failed to connect.\n");	myRobot->stopRunning();	Aria::shutdown();	return;}// turn on motors, and off sonar, and off amigobot sounds, when connectedvoid ConnectHandler::connected(void){	printf("Connected\n");	// turn off the sonar, enable the motors, turn off amigobot sounds	myRobot->comInt(ArCommands::SONAR, 0);	myRobot->comInt(ArCommands::ENABLE, 1);	myRobot->comInt(ArCommands::SOUNDTOG, 0);}// lost connection, so just exitvoid ConnectHandler::disconnected(void){	printf("Lost connection\n");	myRobot->stopRunning();	ArThread::stopAll();//	exit(0);	return;}class mythread : public ArASyncTask{public:	// Constructor	mythread(ArMutex *mStatue, ArMutex *mReq, MsgRFC *pMsgR, MsgSTC *pMsgS,		bool *pbSendReady, bool *pbNewOrder);	// Destructor	~mythread(){};		void *runThread(void *arg)	{		// The string to send to the client. Done here as a char array so that its		// easier to figure out its length.		char strToSend[]="Hello Client1\n";		// The buffer in which to recieve the hello from the client		char buff[100];		// The size of the string the client sent		size_t  strSize;		bool	bExit;		bExit = false;		// The socket object		ArSocket serverSock, clientSock;		ArRobot  robot;		// Lets open the server socket		if (serverSock.open(7171, ArSocket::TCP))		{			printf("Opened the server port\n");		}		else		{			printf("Failed to open the server port: %s\n",serverSock.getErrorStr().c_str());			return(NULL);		}				while (!bExit) 		{			// Lets wait for the client to connect to us.			if (serverSock.accept(&clientSock))				printf("Client has connected\n");			else				printf("Error in accepting a connection from the client: %s\n",serverSock.getErrorStr().c_str());			strSize=clientSock.read(buff, sizeof(buff));			if (strSize == sizeof(MsgRFC))			{				if (((MsgRFC *)buff)->comm == HelloToServer) 				{								//say hello to client					MsgSTC submsgS;					printf("send msg size %d",sizeof(MsgSTC));					for(int i=0;i<sizeof(strToSend);i++) submsgS.buffer[i]=strToSend[i];										if (clientSock.write(&submsgS, sizeof(MsgSTC)) == sizeof(MsgSTC))					{						printf("Said hello to the client\n");						goto end;					}					else					{						printf("Error in sending hello string to the client\n");						return(NULL);					}				}								if (((MsgRFC *)buff)->comm == RobotStatus) 				{							//say hello to client					MsgSTC submsgS;										mutexRobotStatue->lock();					submsgS.posX   = pMsgS->posX;					submsgS.posy   = pMsgS->posy;					submsgS.rotVel = pMsgS->rotVel;					submsgS.th     = pMsgS->th;					submsgS.vel    = pMsgS->vel;					submsgS.front_range=pMsgS->front_range;					submsgS.left_range=pMsgS->left_range;					submsgS.right_range=pMsgS->right_range;					mutexRobotStatue->unlock();										if (clientSock.write(&submsgS, sizeof(MsgSTC)) == sizeof(MsgSTC))					{						printf("had sent the robot statue info to client\n");						goto end;					}					else					{						printf("Error in sending hello string to the client\n");						return(NULL);					}				}				if (((MsgRFC *)buff)->comm == ShutdownServer)					bExit = true;								mutexRequire->lock();				pMsgR->comm = ((MsgRFC *)buff)->comm;				pMsgR->coordx = ((MsgRFC *)buff)->coordx;				pMsgR->coordy = ((MsgRFC *)buff)->coordy;				pMsgR->distance = ((MsgRFC *)buff)->distance;				pMsgR->robRotAngle = ((MsgRFC *)buff)->robRotAngle;				pMsgR->th = ((MsgRFC *)buff)->th;				pMsgR->vel = ((MsgRFC *)buff)->vel;				printf("get the order from client!!");				mutexRequire->unlock();								*pbGetNewOrder = true;				printf("get the order from client!");			}						else 			{				printf("the order length not right!");				goto end;			}						printf("receive size= %d \n",strSize);			// Now lets close the connection to the clientend:	    clientSock.close();			printf("Socket to client closed\n");		}		serverSock.close();		printf("Server socket closed\n");		printf("%d\n", clientSock.getFD());		return(NULL);			}protected:private:	ArMutex		*mutexRobotStatue;	ArMutex		*mutexRequire;	MsgRFC		*pMsgR;	MsgSTC		*pMsgS;	bool		*pbmsgSReady;	bool		*pbGetNewOrder;};mythread::mythread(ArMutex *mStatue, ArMutex *mReq, MsgRFC *pMsgR, MsgSTC *pMsgS,				   bool *pbSendReady, bool *pbNewOrder):mutexRobotStatue(mStatue),mutexRequire(mReq),pMsgR(pMsgR),pMsgS(pMsgS),pbmsgSReady(pbSendReady),pbGetNewOrder(pbNewOrder){};void quit(void){    printf("quit\n");    printf("exiting\n");    keyHandler.restore();    ArLog::log(ArLog::Terse, "Quit was pressed, program is Quitting.");	robot.stopRunning();	robot.disconnect();	ArThread::stopAll();	tcpConn.close();	//    Aria::shutdown();//加入此句將不能以"press any key to continue"退出程序	Aria::uninit();    exit(0);	//	return;}int main(){	MsgRFC  MsgR;	MsgSTC	MsgS;	bool	bmsgSReady;	bool	bGetNewOrder;	bool	bShutDown;	bool    usingSim;	ArMutex mStatue;	ArMutex mReq;	MsgRFC  subMsgR;		//ArRobot robot;	//	ArSonarDevice sonar;	//	ArKeyHandler keyHandler;			bGetNewOrder = false;	bShutDown    = false;	bmsgSReady   = false;	mythread serverthread(&mStatue, &mReq, &MsgR, &MsgS , &bmsgSReady, &bGetNewOrder);	ConnectHandler ch(&robot);	//ArSerialConnection serConn;	//	ArTcpConnection tcpConn;	 		//Aria::init();		// init area with a dedicated signal handling thread	Aria::init();	ArGlobalFunctor quitCB(&quit);	keyHandler.addKeyHandler('q', &quitCB);	Aria::setKeyHandler(&keyHandler);	robot.attachKeyHandler(&keyHandler,false);//false表示按下esc不斷開連接	// add the sonar to the robot	robot.addRangeDevice(&sonar);	//	Aria::setKeyHandler(&keyHandler);//	robot.attachKeyHandler(&keyHandler);		// modify this next line if you're not using default tcp connection	tcpConn.setPort();		// see if we can get to the simulator  (true is success)	if (tcpConn.openSimple())	{		// we could get to the sim, so set the robots device connection to the sim		printf("Connecting to simulator through tcp.\n");		robot.setDeviceConnection(&tcpConn);		usingSim = true;	}	else	{		// we couldn't get to the sim, so set the port on the serial		// connection and then set the serial connection as the robots		// device				// modify the next line if you're not using the first serial port		// to talk to your robot		serConn.setPort();		printf(			"Could not connect to simulator, connecting to robot through serial.\n");		robot.setDeviceConnection(&serConn);		usingSim = false;	}		// try to connect, if we fail exit	if (!robot.blockingConnect())	{		printf("Could not connect to robot... exiting\n");		Aria::shutdown();		return 1;	}		robot.comInt(ArCommands::SONAR, 1);    robot.comInt(ArCommands::SOUNDTOG, 0);	serverthread.create();	robot.runAsync(true);	sonar.lockDevice();	sonar.setMaxRange(2000);	sonar.unlockDevice();	while (!bShutDown) 	{		mStatue.lock();		MsgS.posX = robot.getX();		MsgS.posy = robot.getY();		MsgS.th = robot.getTh();		MsgS.rotVel = robot.getRotVel();		MsgS.front_range=sonar.currentReadingPolar(-30,30);		MsgS.left_range=sonar.currentReadingPolar(50,90);		MsgS.right_range=sonar.currentReadingPolar(-90,-50);		mStatue.unlock();				bmsgSReady = true;		if(bGetNewOrder == true)		{			mReq.lock();			subMsgR = MsgR;			mReq.unlock();			ArPose setPose(subMsgR.coordx,subMsgR.coordy,subMsgR.th);			switch(subMsgR.comm) 			{			case Setting:					robot.moveTo(setPose, true);				printf("send the setpos order");				break;			case RobotMove:				robot.lock();				robot.move(subMsgR.distance);				robot.unlock();				break;			case RobotStop:				robot.lock();				robot.stop();				robot.unlock();				break;			case RobotVel:				robot.lock();				robot.setVel(subMsgR.vel);				robot.unlock();				break;			case RobotRotVel:				robot.lock();				robot.setRotVel(subMsgR.vel);				robot.unlock();				break;			case SetHeading:				robot.lock();				robot.setHeading(subMsgR.th);				robot.unlock();				break;			case RobotRotate:				robot.lock();				robot.setDeltaHeading(subMsgR.robRotAngle);				robot.unlock();				break;			case ShutdownServer:				bShutDown = true;				robot.lock();				robot.stop();				robot.unlock();				break;			default:				ArUtil::sleep(5);				break;			}			bGetNewOrder=false;		}		ArUtil::sleep(500);	}	serverthread.stopRunning();//	Aria::uninit();	Aria::shutdown();//	return(0);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区三区在线观看| 欧美国产乱子伦| 国产寡妇亲子伦一区二区| 亚洲女人小视频在线观看| 日韩免费性生活视频播放| 91在线视频网址| 国产综合成人久久大片91| 一区二区三区四区国产精品| 精品99一区二区| 欧美日韩一级片网站| 不卡影院免费观看| 激情成人综合网| 午夜精品福利在线| 亚洲人成小说网站色在线| 久久久www成人免费毛片麻豆| 欧美精品 国产精品| 色综合色综合色综合色综合色综合| 国产一区二区精品久久91| 肉色丝袜一区二区| 亚洲国产日日夜夜| 亚洲欧美另类小说| 国产精品国产三级国产三级人妇| 欧美精品一区二区三区一线天视频| 欧美日韩精品专区| 欧美亚洲尤物久久| 色激情天天射综合网| 不卡大黄网站免费看| 丰满岳乱妇一区二区三区| 狠狠色伊人亚洲综合成人| 另类中文字幕网| 久久精品国产一区二区三区免费看| 亚洲国产一区二区在线播放| 一区二区三区四区精品在线视频| 中文字幕永久在线不卡| 国产精品私人自拍| 国产精品成人免费精品自在线观看 | 国产成人高清在线| 国产麻豆9l精品三级站| 国产综合久久久久久久久久久久| 久久国产剧场电影| 捆绑变态av一区二区三区| 日本aⅴ免费视频一区二区三区| 五月婷婷激情综合| 日韩电影在线免费| 麻豆一区二区三区| 日本美女一区二区三区视频| 日本伊人色综合网| 老司机精品视频在线| 久久不见久久见免费视频7| 国内精品嫩模私拍在线| 国产成人精品影视| 日韩视频中午一区| 亚洲精品一区在线观看| 久久九九99视频| 中文字幕在线一区二区三区| 亚洲男人的天堂在线aⅴ视频| 伊人色综合久久天天人手人婷| 亚洲已满18点击进入久久| 丝袜美腿高跟呻吟高潮一区| 久久电影网站中文字幕| 国产精品亚洲第一| 91在线观看一区二区| 欧美丝袜自拍制服另类| 日韩欧美国产高清| 国产日韩欧美不卡| 一区二区成人在线视频| 免费日本视频一区| 成人一道本在线| 日本高清不卡视频| 日韩一区二区中文字幕| 国产性天天综合网| 一区二区三区国产精品| 免费一级欧美片在线观看| 国产不卡在线视频| 欧美午夜寂寞影院| 精品国产91洋老外米糕| 亚洲欧美影音先锋| 日韩高清国产一区在线| 东方欧美亚洲色图在线| 91福利社在线观看| 2021国产精品久久精品| 亚洲柠檬福利资源导航| 精品亚洲成a人在线观看 | 日韩一区二区三区av| 国产片一区二区三区| 亚洲大片精品永久免费| 国产精品一级二级三级| 欧美探花视频资源| 亚洲国产成人一区二区三区| 天堂久久久久va久久久久| 成人一区二区三区视频| 欧美一二三四在线| 亚洲欧美日韩国产综合| 精品综合久久久久久8888| 欧洲亚洲国产日韩| 国产日产欧产精品推荐色| 午夜久久久影院| 91在线精品秘密一区二区| 精品国产一区二区三区不卡 | 国产不卡视频一区二区三区| 欧美日韩国产高清一区二区 | 国内成人免费视频| 欧美久久婷婷综合色| 国产精品久久久久久久久免费相片| 午夜电影久久久| 91免费精品国自产拍在线不卡| 亚洲精品在线免费观看视频| 午夜日韩在线电影| 欧美综合一区二区| 亚洲欧美综合在线精品| 国产在线播放一区| 91精品国产综合久久久久久久 | 日本国产一区二区| 国产精品久久久久久久久久免费看| 日韩1区2区日韩1区2区| 欧美亚洲综合网| 自拍视频在线观看一区二区| 国内外精品视频| 4438x亚洲最大成人网| 亚洲高清不卡在线| 91国产丝袜在线播放| 亚洲欧洲一区二区在线播放| 成人在线视频一区| 国产婷婷色一区二区三区四区| 麻豆成人综合网| 日韩午夜激情电影| 美女国产一区二区三区| 欧美久久久久免费| 午夜精品久久久久久久蜜桃app| 在线视频你懂得一区二区三区| 一区精品在线播放| 91视频www| 亚洲精品日韩一| 99精品桃花视频在线观看| 中文字幕亚洲在| 成人综合婷婷国产精品久久免费| 国产欧美日韩综合| 成人av资源下载| 亚洲色图清纯唯美| 在线观看国产日韩| 天天av天天翘天天综合网 | 日韩欧美在线观看一区二区三区| 性做久久久久久免费观看欧美| 精品视频1区2区3区| 偷窥少妇高潮呻吟av久久免费| 在线播放中文一区| 麻豆91小视频| 久久免费午夜影院| 不卡视频在线观看| 一个色妞综合视频在线观看| 精品视频一区 二区 三区| 日韩精品一二区| 欧美成人激情免费网| 国产精品一级在线| 亚洲欧美色一区| 欧美日韩不卡一区二区| 久久精品免费看| 国产精品久久久久aaaa| 色狠狠色狠狠综合| 日本中文字幕一区二区有限公司| 精品国产精品一区二区夜夜嗨| 成人精品国产福利| 亚洲一区二区欧美日韩| 欧美电视剧在线看免费| 成人动漫视频在线| 亚洲午夜私人影院| 精品捆绑美女sm三区| 盗摄精品av一区二区三区| 亚洲激情在线播放| 欧美成人精品1314www| av成人免费在线观看| 亚洲国产综合色| 久久久欧美精品sm网站 | 久久综合久久99| 99精品偷自拍| 美女视频黄久久| 亚洲视频在线一区观看| 欧美一区二区黄| caoporn国产精品| 日本成人超碰在线观看| 欧美国产精品一区二区| 欧美视频第二页| 国产精品亚洲视频| 丝袜美腿一区二区三区| 国产精品人成在线观看免费| 欧美日韩国产区一| 成人av在线播放网址| 欧美视频三区在线播放| 国产成人免费视| 全部av―极品视觉盛宴亚洲| 国产精品久久久久久久岛一牛影视| 欧美精品第1页| 色综合视频一区二区三区高清| 狠狠色综合播放一区二区| 亚洲国产一区视频| 亚洲欧洲日韩一区二区三区| 精品久久久久一区二区国产| 欧洲精品一区二区| 高清在线观看日韩| 久久99蜜桃精品|