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

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

?? segwaycore.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 CARMEN; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place, 
 * Suite 330, Boston, MA  02111-1307 USA
 *
 ********************************************************/

#include <carmen/carmen.h>
#include <canlib.h>
#include "segwaycore.h"

void segway_clear_status(segway_p segway)
{
  segway->status_ready = 0;
}

void segway_update_status(segway_p segway)
{
  short int temp;
  int tempint, err;
  long int id;
  unsigned char buffer[8];
  unsigned int dlc, flag;
  unsigned long time;
  double heading;
  
  /* read status message from the segway */
  err = canReadWait(segway->handle1, &id, &buffer, &dlc, &flag, &time, 100);
  
  if(err != 0)
    {
      segway->status_ready = 1; 
      canBusOn(segway->handle1);
      canBusOn(segway->handle2);
      return;
    }

  /* extract segway status from message */
  switch(id) {
  case SEGWAY_STATUS1_ID:
    temp = (buffer[4] << 8) | buffer[5];
    segway->voltage = temp;
    break;
  case SEGWAY_STATUS2_ID:
    temp = (buffer[0] << 8) | buffer[1];
    segway->pitch = 1 * temp / 7.8 * M_PI / 180.0;
    temp = (buffer[2] << 8) | buffer[3];
    segway->pitch_rate = 1 * temp / 7.8 * M_PI / 180.0;
    temp = (buffer[4] << 8) | buffer[5];
    segway->roll = temp / 7.8 * M_PI / 180.0;
    temp = (buffer[6] << 8) | buffer[7];
    segway->roll_rate = temp / 7.8 * M_PI / 180.0;
    break;
  case SEGWAY_STATUS3_ID:
    temp = (buffer[0] << 8) | buffer[1];
    segway->lw_velocity = temp / 332.0;
    temp = (buffer[2] << 8) | buffer[3];
    segway->rw_velocity = temp / 332.0;
    temp = (buffer[4] << 8) | buffer[5];
    segway->yaw_rate = temp / 7.8 * M_PI / 180.0;
    temp = (buffer[6] << 8) | buffer[7];
    segway->frame_counter = temp;
    break;
  case SEGWAY_STATUS4_ID:
    tempint = (buffer[2] << 24) | (buffer[3] << 16) |
      (buffer[0] << 8) | buffer[1];
    segway->lw_displacement = tempint / 33215.0;
    tempint = (buffer[6] << 24) | (buffer[7] << 16) |
      (buffer[4] << 8) | buffer[5];
    segway->rw_displacement = tempint / 33215.0;
    break;
  case SEGWAY_STATUS5_ID:
    segway->last_fa_displacement = segway->fore_aft_displacement;

    tempint = (buffer[2] << 24) | (buffer[3] << 16) |
      (buffer[0] << 8) | buffer[1];
    segway->fore_aft_displacement = tempint / 33215.0;
    tempint = (buffer[6] << 24) | (buffer[7] << 16) |
      (buffer[4] << 8) | buffer[5];
    segway->yaw_displacement = tempint / 112644.0 * M_PI * 2.0;
    
    if(segway->first_odom) {
      segway->last_fa_displacement = segway->fore_aft_displacement;
      segway->start_theta = segway->yaw_displacement;
      segway->first_odom = 0;
    }

    heading = carmen_normalize_theta(segway->yaw_displacement -
				     segway->start_theta);
    segway->x += (segway->fore_aft_displacement - 
		  segway->last_fa_displacement) * cos(heading);
    segway->y += (segway->fore_aft_displacement - 
		  segway->last_fa_displacement) * sin(heading);
    segway->theta = heading;

    segway->status_ready = 1;
    break;
  }

}

void segway_print_status(segway_p segway)
{
  fprintf(stderr, "%.0fV r(%.2f %.2f) p(%.2f %.2f) y(%.2f %.2f) vel(%.2f %.2f) \n",
	  segway->voltage, segway->roll, segway->roll_rate,
	  segway->pitch, segway->pitch_rate, 
	  segway->yaw_displacement, segway->yaw_rate,
	  segway->lw_velocity, segway->rw_velocity);
  fprintf(stderr, "Disp. lw/rw (%.3f %.3f) fore/aft %.3f yaw %.3f\n",
	  segway->lw_displacement, segway->rw_displacement,
	  segway->fore_aft_displacement, segway->yaw_displacement * 180 / M_PI);
}

void segway_initialize(segway_p segway)
{
  segway->handle1 = canOpenChannel(SEGWAY_CHANNEL1, 0);
  if(segway->handle1 < 0)
    carmen_die("Error: could not open connection to first CAN bus.\n");
  canSetBusParams(segway->handle1, SEGWAY_BITRATE, 6, 2, 2, 1, 0);
  canBusOn(segway->handle1);

  segway->handle2 = canOpenChannel(SEGWAY_CHANNEL2, 0);
  if(segway->handle2 < 0)
    carmen_die("Error: could not open connection to second CAN bus.\n");
  canSetBusParams(segway->handle2, SEGWAY_BITRATE, 6, 2, 2, 1, 0);
  canBusOn(segway->handle2);

  segway->first_odom = 1;
  segway->x = 0;
  segway->y = 0;
  segway->theta = 0;
}

void segway_free(segway_p segway)
{
  segway_stop(segway);
  canClose(segway->handle1);
  canClose(segway->handle2);
}

void segway_kill(segway_p segway)
{
  unsigned char message[8];
  
  canWrite(segway->handle1, 0x412, message, 8, 0);
  canWrite(segway->handle2, 0x412, message, 8, 0);
}

void segway_command(segway_p segway, double tv, double rv, 
		    unsigned short status_command, 
		    unsigned short status_parameter)
{
  int err;
  short int tv_short, rv_short;
  unsigned char message[8];


  /* convert velocities into message units */
  tv_short = (short int)(tv / 3.576 * 1176.0);
  rv_short = (short int)(rv / 0.3 * 100);
  if(tv_short > SEGWAY_MAX_TV)
    tv_short = SEGWAY_MAX_TV;
  if(tv_short < -SEGWAY_MAX_TV)
    tv_short = -SEGWAY_MAX_TV;
  if(rv_short > SEGWAY_MAX_RV)
    rv_short = SEGWAY_MAX_RV;
  if(rv_short < -SEGWAY_MAX_RV)
    rv_short = -SEGWAY_MAX_RV;
  message[0] = (tv_short >> 8);
  message[1] = (tv_short & 0xFF);
  message[2] = (rv_short >> 8);
  message[3] = (rv_short & 0xFF);
  message[4] = (status_command >> 8);
  message[5] = (status_command & 0xFF);
  message[6] = (status_parameter >> 8);
  message[7] = (status_parameter & 0xFF);
  err = canWrite(segway->handle1, SEGWAY_COMMAND_ID, message, 8, 0);
  err = canWrite(segway->handle2, SEGWAY_COMMAND_ID, message, 8, 0);

  /* update the status messages */
  segway_update_status(segway);
}

void segway_set_velocity(segway_p segway, double tv, double rv)
{
  static double last_tv = 0.0, last_rv = 0.0;
  static double last_timestamp = 0.0;
  double ts;

  ts = carmen_get_time();
  if(tv != last_tv || rv != last_rv || ts - last_timestamp > 1.0) {
    segway_command(segway, tv, rv, 0, 0);
    last_tv = tv;
    last_rv = rv;
    last_timestamp = ts;
  }
}

void segway_stop(segway_p segway)
{
  segway_command(segway, 0, 0, 0, 0);
}

void segway_set_max_velocity(segway_p segway, double percent)
{
  unsigned short param;

  param = (unsigned int)(percent * 16.0);
  if(param > 16)
    param = 16;
  segway_command(segway, 0.0, 0.0, SEGWAY_VEL_SCALE_FACTOR, param);
}

void segway_set_max_acceleration(segway_p segway, double percent)
{
  unsigned short param;

  param = (unsigned int)(percent * 16.0);
  if(param > 16)
    param = 16;
  segway_command(segway, 0.0, 0.0, SEGWAY_ACCEL_SCALE_FACTOR, param);
}

void segway_set_max_torque(segway_p segway, double percent)
{
  unsigned short param;

  param = (unsigned int)(percent * 16.0);
  if(param > 16)
    param = 16;
  segway_command(segway, 0.0, 0.0, SEGWAY_TORQUE_SCALE_FACTOR, param);
}

void segway_set_gain_schedule(segway_p segway, int schedule)
{
  segway_command(segway, 0.0, 0.0, SEGWAY_GAIN_SCHEDULE, (short int)schedule);
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品一区二区www| 日韩高清中文字幕一区| 麻豆精品视频在线观看视频| 精品日韩在线观看| 国产精品自在在线| 国产女人水真多18毛片18精品视频 | 日韩欧美高清dvd碟片| 精品综合免费视频观看| 国产精品久久久久久户外露出 | 99国产精品99久久久久久| 一区二区在线观看av| 91精品国产综合久久久久| 国内精品在线播放| 亚洲免费观看高清在线观看| 精品日产卡一卡二卡麻豆| 欧美大胆人体bbbb| 久久久不卡网国产精品一区| 欧美在线三级电影| 国产成人免费视频网站| 日韩美女主播在线视频一区二区三区| 欧美性生交片4| 亚洲欧美日韩久久| 亚洲天堂网中文字| 欧美一区二区不卡视频| 99riav一区二区三区| 日本韩国欧美一区| 国产在线播放一区| 日韩精品视频网站| 一区二区三区四区在线| 亚洲国产精品精华液ab| 91精品国产全国免费观看| 精品国精品国产尤物美女| 91精品国产综合久久久久久漫画| 精品国产精品一区二区夜夜嗨| 亚洲国产成人在线| 亚洲一区在线观看视频| 一卡二卡欧美日韩| 全国精品久久少妇| 美女免费视频一区| 91丨九色丨蝌蚪丨老版| 成人av资源网站| 国产精品一区2区| 在线观看区一区二| 日本一区二区免费在线观看视频| 一区二区三区日韩欧美| 国产乱一区二区| 555夜色666亚洲国产免| 五月天久久比比资源色| 亚洲免费电影在线| 国产成人午夜99999| 欧美美女一区二区在线观看| 欧美日韩一级二级| 欧美三级蜜桃2在线观看| 欧美韩日一区二区三区四区| 免费精品视频在线| 欧美性极品少妇| 亚洲色图欧洲色图婷婷| 国产白丝网站精品污在线入口| 丁香婷婷综合色啪| 日韩一区二区在线看| 欧美一卡2卡三卡4卡5免费| 亚洲欧美日韩一区| 成人午夜免费视频| 欧美性高清videossexo| 日韩理论片一区二区| 国产白丝精品91爽爽久久| 亚洲精品在线观看网站| 日本欧美一区二区| 欧美一区二区三区在线电影| 樱花影视一区二区| 91成人国产精品| 一区二区在线观看免费视频播放| 成人av网站大全| 综合网在线视频| 99久久精品一区二区| 国产精品乱码一区二三区小蝌蚪| 一区二区三区日韩欧美| 在线观看91精品国产入口| 亚洲人成亚洲人成在线观看图片| 波多野结衣一区二区三区| 成人激情免费网站| 国产精品女主播在线观看| 国产传媒一区在线| 国产三级一区二区三区| 天天做天天摸天天爽国产一区| 欧美在线高清视频| 欧美高清在线精品一区| 美女网站色91| 日韩精品一区二区三区在线| 日韩激情视频在线观看| 日韩欧美国产高清| 国产综合色在线视频区| 国产日韩欧美一区二区三区乱码| 精品一区二区在线播放| 日本一区二区成人| 色94色欧美sute亚洲线路一久 | 欧美中文字幕一区| 亚洲国产精品一区二区久久恐怖片 | 久久成人久久爱| 成人91在线观看| 亚洲永久精品国产| 日韩视频免费直播| 不卡一卡二卡三乱码免费网站| 亚洲女性喷水在线观看一区| 555夜色666亚洲国产免| 国产一区二区三区最好精华液| 欧美高清在线精品一区| 欧美日韩一级黄| 国产乱码精品一区二区三区av| 欧美激情一区二区| 欧美日免费三级在线| 极品少妇xxxx偷拍精品少妇| 日韩一区中文字幕| 蜜乳av一区二区| 成人免费小视频| 91精品国产综合久久婷婷香蕉 | 久久精品久久久精品美女| 国产日韩三级在线| 欧美少妇一区二区| 国产成人av电影在线| 亚洲国产精品久久久久秋霞影院| 国产亚洲欧美一区在线观看| 欧美无砖专区一中文字| 成人综合婷婷国产精品久久 | 亚洲少妇中出一区| 91精品国产综合久久久久久久久久 | 日日噜噜夜夜狠狠视频欧美人| 国产日韩欧美精品在线| 7777精品伊人久久久大香线蕉经典版下载| 国产成人精品免费视频网站| 亚洲第一成人在线| 欧美精品1区2区3区| jiyouzz国产精品久久| 麻豆极品一区二区三区| 亚洲欧美成aⅴ人在线观看| 久久蜜桃香蕉精品一区二区三区| 欧美在线你懂得| 色婷婷精品大在线视频| 国产精品久久精品日日| 久久综合色8888| 91美女在线看| 成人综合在线观看| 风流少妇一区二区| 久久99久久精品| 人人爽香蕉精品| 日韩精品一二三| 日本午夜精品一区二区三区电影 | 欧美一级黄色录像| 欧美日韩国产一二三| 亚洲第一综合色| 一区二区激情小说| 樱桃视频在线观看一区| 一区二区三区影院| 一区二区不卡在线视频 午夜欧美不卡在| 国产精品国产三级国产aⅴ原创 | 国产在线一区观看| 精品一区二区三区的国产在线播放 | 色婷婷亚洲一区二区三区| 色婷婷激情综合| 欧美少妇性性性| 在线不卡一区二区| 日韩一区二区在线观看| 欧美精品一区二区不卡| 国产亚洲综合在线| 中文字幕一区二区三中文字幕| 亚洲日本青草视频在线怡红院| 中文字幕av不卡| 亚洲女厕所小便bbb| 亚洲综合区在线| 免费成人美女在线观看| 精品亚洲国产成人av制服丝袜| 国产大片一区二区| 日本精品视频一区二区| 欧美日韩视频在线第一区| 欧美成人精精品一区二区频| 久久久亚洲高清| 国产精品乱码人人做人人爱 | 欧美成人精品1314www| 国产亚洲精品福利| 亚洲欧美日韩久久精品| 日日噜噜夜夜狠狠视频欧美人| 国内精品久久久久影院色| 91一区二区三区在线观看| 3d动漫精品啪啪一区二区竹菊 | 一区二区三区高清不卡| 麻豆精品一区二区三区| 国产成人在线电影| 欧美无乱码久久久免费午夜一区| 日韩三级免费观看| 中文字幕在线一区免费| 青青青爽久久午夜综合久久午夜 | 色综合天天做天天爱| 国产成人亚洲精品狼色在线 | 日本不卡中文字幕| 成人免费视频视频在线观看免费| 欧美性三三影院| 欧美国产1区2区| 美脚の诱脚舐め脚责91| 色婷婷国产精品| 国产女人18毛片水真多成人如厕 |