机器谱

S090】仿生机器手

图文展示3264(1)

图文展示3264(1)

副标题

作品说明

作者:毕浩明 薛永新 王绅识

单位:沈阳航空航天大学

指导老师:王路平 李正强

      仿生机器手,主要功能为模仿人手例如抓握,同时该作品可以做各种动作,可寓教于乐,或作为玩具陪伴你渡过闲暇时光。“探索者”是机器时代对世界上各类典型机构、创新机构、电子电器功能的总结得出的一套通用性极强的模块化套装这套设备足以在极短的时间内对工程人员所构想的原理样机进行搭建并验证可节约大成本和时间入门难度低。

      项目研究的主要内容是仿生机器手的结构、运动方式、动作程序。主控板采用了ARM高性能主控芯片,使用C语言编程、简单语言编程,可以实现由繁到简的更方面自动化程序控制。控制采用ARM7 lpc213232位高性能主控芯片,是一款专为小型机器人设计的多功能控制器,永强强大的处理功能。

      关键词:仿生、机械臂作动、C语言编程、自动控制系统

1. 引言

      仿生学是模仿生物系统的原理建造技术系统,或者使人造技术系统具有或类似于生物系统特征的科学。由于机器人的系统结构与生物体存在着很多共同特征,仿生学很自然地成为机器人技术学的一个重要手段。仿生机器人是指模仿生物、从事生物特点工作的机器人。目前在西方国家,机械宠物十分流行,另外仿麻雀机器人可以担任环境监测的任务,具有广阔的开发前景。二十一世纪人类将进入老龄化社会,发展“仿人机器人”将弥补年轻劳动力的严重不足,解决老龄化社会的家庭服务和医疗等社会问题,并能开辟新的产业,创造新的业机会。

      本文所研究的机器人是将仿生学原理与嵌入式技术的结合,并对机器人移动的控制理论和嵌入式操作系统的移植做了阐述。仿生机器手主要功能为模仿人手,例如抓握,同时该作品可以做各种动作,可寓教于乐,或作为玩具陪伴你渡过闲暇时光。这个创新设计能够减轻工人的劳动量,也可以替他们做一些危险任务,保障了他们的人身安全,同时本作品也可以作为玩具,老少皆宜,大大提高人民群众幸福感,提高青少年对科技的热爱,或陪伴孤独的老年人。本作品的创作灵感源于生活,比较有实用价值。

作品说明

仿生机器手

2. 仿生手的设计及机构组成

      该作品是由2个主控板、7个标准舵机、探索者基本组件、电池及各类支撑连接件组成,机械手以舵机模仿人体关节肌肉组织,带动不同种类作动机构进行对人手动作的模仿。灵敏度较高,同时也比较灵活。使用简单语言编程对其各关节进行运动控制与此同时,同样可以实现用遥控器控制或使用各类传感器对其进行闭环控制。

3. 市场前景及市场调研

      从本质上来讲,仿生机器,即是使用与生物相接近的思维方式、信息采集处理方式及生物的动作行为方式。当今机器人发展现况虽然思维和能力不如人类,但却发挥着其不可或缺的作用。仿生机械手完全可以应用在医疗、教学、生产、制造、娱乐等多个方面其造型容易让消费者接受,功能当然也很容易被消费者理解,我们相信这类机械会在未来世界占有一席之地。

4. 示例程序

/******************** (C) COPYRIGHT 2012 Robottime ********************

* 文件名    : amarino.c

* 作者       : sinbad

* 版本       : V1.0.0

* 日期       : 2012.3.28

* 所属产品 : 探索者ARM7 LPC2138主控制板

* 功能       : 处理安卓手机上amarino软件发送的手机传感器数据

                  本版支持:COMPASS,ORIENTATION

********************************************************************/

int buf[40];     // ASCII Data received from the serial port

int buf_tmp = 0; // temp serial data

int buf_i   = 0; // Data received sequence

int orientation[3] = {0,0,0}; //save the orentation event. 0 - orentation; 1 - pitch ; 2 - roll

#define   N   12                      //filter effective

int filter_buf[3][N]; //filter buf, 3 stand for 3 channels of the filter

#define COMPASS       1

#define ORIENTATION 2

/*******************************************************************************

* 程序名    : Amarino_GetOrientation

* 功能       : 读取Orientation传感器的值

* 入口参数 : i: 0 - Orientation ; 1 - pitch ; 2 - roll

* 返回值    : 相应的值

*******************************************************************************/

int Amarino_GetOrientation(int i)

{

return(orientation[i]);

}

/*******************************************************************************

* 程序名    : Filter_AntiPulse

* 功能       : 中位值平均滤波法(防脉冲干扰平均滤波法)

* 入口参数 : channel    : 滤波通道

                  new_data : 新进入的滤波数据

* 返回值    : 滤波后的值

*******************************************************************************/

int Filter_AntiPulse(int channel, int new_data)

{

  int i;

  int filter_max = 0; //max value

  int filter_min = 65535; //min value

  int filter_sum = 0; //sum of all value

 

  for(i=0;i<N-1;i++)   //update the filter

  {

    filter_buf[channel][i] = filter_buf[channel][i+1];

  }

  filter_buf[channel][N-1] = new_data;

 

  for(i=0;i<N;i++)    //get the max and min value

  {

    if( filter_buf[channel][i] > filter_max ) filter_max = filter_buf[channel][i];

    if( filter_buf[channel][i] < filter_min ) filter_min = filter_buf[channel][i];

  }

 

  for(i=0;i<N;i++)    //get sum of filter

  {

    filter_sum = filter_sum + filter_buf[channel][i];

  }

 

  return ( filter_sum - filter_max - filter_min ) / ( N - 2 ); //get rid of pulse(max and min), and get average.

}

/*******************************************************************************

* 程序名    : Amarino_Compass

* 功能       : 取指南针(方位)数据

* 入口参数 : i : buf的总字节数

                  j : 数据的字长

  k: 选择滤波通道

* 返回值    : 指南针数据

*******************************************************************************/

int Amarino_Compass(int i,int j,int k) //i - total ASCII byte ; j - length of a value ; k - channel of filter

{

  int a = 0;

  if ( j == 3 )   a = Filter_AntiPulse ( k, 100 * buf[i - j] + 10 * buf[i - j + 1] + buf[i - j + 2] ); //if value from 100 ~ 360

  if ( j == 2 )   a = Filter_AntiPulse ( k, 10 * buf[i - j] + buf[i - j + 1] );                        //if value from   10 ~ 99

  if ( j == 1 )   a = Filter_AntiPulse ( k, buf[i - j] );                                              //if value from   0 ~ 9

  //if ( j == 3 )   a = 100 * buf[i - j] + 10 * buf[i - j + 1] + buf[i - j + 2] ; //if value from 100 ~ 360

  //if ( j == 2 )   a = 10 * buf[i - j] + buf[i - j + 1] ;                        //if value from   10 ~ 99

  //if ( j == 1 )   a = k, buf[i - j] ;                                              //if value from   0 ~ 9

  return (a);

}

/*******************************************************************************

* 程序名    : Amarino_Orientation

* 功能       : 取Orientation传感器的三个数据,赋值给orientation[3]

* 入口参数 : 无

* 返回值    : 无

*******************************************************************************/

void Amarino_Orientation()

{

  int i = 0;

  int j = 0;

  int value_pos[3][2];

  while( i < buf_i )

  {

if( buf[i] == 17 || buf[i] == 11 ) value_pos[j][0] = i; //get 'A' or ';'

    if( buf[i] == -2 )   //get '.'

    {

      value_pos[j][1] = i;

 

      if( buf[ value_pos[j][0] + 1 ] == -3 ) orientation[j] = -Amarino_Compass( value_pos[j][1] , value_pos[j][1] - value_pos[j][0] - 2 , j ); //if value is '-'

        else orientation[j] = Amarino_Compass( value_pos[j][1] , value_pos[j][1] - value_pos[j][0] - 1 , j ); //translate effective value to an int data   

  j++;

    }

    if( j > 2 ) break;

i++;

  }

}

/*******************************************************************************

* 程序名    : Amarino_Process

* 功能       : 供外部程序调用,处理amarino数据

* 入口参数 : i      : 接收的字节数据

                  type : 选择的event(传感器)。 1 - COMPASS ; 2 - ORIENTATION

* 返回值    : 无

*******************************************************************************/

void Amarino_Process(int i, int type)

{

    buf_tmp = i;       //get serial data

    if( buf_tmp != 19 )            //if one amarino Compass data isn't end

    {

      buf[buf_i++] = buf_tmp - 48; //save a ASCII byte to buf and translate to int.

    }

    else                           //if amarino sensor data send ending

    {

if(type==COMPASS)

{

Perception_Amarino(Amarino_Compass(buf_i,buf_i-1,0),0,0);

}

if(type==ORIENTATION)

{

Amarino_Orientation();

Perception_Amarino(orientation[0],orientation[1],orientation[2]);

}

buf_i = 0;                   //reset receive buf count

    }

}


5. 作品总结

      该作品已初步具备仿生机械的意义,在各个领域均可应用,且完全可以融入各类传感器,所以说该作品潜力无限。本项目做的仿生机器手,结构较为简单,程序明了,虽然现在的科技如此发达,但学生们的动手和独自思维能力却不尽如人意本项目作品在一定程度上会有助于这一方面的提高。在科技如此发达的今天,如何使其具备思维能力,依旧是一大技术难关。

* 本项目未获得作者开源授权,无法提供资料下载

© 2022 机器时代(北京)科技有限公司  版权所有
机器谱——机器人共享方案网站
学习  开发  设计  应用