弹钢琴拟人机械手控制软件的设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
弹钢琴拟人机械手控制软件的设计

弹钢琴拟人机械手控制软件的设计   摘 要:在Visual Studio开发环境下,使用C#语言设计了弹钢琴拟人机械手控制软件,软件由乐谱管理,音频播放,仿真操作界面以及串口通信部分组成。软件设计了算法对输入的乐谱数据进行识别与分析,将乐谱的弹奏任务智能分配给机械手。充分利用C#语言可视化编程的优点,将机械手运动的过程进行了可视化仿真。   关键词:拟人;机械手;仿真;软件设计   0 引言   随着科学不断进步,新型机械手在关节自由度、灵活性、定位精度等方面有了很大的提高,加强了音乐机器人物理演奏能力。现有的控制系统大致上分为两类,一是采用记录并回放的方式,将演奏过程中按键的轻重等因素记录为midi音源,并通过将其转化为波形脉冲信号驱动机器人达到演奏的目的[1]。这种方式应用于早期的钢琴自动演奏技术上,其硬件不具有拟人化的特征,例如日本早稻田大学曾经研制过钢琴演奏机器人,共有88台击键器和两台踏板驱动装置。二是采用硬编码的方式,即将完整曲目进行手工分析、每个曲谱分配给机械手相应的部位(例如某一根手指)计算运动轨迹然后编码。这种方式虽然在硬件上具有了拟人化的特性,但是任意两个不同结构的机械手之间即使是同一曲目的编码也各不相同,无法实现歌曲编码的复用。同时这两种类控制系统对环境、乐器规格适应性不强,无法对未知曲目进行自动分析并演奏。   编写符合软件工程理念,能对未知曲谱拟进行自动分析的拟人机械手弹钢琴控制软件能提高机器人演奏的自动程度和减少系统开发的开销,在音乐机器人演奏方面的应用前景十分广阔。   1 弹钢琴拟人机械手硬件结构   机械手选用圆柱的手指外形,使得手指的强度增加,同时最大化的接近人手的比例,可以使机械手更加的灵活[2-4]。手指的连接处采用平滑的边缘设计,使得手指节在复位时限位在手指伸直的中心轴线上。   采用气动作为动力源,气动作为驱动具有体积小、结构简单等优点[5]。气缸通过闸线进行传动,在机械手的上指节处连接,受力点在上指节并以连接销为轴进行运动,使得机械手拥有人手骨骼与肌肉一样的工作方式。整个气动回路连接气缸固定在固定板上,在固定板上与闸线定位块上的闸线穿孔进行对心固定。整体装配图如图1所示。   2 软件总体设计   软件使用C#语言编写,总体分为四大部分,乐谱管理,音频播放,操作界面以及串口通信,其中乐谱管理是软件的核心,包括对乐谱的输入与输出,将乐谱处理成机械手可以识别的数据格式,并将弹奏过程以可视化的形式在软件界面中仿真出来[6]。软件总体框图如图2所示。   3 乐谱处理   使用乐谱的最终目的是在软件可视化仿真时播放对应的音频,所以必须让计算机的发声设备能够理解软件发送的信号,因此采用了MIDI(Musical Instrument Digital Interface)格式传输数据[7]。   3.1 软件数据结构设计   整个软件中使用的数据都是整数类型,且乐谱的播放是有序的,所以选择数组作为数据结构。具体的数据需求及处理如下:   3.1.1 当前系统正在播放的音符   正在播放的音符使用MIDI音符编码,但由于用户输入的乐谱格式和输出的MIDI音符编码方式不同,所以需要在内部进行转换。钢琴上的白色琴键依次对应简谱中的1、2、3……,但在MIDI中对应的编码却不是连续的,因为穿插在白色琴键中的黑色琴键也占用了MIDI中的发音序列。考虑到琴键的总数是有限的,所以在软件中直接使用哈希表的形式将两者的编码建立映射。从中央C开始白色琴键和其间的黑色琴键的MIDI编码与用户输入编码的部分映射语句如下:   Hashtable soundToMidiNote = new Hashtable();   soundToMidiNote.Add(1,60);   soundToMidiNote.Add(#1, 61);   soundToMidiNote.Add(2,62);   3.1.2 当前音符在整首乐谱中所处的时间位置   第三方组件C# MIDI Toolkit提供了内部时钟用以计时,并将其转化成整数形式表示的时间位置,当内部时钟与音符位置相同时产生一个发音事件。   3.1.3 当前音符使用左手还是右手弹奏   3.1.4 当前音符使用哪个手指弹奏   3.1.5 机械手需要移动的距离   软件播放音符时,仿真界面下方的机械手也应该随着音符的改变而变化自身的位置,所以将音符和中央C之间的距离进行映射。以中央C为距离0,一个白色琴键的宽度为单位1,黑色琴键的宽度为0.5,从中央C开始连续7个白色琴键和其间的黑色琴键的距离映射代码如下:   Hashtable soundToMidiDistance = new Hashtable();  

文档评论(0)

fangsheke66 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档