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

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

?? arm_main.c

?? 卡內基梅隆大學(CMU)開發的移動機器人控制開發軟件包。可對多種機器人進行控制
?? C
字號:
/********************************************************* * * This source code is part of the Carnegie Mellon Robot * Navigation Toolkit (CARMEN) * * CARMEN Copyright (c) 2002 Michael Montemerlo, Nicholas * Roy, Sebastian Thrun, Dirk Haehnel, Cyrill Stachniss, * and Jared Glover * * CARMEN is free software; you can redistribute it and/or  * modify it under the terms of the GNU General Public  * License as published by the Free Software Foundation;  * either version 2 of the License, or (at your option) * any later version. * * CARMEN is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE.  See the GNU General Public License for more  * details. * * You should have received a copy of the GNU General  * Public License along with Foobar; if not, write to the * Free Software Foundation, Inc., 59 Temple Place,  * Suite 330, Boston, MA  02111-1307 USA * ********************************************************/#include <carmen/carmen.h>#include <carmen/arm_messages.h>#include "arm_low_level.h"void x_ipcRegisterExitProc(void (*)(void));static char *model_name;static char *dev_name;static char* host;static int num_joints;static double reset_time;static carmen_arm_state_message arm_state;static int min( int a, int b ) {  return ( b < a ? b : a );}static int initialize_arm(void){  int result;  //char *host;  result = carmen_arm_direct_initialize(model_name, dev_name);  if (result < 0)     return -1;  reset_time = carmen_get_time();  host = carmen_get_tenchar_host_name();  //strcpy(arm_state.host, host);         return 0;}static void initialize_arm_message(carmen_arm_state_message * arm){  arm->num_joints = num_joints;  if( num_joints > 0 ) {    arm->joint_angles = (double*)calloc( num_joints, sizeof( double ) );    carmen_test_alloc( arm->joint_angles );    if( USE_ARM_CURRENT_STATES ) {      arm->flags |= USING_CURRENTS_MASK;      arm->num_currents = min( num_joints, 2 ); // ORC board max limit      arm->joint_currents = (double*)calloc( arm->num_currents, sizeof( double ) );      carmen_test_alloc( arm->joint_currents );    }    if( USE_ARM_ANGULAR_VEL_STATES ) {      arm->flags |= USING_ANGULAR_VEL_MASK;      arm->num_vels = min( num_joints, 2 ); // rssII Arm limit      arm->joint_angular_vels = (double*)calloc( arm->num_vels, sizeof( double ) );      carmen_test_alloc( arm->joint_angular_vels );    }  }}static int read_parameters(int argc, char **argv){  int num_items;  carmen_param_t param_list[] = {    { "arm", "dev", CARMEN_PARAM_STRING, &dev_name, 0, NULL},    { "arm", "num_joints", CARMEN_PARAM_INT, &num_joints, 0, NULL },  };    num_items = sizeof(param_list)/sizeof(param_list[0]);  carmen_param_install_params(argc, argv, param_list, num_items);  if (num_joints > 0) {    initialize_arm_message(&arm_state);  }  return 0;}static void arm_query_handler(MSG_INSTANCE msgRef, 			      BYTE_ARRAY callData __attribute__ ((unused)),			      void *clientData __attribute__ ((unused))){  IPC_RETURN_TYPE err;  carmen_arm_state_message response;  // set the number of joints and allocate memory  response.num_joints = num_joints;  response.num_currents = arm_state.num_currents;  response.flags = arm_state.flags;  if( response.num_joints > 0 ) {    response.joint_angles = (double*)calloc( response.num_joints, sizeof( double ) );    carmen_test_alloc( response.joint_angles );  }  if( response.num_currents > 0 ) {    response.joint_currents = (double*)calloc( response.num_currents, sizeof( double ) );    carmen_test_alloc( response.joint_currents );  }  // specific to rssII Arm 11/10/05  if( response.num_joints == 3 &&       ( response.flags & USING_ANGULAR_VEL_MASK ) &&        response.num_vels == 2 ) {        // set thetas and angular velocities      carmen_arm_get_theta_state( &response.joint_angles[ 0 ], &response.joint_angles[ 1 ], &response.joint_angles[ 2 ] );    carmen_arm_get_state( &response.joint_angular_vels[ 0 ], &response.joint_angular_vels[ 1 ] );  } else {      // fill with zeros    if( response.num_joints > 0 )      memset( response.joint_angles, 0, response.num_joints * sizeof( double ) );    if( response.num_currents > 0 )      memset( response.joint_currents, 0, response.num_currents * sizeof( double ) );    if( response.num_vels > 0 )      memset( response.joint_angular_vels, 0, response.num_vels * sizeof( double ) );      }  response.timestamp = carmen_get_time();  strcpy(response.host, carmen_get_tenchar_host_name());  err = IPC_respondData(msgRef, CARMEN_ARM_STATE_NAME, &response);  // free up the allocated memory  if( response.num_joints > 0 )    free( response.joint_angles );  if( response.num_currents > 0 )    free( response.joint_currents );  if( response.num_vels > 0 )    free( response.joint_angular_vels );}static void arm_command_handler(MSG_INSTANCE msgRef, BYTE_ARRAY callData,				void *clientData __attribute__ ((unused))){  IPC_RETURN_TYPE err;  carmen_arm_command_message msg;  FORMATTER_PTR formatter;  formatter = IPC_msgInstanceFormatter(msgRef);  err = IPC_unmarshallData(formatter, callData, &msg,			   sizeof(carmen_arm_command_message));  IPC_freeByteArray(callData);    // rssII Arm 11/10/05 specific  if( msg.num_joints == 3 ) {    carmen_arm_direct_set( msg.joint_angles[ 0 ], msg.joint_angles[ 1 ], msg.joint_angles[ 2 ] );  } else {        // this is NOT a correct RssII Arm message, just ignore it but warn user    carmen_warn( "Received Incorrect Arm Message\n" );  }  // free data in msg  if( msg.num_joints > 0 )    free( msg.joint_angles );}static void reset_handler(MSG_INSTANCE msgRef, BYTE_ARRAY callData,			  void *clientData __attribute__ ((unused))){  IPC_RETURN_TYPE err;  int base_err;  carmen_base_reset_message msg;  FORMATTER_PTR formatter;    formatter = IPC_msgInstanceFormatter(msgRef);  err = IPC_unmarshallData(formatter, callData, &msg,			   sizeof(carmen_base_reset_message));  IPC_freeByteArray(callData);  carmen_test_ipc_return(err, "Could not unmarshall", 			 IPC_msgInstanceName(msgRef));  do     {      base_err = carmen_arm_direct_reset();      //Edsinger: Reset hack      if (base_err < 0)	initialize_arm();    }  while (base_err < 0);}int carmen_arm_initialize_ipc(void){  IPC_RETURN_TYPE err;  err = IPC_defineMsg(CARMEN_ARM_COMMAND_NAME, IPC_VARIABLE_LENGTH,                      CARMEN_ARM_COMMAND_FMT);  carmen_test_ipc_exit(err, "Could not define", CARMEN_ARM_COMMAND_NAME);  err = IPC_defineMsg(CARMEN_ARM_QUERY_NAME, IPC_VARIABLE_LENGTH,                      CARMEN_ARM_QUERY_FMT);  carmen_test_ipc_exit(err, "Could not define", 		       CARMEN_ARM_QUERY_NAME);  err = IPC_defineMsg(CARMEN_ARM_STATE_NAME, IPC_VARIABLE_LENGTH,                      CARMEN_ARM_STATE_FMT);  carmen_test_ipc_exit(err, "Could not define", 		       CARMEN_ARM_STATE_NAME);  /* setup incoming message handlers */  err = IPC_subscribe(CARMEN_ARM_RESET_COMMAND_NAME, reset_handler, NULL);  carmen_test_ipc_exit(err, "Could not subscribe", 		       CARMEN_ARM_RESET_COMMAND_NAME);  IPC_setMsgQueueLength(CARMEN_ARM_RESET_COMMAND_NAME, 1);  err = IPC_subscribe(CARMEN_ARM_COMMAND_NAME, arm_command_handler, NULL);  carmen_test_ipc_exit(err, "Could not subscribe", CARMEN_ARM_COMMAND_NAME);  IPC_setMsgQueueLength(CARMEN_ARM_COMMAND_NAME, 1);  err = IPC_subscribe(CARMEN_ARM_QUERY_NAME, arm_query_handler, NULL);  carmen_test_ipc_exit(err, "Could not subscribe", CARMEN_ARM_QUERY_NAME);  // Yes, unlike the others, this should be 100 so that we don't drop  // any queries on the floor.  IPC_setMsgQueueLength(CARMEN_ARM_QUERY_NAME, 100);  return IPC_No_Error;}int carmen_arm_start(int argc, char **argv){  if (read_parameters(argc, argv) < 0)    return -1;  if (carmen_arm_initialize_ipc() < 0) {    carmen_warn("\nError: Could not initialize IPC.\n");    return -1;  }    if(initialize_arm() < 0) {    carmen_warn("\nError: Could not connect to robot on %s. "		"Did you remember to turn the base on?\n", dev_name);    return -1;  }  strcpy(host, carmen_get_tenchar_host_name());  // velezj: RssII Arm  carmen_arm_reset();  return 0;}int carmen_arm_run(void) {  IPC_RETURN_TYPE err;  int arm_err;  //static carmen_arm_reset_message reset;    do {    arm_err = carmen_arm_direct_update_status();    if (arm_err < 0)      initialize_arm();  } while (arm_err < 0);          // velezj: added for rssII arm PID controller loop  carmen_arm_control();  // send out arm status message  carmen_arm_state_message response;  // set the number of joints and allocate memory  response.num_joints = num_joints;  response.num_currents = arm_state.num_currents;  response.num_vels = arm_state.num_vels;  response.flags = arm_state.flags;  if( response.num_joints > 0 ) {    response.joint_angles = (double*)calloc( response.num_joints, sizeof( double ) );    carmen_test_alloc( response.joint_angles );  }  if( response.num_currents > 0 ) {    response.joint_currents = (double*)calloc( response.num_currents, sizeof( double ) );    carmen_test_alloc( response.joint_currents );  }  if( response.num_vels > 0 ) {    response.joint_angular_vels = (double*)calloc( response.num_vels, sizeof( double ) );    carmen_test_alloc( response.joint_angular_vels );  }  // specific to rssII Arm 11/10/05  if( response.num_joints == 3 &&       ( response.flags & USING_ANGULAR_VEL_MASK ) &&        response.num_vels == 2 ) {        // set thetas and angular velocities      carmen_arm_get_theta_state( &response.joint_angles[ 0 ], &response.joint_angles[ 1 ], &response.joint_angles[ 2 ] );    carmen_arm_get_state( &response.joint_angular_vels[ 0 ], &response.joint_angular_vels[ 1 ] );  } else {      // fill with zeros    if( response.num_joints > 0 )      memset( response.joint_angles, 0, response.num_joints * sizeof( double ) );    if( response.num_currents > 0 )      memset( response.joint_currents, 0, response.num_currents * sizeof( double ) );    if( response.num_vels > 0 )      memset( response.joint_angular_vels, 0, response.num_vels * sizeof( double ) );      }  response.timestamp = carmen_get_time();  strcpy(response.host, carmen_get_tenchar_host_name());  err = IPC_publishData(CARMEN_ARM_STATE_NAME, &response);  carmen_test_ipc_exit( err, "Could not publish", CARMEN_ARM_STATE_NAME );  // free up the allocated memory  if( response.num_joints > 0 )    free( response.joint_angles );  if( response.num_currents > 0 )    free( response.joint_currents );  if( response.num_vels > 0 )    free( response.joint_angular_vels );   carmen_publish_heartbeat("arm_daemon");   return 1;}void carmen_arm_shutdown(void){  carmen_verbose("\nShutting down robot...");  carmen_arm_direct_shutdown();  exit(0);}static void shutdown_arm(int signo __attribute__ ((unused))){  carmen_arm_shutdown();}int  main(int argc __attribute__ ((unused)), 	  char **argv __attribute__ ((unused))){  carmen_initialize_ipc(argv[0]);  carmen_param_check_version(argv[0]);  signal(SIGINT, shutdown_arm);				  x_ipcRegisterExitProc(carmen_arm_shutdown);  if (carmen_arm_start(argc, argv) < 0)    exit(-1);  while(1) {    if (carmen_arm_run() == 1)      fprintf(stderr, "~");    sleep_ipc(0.1);  }  return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品国产精品乱码不99| 风间由美一区二区三区在线观看| 美女脱光内衣内裤视频久久影院| 国产经典欧美精品| 欧美精品色一区二区三区| 中文字幕av一区二区三区免费看| 五月天欧美精品| 99re成人精品视频| 日韩欧美在线网站| 午夜精品久久久久久久久久| 成人一区二区三区视频在线观看| 欧美一区二区三区在| 一区二区三区在线免费播放| 国产aⅴ综合色| 2023国产精品| 琪琪一区二区三区| 5566中文字幕一区二区电影| 亚洲欧洲日韩在线| 国产jizzjizz一区二区| 久久综合狠狠综合久久综合88 | 国产伦精品一区二区三区免费迷| 欧美日韩亚洲不卡| 亚洲一区二区三区在线看| 97se狠狠狠综合亚洲狠狠| 欧美韩日一区二区三区四区| 国产精品69毛片高清亚洲| 2014亚洲片线观看视频免费| 麻豆91在线观看| 日韩视频免费观看高清完整版| 日日骚欧美日韩| 日韩一区和二区| 精品一二三四区| 精品成人佐山爱一区二区| 国产中文字幕一区| 久久久www成人免费无遮挡大片| 国产精品自在欧美一区| 国产三级精品三级在线专区| 国产在线观看一区二区| 国产欧美日韩激情| jlzzjlzz亚洲日本少妇| 亚洲天堂2016| 欧美日韩综合在线免费观看| 日韩—二三区免费观看av| 欧美肥妇bbw| 国产在线视频精品一区| 欧美国产一区视频在线观看| av在线播放成人| 亚洲午夜激情av| 91精品欧美久久久久久动漫| 九九视频精品免费| 欧美极品美女视频| www.久久久久久久久| 一区二区三区av电影 | 午夜在线电影亚洲一区| 欧美丰满少妇xxxxx高潮对白| 蜜桃av噜噜一区| 久久精品视频在线免费观看| 97精品超碰一区二区三区| 五月激情综合色| 26uuu另类欧美亚洲曰本| 99久久精品国产导航| 天堂在线亚洲视频| 欧美激情一区二区三区全黄 | 国产成人在线视频网址| 亚洲黄色小视频| 精品国产成人系列| 一本色道久久综合亚洲91 | 亚洲国产日日夜夜| 久久蜜臀精品av| 91福利国产成人精品照片| 日韩 欧美一区二区三区| 国产精品网站一区| 4hu四虎永久在线影院成人| 国产福利一区二区三区视频在线 | 日本在线不卡视频| 中文字幕精品一区二区精品绿巨人 | 欧美aaa在线| 国产午夜一区二区三区| 欧美性猛交xxxx乱大交退制版| 亚洲制服丝袜一区| 国产欧美一区二区精品性色超碰| 在线观看日韩精品| 波多野结衣亚洲一区| 捆绑紧缚一区二区三区视频| 亚洲人成精品久久久久久| 久久久久国产一区二区三区四区 | 97精品电影院| 国产乱对白刺激视频不卡| 三级在线观看一区二区| 亚洲人成影院在线观看| 亚洲国产成人私人影院tom| 日韩免费一区二区三区在线播放| 欧美自拍丝袜亚洲| 成人av在线网| 国产99久久久久| 国产资源在线一区| 日韩av午夜在线观看| 亚洲成av人片| 亚洲精品日韩一| 亚洲伦理在线精品| 国产精品久99| 久久精品欧美一区二区三区不卡| 欧美老年两性高潮| 欧美猛男超大videosgay| 色婷婷精品大在线视频| 97超碰欧美中文字幕| 97se亚洲国产综合自在线| 成人h版在线观看| 盗摄精品av一区二区三区| 国产成人免费在线观看不卡| 国产一区二区三区免费| 国产在线视频精品一区| 久久99精品久久久久久久久久久久| 日韩精彩视频在线观看| 日韩成人精品在线观看| 丝袜诱惑制服诱惑色一区在线观看| 亚洲一区二区三区四区的| 亚洲bt欧美bt精品777| 日韩不卡免费视频| 美腿丝袜在线亚洲一区| 九九精品一区二区| 九九热在线视频观看这里只有精品| 久久se这里有精品| 国产成人精品亚洲777人妖| 成人免费观看av| 99久久99久久综合| 欧美综合亚洲图片综合区| 欧美日韩国产免费| 精品国产伦理网| 蜜桃一区二区三区在线观看| 久久综合999| 日韩免费看的电影| 日韩免费电影一区| 成人欧美一区二区三区1314| 麻豆精品一区二区av白丝在线| 91免费在线视频观看| a级精品国产片在线观看| 色婷婷一区二区| 欧美人动与zoxxxx乱| 亚洲精品一线二线三线无人区| ww久久中文字幕| 亚洲视频在线一区二区| 视频一区视频二区中文字幕| 久久激情五月婷婷| 成人激情电影免费在线观看| 在线免费观看视频一区| 日韩精品一区二区三区三区免费| 欧美国产精品专区| 天天色综合成人网| 国产精品伊人色| 欧美午夜精品久久久久久超碰 | 午夜激情综合网| 激情综合色综合久久综合| 成人a免费在线看| 欧美老女人在线| 国产精品三级av在线播放| 亚洲国产精品一区二区久久| 国产在线不卡一区| 欧美丝袜第三区| 中文字幕久久午夜不卡| 日韩av在线发布| 色噜噜狠狠成人中文综合| 精品国产91乱码一区二区三区| 亚洲特级片在线| 国产在线一区观看| 欧美日韩你懂得| 一区在线观看免费| 国产真实乱子伦精品视频| 欧美久久久一区| 亚洲黄色小说网站| 成人高清视频在线观看| 欧美大片一区二区| 亚洲国产成人91porn| 成人少妇影院yyyy| 久久综合久久99| 美女看a上一区| 欧美精品第1页| 亚洲宅男天堂在线观看无病毒| 国产成人免费视频精品含羞草妖精| 欧美日韩精品一区二区| 亚洲情趣在线观看| 成人视屏免费看| 久久久久久99精品| 激情综合网天天干| 日韩欧美中文字幕精品| 石原莉奈一区二区三区在线观看| 91免费看片在线观看| 国产欧美一区二区三区在线看蜜臀 | 成人av在线网| 久久精品视频免费观看| 美女视频第一区二区三区免费观看网站 | 国产91露脸合集magnet| 日韩欧美国产一区在线观看| 亚洲午夜一区二区| 欧亚洲嫩模精品一区三区| 亚洲色图另类专区| 91极品视觉盛宴| 一区二区三区四区中文字幕| 91理论电影在线观看| 亚洲男同性视频|