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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? orc_lib.c

?? 卡內(nèi)基梅隆大學(xué)(CMU)開發(fā)的移動機器人控制開發(fā)軟件包。可對多種機器人進行控制
?? C
?? 第 1 頁 / 共 3 頁
字號:
  if (fabs(desired_angular_velocity) > .001) {    if (desired_angular_velocity > ORC_MAX_ANGULAR_VEL)      desired_angular_velocity = ORC_MAX_ANGULAR_VEL;    if (desired_angular_velocity < -ORC_MAX_ANGULAR_VEL)      desired_angular_velocity = -ORC_MAX_ANGULAR_VEL;    velError = (desired_angular_velocity - current_angular_velocity);    pTerm = velError * pGain;    if (!*ignore_d_term)      dTerm = (velError - *velErrorPrevPtr) * ORC_D_GAIN;    else {      dTerm = 0;      *ignore_d_term = 0;    }    new_pwm = current_pwm + carmen_round(pTerm + dTerm);    if(0)    carmen_warn("%s %f %f : %f %f : %d %d %d\n", 		(WHICH_MOTOR == ORC_LEFT_MOTOR ? "left" : "right"),		desired_angular_velocity,		current_angular_velocity, pTerm, dTerm,		current_pwm, carmen_round(pTerm+dTerm), new_pwm);    *velErrorPrevPtr = velError;    if (abs(new_pwm) > ORC_MAX_PWM)      new_pwm = (new_pwm > 0 ? ORC_MAX_PWM : -ORC_MAX_PWM);    if (WHICH_MOTOR == ORC_RIGHT_MOTOR) {      if (new_pwm < 0) 	dir = ORC_FORWARD;      else 	dir = ORC_BACKWARD;      //      carmen_warn("left %s\n", (dir == 1) ? "forward" : "backward");    } else {      if (new_pwm < 0) 	dir = ORC_BACKWARD;      else 	dir = ORC_FORWARD;      //      carmen_warn("right %s\n", (dir == 1) ? "forward" : "backward");    }    command_pwm = abs(new_pwm);  } else {    dir = ORC_FORWARD;    command_pwm = 0;  }  if (0)  carmen_warn("Tried to send %d %d %f %f %d\n", command_pwm, new_pwm,	      desired_velocity, current_velocity, WHICH_MOTOR);  buffer[0] = 0x4D;  buffer[1] = WHICH_MOTOR;  buffer[2] = dir;  buffer[3] = command_pwm;  send_packet_and_ack(buffer, 4, ORC_SLAVE);}static double delta_tick_to_metres(int delta_tick){  double revolutions = (double)delta_tick/    (double)(ORC_ENCODER_RESOLUTION*ORC_GEAR_RATIO);  double radians = revolutions*2*M_PI;  double metres = radians*(ORC_WHEEL_DIAMETER/2.0);  return metres;}static double voltage_to_current(unsigned short voltage){  double current;  current = voltage*5.0/65536.0;  // V=IR, R=0.18 ohm  current = current/0.18;  return current;}static int unpack_short (unsigned char *buffer, int offset){  return ((buffer[offset]&0x00ff)<<8)+(buffer[offset+1]&0x00ff);}static void unpack_master_packet(unsigned char *buffer){  int range;  short time_ticks, delta_master_ticks;  unsigned char command_buffer[2];  short digital_io_state;  unsigned short servo_pwm;  int i;  static double last_ping_time = 0;  static int last_ping = ORC_RIGHT_SONAR_PING;  //carmen_warn("Got master packet\n");  //printf("unpack_master_packet\n");  range = unpack_short(buffer, ORC_LEFT_SONAR_RANGE);  if (range == 0xffff)    left_range = 0;  else    left_range = range/1000000.0*331.46/2.0;  range = unpack_short(buffer, ORC_RIGHT_SONAR_RANGE);  if (range == 0xffff)    right_range = 0;  else    right_range = range/1000000.0*331.46/2.0;  time_ticks = buffer[ORC_MASTER_TIME];  delta_master_ticks = time_ticks - last_master_ticks;  if (delta_master_ticks > SHRT_MAX/2)    delta_master_ticks -= 2*SHRT_MAX;  if (delta_master_ticks < -SHRT_MAX/2)    delta_master_ticks += 2*SHRT_MAX;  last_master_ticks = time_ticks;  if (sonar_on && carmen_get_time() - last_ping_time > .05) {    command_buffer[0] = 'R';    if (last_ping == ORC_LEFT_SONAR_PING)      command_buffer[1] = ORC_RIGHT_SONAR_PING;    else      command_buffer[1] = ORC_LEFT_SONAR_PING;    send_packet_and_ack(command_buffer, 2, ORC_MASTER);    last_ping = command_buffer[1];    last_ping_time = carmen_get_time();  }  digital_io_state = unpack_short(buffer, ORC_DIGITAL_IN);  irs[0] = digital_io_state >> ORC_LEFT_IR_ECHO & 1;  irs[1] = digital_io_state >> ORC_RIGHT_IR_ECHO & 1; // 1 means there's a curb (beyond range of IR)  bumpers[0] = digital_io_state >> 8 & 1;  bumpers[1] = digital_io_state >> 9 & 1;  bumpers[2] = digital_io_state >> 10 & 1;  bumpers[3] = digital_io_state >> 11 & 1;  gripper_state = digital_io_state >> 12 & 1;   for (i = 0; i < 4; i++) {    servo_pwm = unpack_short(buffer, ORC_SERVO_PWM_STATE+i*2);    servo_state[i] = servo_pwm;  }}static void unpack_slave_packet(unsigned char *buffer){  short left_tick, right_tick, time_ticks, delta_slave_ticks;  int left_delta_tick, right_delta_tick;  int left_dir, right_dir;  unsigned char left_pinmode, right_pinmode;  unsigned short voltage;  static double start;  int left_orc_encoder, right_orc_encoder;  unsigned char left_slew, right_slew;  //carmen_warn("Got slave packet\n");  //printf("unpack_slave_packet\n");  if (!initialized) {    start = carmen_get_time();    initialized = 1;    x = 0;    y = 0;    theta = 0;    left_last_tick = unpack_short(buffer, ORC_LEFT_MOTOR_ENCODER);    right_last_tick = ((buffer[ORC_RIGHT_MOTOR_ENCODER]&0x00ff)<<8)+      (buffer[ORC_RIGHT_MOTOR_ENCODER+1]&0x00ff);    last_slave_ticks = ((buffer[ORC_SLAVE_TIME]&0x00ff)<<8)+      (buffer[ORC_SLAVE_TIME+1]&0x00ff);    left_pwm = buffer[ORC_LEFT_MOTOR_ACTUAL_PWM];    right_pwm = buffer[ORC_RIGHT_MOTOR_ACTUAL_PWM];    left_dir = ((buffer[ORC_LEFT_MOTOR_DIR] & 0x0f) >> 2) & 0x03;    right_dir = ((buffer[ORC_RIGHT_MOTOR_DIR] & 0x0f) >> 2) & 0x03;    if (left_dir == ORC_BACKWARD)      left_pwm = -left_pwm;    if (right_dir == ORC_FORWARD)      right_pwm = -right_pwm;    return;  }  left_orc_encoder = buffer[ORC_LEFT_ENCODER_STATE];  if (left_orc_encoder != ((0x0e << 4) + 0x0e))    carmen_warn("left encoder is in a bad state: %d %d\n", 		(left_orc_encoder >> 4) & 0xf, (left_orc_encoder & 0xf));  //  else  //    carmen_warn("left encoder is in a good state: %d %d\n",   //		(left_orc_encoder >> 4) & 0xf, (left_orc_encoder & 0xf));  right_orc_encoder = buffer[ORC_RIGHT_ENCODER_STATE];  if (right_orc_encoder != ((0x0e << 4) + 0x0e))    carmen_warn("right encoder is in a bad state: %d %d\n", 		(right_orc_encoder >> 4) & 0xf, right_orc_encoder & 0xf);  //  else  //    carmen_warn("right encoder is in a good state: %d %d\n",   //		(right_orc_encoder >> 4) & 0xf, right_orc_encoder & 0xf);  voltage = unpack_short(buffer, ORC_SERVO_CURRENT);  servo_current[0] = voltage_to_current(voltage);  voltage = unpack_short(buffer, ORC_SERVO_CURRENT+2);  servo_current[1] = voltage_to_current(voltage);  left_pinmode = buffer[ORC_LEFT_PINMODE];  right_pinmode = buffer[ORC_RIGHT_PINMODE];  left_pwm = buffer[ORC_LEFT_MOTOR_ACTUAL_PWM];  right_pwm = buffer[ORC_RIGHT_MOTOR_ACTUAL_PWM];  left_slew = buffer[ORC_LEFT_MOTOR_SLEW];  right_slew = buffer[ORC_RIGHT_MOTOR_SLEW];  if (0)  carmen_warn("left slew: %d right slew: %d\n", left_slew,	      right_slew);  left_dir = ((buffer[ORC_LEFT_MOTOR_DIR] & 0x0f) >> 2) & 0x03;  right_dir = ((buffer[ORC_RIGHT_MOTOR_DIR] & 0x0f) >> 2) & 0x03;  if (left_dir == ORC_BACKWARD)    left_pwm = -left_pwm;  if (right_dir == ORC_FORWARD)    right_pwm = -right_pwm;  left_tick = ((buffer[ORC_LEFT_MOTOR_ENCODER]&0x00ff)<<8)+    (buffer[ORC_LEFT_MOTOR_ENCODER+1]&0x00ff);  left_delta_tick = left_tick - left_last_tick;  if (left_delta_tick > SHRT_MAX/2)    left_delta_tick = left_delta_tick - 2*SHRT_MAX;  if (left_delta_tick < -SHRT_MAX/2)    left_delta_tick = left_delta_tick + 2*SHRT_MAX;  right_tick = ((buffer[ORC_RIGHT_MOTOR_ENCODER]&0x00ff)<<8)+    (buffer[ORC_RIGHT_MOTOR_ENCODER+1]&0x00ff);  right_delta_tick = right_tick - right_last_tick;  if (right_delta_tick > SHRT_MAX/2)    right_delta_tick = right_delta_tick - 2*SHRT_MAX;  if (right_delta_tick < -SHRT_MAX/2)    right_delta_tick = right_delta_tick + 2*SHRT_MAX;  left_last_tick = left_tick;  right_last_tick = right_tick;  left_delta_tick = -left_delta_tick;  left_displacement = delta_tick_to_metres(left_delta_tick);  right_displacement = delta_tick_to_metres(right_delta_tick);  if (0)  carmen_warn("left %d %f right %d %f\n", left_delta_tick, left_displacement,	      right_delta_tick, right_displacement);  time_ticks = ((buffer[ORC_SLAVE_TIME]&0x00ff)<<8)+    (buffer[ORC_SLAVE_TIME+1]&0x00ff);  delta_slave_ticks = time_ticks - last_slave_ticks;  last_slave_ticks = time_ticks;  if (delta_slave_ticks > SHRT_MAX/2)    delta_slave_ticks -= 2*SHRT_MAX;  if (delta_slave_ticks < -SHRT_MAX/2)    delta_slave_ticks += 2*SHRT_MAX;  delta_slave_time = delta_slave_ticks/4000.0;  displacement = (left_displacement+right_displacement)/2;  rotation = atan2(right_displacement-left_displacement, ORC_WHEEL_BASE);  if (0) {    carmen_warn("Displacement: %f rotation: %f\n", displacement,		carmen_radians_to_degrees(rotation));    carmen_warn("before %f %f %f\n", x, y, carmen_radians_to_degrees(theta));  }  x = x+displacement*cos(theta);  y = y+displacement*sin(theta);  theta = carmen_normalize_theta(theta+rotation);  if(0)  carmen_warn("after %f %f %f (%f %f)\n", x, y, carmen_radians_to_degrees(theta),	      displacement, carmen_radians_to_degrees(rotation));  left_velocity = left_displacement/delta_slave_time;  right_velocity = right_displacement/delta_slave_time;  carmen_base_command_velocity(left_desired_velocity, left_velocity,       ORC_LEFT_MOTOR);  carmen_base_command_velocity(right_desired_velocity, right_velocity,       ORC_RIGHT_MOTOR);  time_since_last_command = carmen_get_time() - last_command_time;  last_command_time = carmen_get_time();}int carmen_base_direct_sonar_on(void){  printf("carmen_base_direct_sonar_on\n");  sonar_on = 1;  return 2;}int carmen_base_direct_sonar_off(void){  sonar_on = 0;  return 2;}int carmen_base_direct_reset(void){  printf("carmen_base_direct_reset\n");  x = 0;  y = 0;  theta = 0;  initialized = 0;  return 0;}static int orc_set_encoder_quad_phase_fast(int motor) {  unsigned char buffer[5];  buffer[0] = 'C';  buffer[1] = motor; // Motor Encoder 0  buffer[2] = ORC_QUAD_PHASE_FAST; // Quad Phase Fast  fprintf(stderr, "Setting motor channel %d into quad phase fast mode... ",	  motor);  if (send_packet_and_ack(buffer, 3, ORC_SLAVE) < 0) {    fprintf(stderr, "%sfailed%s.\n", carmen_red_code, carmen_normal_code);    return -1;  }  fprintf(stderr, "ok.\n");  return 0;}static int orc_set_motor_slew(int motor, int slew) {  unsigned char buffer[5];  buffer[0] = 'W';  buffer[1] = motor;  buffer[2] = slew;  fprintf(stderr, "Setting %s motor slew to %d... ", 	  (motor == ORC_LEFT_MOTOR ? "left" : "right") , slew);  if (send_packet_and_ack(buffer, 3, ORC_SLAVE) < 0) {    fprintf(stderr, "%sfailed%s.\n", carmen_red_code, carmen_normal_code);    return -1;  }  fprintf(stderr, "ok.\n");  return 0;}int orc_set_pin(int pin, char *description, int pin_mode) {  unsigned char buffer[5];  char *modes[15] = {"digital in", "digital in (pull-up)",		    "digital in (pull-down)", "digital out",		    "digital out (slow)", "servo", "sonar ping",		    "sonar echo", "analog in", "analog out",		    "clock generator out", "quadrature phase",		    "mono phase", "unknown", "quad-phase fast"};  buffer[0] = 'C';  buffer[1] = pin; // Servo0  buffer[2] = pin_mode; //Servo  fprintf(stderr, "Setting %s pin %d into %s mode... ", description, pin,	  modes[pin_mode]);  if (send_packet_and_ack(buffer, 3, ORC_MASTER) < 0) {    fprintf(stderr, "%sfailed%s.\n", carmen_red_code, carmen_normal_code);    return -1;  }  fprintf(stderr, "ok.\n");  return 0;}int orc_set_pwm(int motor, int dir, int pwm){  unsigned char buffer[5];  buffer[0] = 0x4D;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久亚洲欧洲日产国码αv| 成人性视频免费网站| 色999日韩国产欧美一区二区| 中文字幕在线一区| 91福利在线免费观看| 亚洲一区二区三区美女| 欧美丰满嫩嫩电影| 精品一区二区三区免费| 久久女同互慰一区二区三区| 国产成人激情av| 亚洲精品免费在线| 欧美日韩视频在线一区二区| 日本v片在线高清不卡在线观看| 欧美tickle裸体挠脚心vk| 国产精品亚洲专一区二区三区| 国产精品每日更新| 欧美日韩一级黄| 欧美午夜免费电影| 三级精品在线观看| 中国av一区二区三区| 在线观看国产日韩| 国内精品国产三级国产a久久 | 欧美一区二区女人| 国产在线播放一区三区四| 中文字幕亚洲区| 欧美一区二区精品在线| 波多野结衣在线一区| 亚洲bdsm女犯bdsm网站| 精品国产91亚洲一区二区三区婷婷| 成人av免费在线观看| 亚洲成a人v欧美综合天堂| 国产婷婷色一区二区三区四区| 色哟哟一区二区三区| 激情综合五月婷婷| 亚洲国产精品人人做人人爽| 国产三级一区二区| 欧美日韩在线播放三区| 岛国精品在线观看| 青青国产91久久久久久| 成人欧美一区二区三区黑人麻豆| 日韩一卡二卡三卡四卡| 日本韩国视频一区二区| 国产激情一区二区三区| 日韩精品一级中文字幕精品视频免费观看| 国产人成亚洲第一网站在线播放| 欧美群妇大交群中文字幕| 99视频有精品| 国产精品影视在线观看| 免费人成网站在线观看欧美高清| 亚洲欧美福利一区二区| 欧美激情自拍偷拍| www欧美成人18+| 日韩欧美专区在线| 欧美日韩一区三区| 色94色欧美sute亚洲13| 成人永久看片免费视频天堂| 激情五月播播久久久精品| 日韩精品高清不卡| 亚洲va欧美va天堂v国产综合| 日韩毛片在线免费观看| 中文字幕欧美区| 久久青草欧美一区二区三区| 欧美一区三区二区| 欧美日韩不卡一区二区| 欧美精品一区二区蜜臀亚洲| 日韩午夜av一区| 欧美一区二区免费| 日韩亚洲欧美中文三级| 欧美精品tushy高清| 欧美色视频在线| 色综合天天综合网国产成人综合天| 国产99久久精品| 成人免费视频网站在线观看| 国产精品123| 成人免费毛片app| 成人免费视频app| 99久久婷婷国产综合精品电影| 福利电影一区二区| 成人国产亚洲欧美成人综合网| 国产超碰在线一区| av成人免费在线| 欧洲精品在线观看| 欧美日韩一区二区欧美激情| 欧美日韩高清不卡| 欧美一级理论片| 久久午夜免费电影| 中文字幕二三区不卡| 亚洲欧美一区二区三区孕妇| 亚洲免费av在线| 婷婷夜色潮精品综合在线| 日韩影院精彩在线| 国产综合色视频| 成年人网站91| 欧美午夜片在线观看| 日韩三级免费观看| 国产精品麻豆久久久| 亚洲综合一区在线| 精品一区二区免费在线观看| 国产激情偷乱视频一区二区三区| 成人精品高清在线| 欧美日韩一级黄| 久久九九国产精品| 一区二区在线观看免费| 裸体在线国模精品偷拍| 丁香五精品蜜臀久久久久99网站| 色成人在线视频| 欧美成人艳星乳罩| 中文字幕一区二区三区色视频| 亚洲美女淫视频| 国产在线不卡视频| 在线观看视频一区二区欧美日韩| 日韩精品一区二区三区四区视频| 国产精品美女久久久久久久久 | 久久久久久久性| 亚洲男人天堂一区| 黑人精品欧美一区二区蜜桃 | 免费观看久久久4p| 成人性视频免费网站| 欧美精选午夜久久久乱码6080| 欧美精品一区二区三| 亚洲综合视频在线观看| 狠狠色丁香久久婷婷综合_中| 色网站国产精品| 久久看人人爽人人| 五月天久久比比资源色| 成人av午夜电影| 精品国产免费人成电影在线观看四季| 成人欧美一区二区三区视频网页| 男女男精品视频网| 在线观看日韩国产| 国产日韩欧美一区二区三区综合| 视频在线观看一区| 色婷婷综合久久久中文一区二区 | 日韩视频免费观看高清完整版 | 亚洲成人1区2区| 波多野结衣视频一区| 精品日韩在线观看| 亚洲资源在线观看| 国产91丝袜在线播放0| 欧美一级午夜免费电影| 夜夜精品视频一区二区| 成人免费的视频| 亚洲精品一区二区三区福利| 午夜精品福利在线| 欧美亚洲动漫另类| 国产精品成人一区二区三区夜夜夜| 青青草视频一区| 欧美一区二区三区免费| 五月天精品一区二区三区| 在线视频综合导航| 自拍偷拍欧美精品| 99精品视频一区二区三区| 国产欧美视频一区二区| 国产精品一区二区免费不卡 | 久久久久久久精| 精品在线亚洲视频| 欧美videossexotv100| 日韩影院免费视频| 欧美老女人第四色| 亚洲国产视频在线| 欧美三区在线视频| 亚洲bt欧美bt精品| 51精品国自产在线| 免费看欧美美女黄的网站| 91精品国产综合久久久久久| 丝袜美腿成人在线| 91精品欧美综合在线观看最新| 亚洲香肠在线观看| 在线播放日韩导航| 免费观看在线综合色| 欧美大胆人体bbbb| 国产九色精品成人porny | 免费成人在线播放| 欧美不卡一区二区| 国产999精品久久久久久绿帽| 久久久99精品免费观看| av成人免费在线| 亚洲欧美福利一区二区| 欧美日韩亚州综合| 毛片一区二区三区| 精品福利在线导航| 成人国产亚洲欧美成人综合网| 中文字幕一区二区三区四区不卡 | 偷拍与自拍一区| 日韩一区二区电影在线| 国产精品一区二区黑丝| 中文字幕在线免费不卡| 欧美性感一类影片在线播放| 日韩国产欧美三级| 久久日韩精品一区二区五区| 成人手机在线视频| 亚洲国产欧美在线人成| 日韩欧美国产电影| 成人高清视频在线| 亚洲一区在线免费观看| www日韩大片| 欧美在线观看一二区| 美女视频免费一区| 亚洲欧美日韩一区二区| 日韩欧美国产不卡|