因为在学校里要学习vrep控制nao,但网上资源较少,找起来很费力,我也试试写写自己博客。我引用了一些大佬对vrep使用的探索,侵删。
Vrep 控制 nao
一、 关节参数表:
我们以nao的左臂中LElbowRoll3为例,它的作用是来控制左边小臂的左右摆动

  1. Joint栏
    Pos. min. 位置最小值;位置的最小值,单位是度。
    Pos. range位置范围;位置的可变换值,单位是度。
    Position:默认位置的旋转角度,初始位姿用这个调整。
    !!!注意:Position值的范围为[Pos. min. , Pos. min. + Pos. range]
    所以,如果你输入的Position的值超出了这个范围,你输入的值就会变化,但是通过关节参数表或者代码设置目标位置时,就好像不用在意这个范围内,这点后面在介绍。
    (1)现在我来补充一下Position这个参数
    我们以LShoulderRoll3为例(为什么要换一个关节举例呢?因为当我修改LElbowRoll3的Position参数值后,它又重新恢复到原来的值。)
    修改前LShoulderRoll3的Position值为0,如图1所示,注意此时nao的胳膊。

图一

然后我们将Position的值改为90(单位度)结果如图2所示,虽然我输入的是90,但是值变为了76.01,这就是我们上面注意提到的。此时手臂已经转动。
图二
我们在回到LElbowRoll3例子中
(2)我们进入Dynamic properties(动态特性),如图3所示。
Motor enabled(电机已启用) 打勾后关节可以转动
Target velocity(目标速度 单位度/秒) 当nao开始运动后,这个关节最终会达到该速度。
Maximum torque(最大扭矩) 可以看作加速度,它的值越大,关节到达Target velocity越快。

Target position(目标位置) 当nao开始运动后,这个关节最终会到达该位置。与上面的Position相似。
Upper velocity limit(速度上限)
Target velocity和Target position可以通过程序来控制,这两个属性也是nao运动的关键。velocity一般nao不用,nao主要是用Target position,我们第一次做的小车是使用Target velocity的。

图3
!!!注意:我主要写了这些常用的(只能看懂这些),关节属性表的详细参数见此链接https://blog.csdn.net/DanielDingshengli/article/details/80536342

二、程序控制
脚本简介:vrep的脚本代码分为四部分,如图4所示。详情请见链接https://blog.csdn.net/DanielDingshengli/article/details/80547400
其语言为lua,语言学习见菜鸟教程。

脚本编程的函数有很多,具体见vrep的官方文档,下面我只介绍我用到的。
sim.getObjectHandle(“物体名称”) 获得句柄,和c语言中的文件句柄差不多,也可以理解为指针。
minDeg和maxDeg是两个表(可以理解为lua语言中的数组),他们分别记录了关节转动的最小角度和最大角度。
sim.getObjectName(句柄指针) 获得该句柄的名字。
xml的用法见官方文档,这个具体我也不是很清楚,但是应该和html差不多。举例简单说一下:

tile 名称,就是我们的例子LElbowRoll3。
hslider 表明这是个滑条。
minimum 滑条最小值。
maximum 滑条最大值
id值很关键,不能重复。
结果

simUI.create(xml) 按照xml创建UI
simUI.setSliderValue(ui,1,0) 设置滑条的初始值,中间的参数是id号
simUI.getSliderValue(ui,1) 获取滑条的值,最后一个值是id号
关于这个UI控制其实对我们来讲作用不大。最后肯定是让nao自动抓取的。
sim.setJointTargetPosition(lElbowRoll3,-position) 这个函数就是控制nao的关键,第一个参数是句柄指针,第二个参数是目标位置。当运行该函数时,关节就会以某一速度转动到目标位置。

具体代码见最后。

Vrep属性部分翻译:

  1. Model definition 模型定义
    Object is model base
    Edit model properties 编辑模型参数
    Select model thumbnail 选择模型缩略图
    Override properties 覆盖参数
    Model is not visible 模型不可见
    Model is not collidable 模型不可碰撞
    Model is not measurable 模型不可测量
    Model is not renderable 模型不可渲染
    Model is not detectable 模型无法检测
    Model is not dynamic 模型不是动态的
    Model is not respondable 模型不响映
    Model scripts are inactive(child scripts and customization scripts)
    模型脚本处于非活动状态(子脚本和自定义脚本)
    Invisible to other model` s bounding boxes 对其他模型的边界框不可见

  2. General properties 常规属性
    Selectable 可选
    Invisible during selection 选择期间不可见
    Select base of model instead 选择模型的基础
    Ignored by depth pass 被深度传递忽略
    Ignored by model bounding box 被模型边界框忽略
    Ignored for view-fitting 忽略视图拟合
    Cannot be deleted during simul 不能在模拟过程中删除
    Cannot be deleted 无法删除

  3. Object Special properties 对象特殊属性
    Collidable 可碰撞的
    Measurable 可测量的
    Detectable 可检测
    Renderable 可渲染

代码:(我的代码在JointRecorder中)

function sysCall_init()nao=sim.getObjectHandle("NAO")--Set degminDeg={0,-math.pi,-math.pi/2,0}maxDeg={math.pi/2,math.pi,math.pi/2,math.pi/2}--leftlShoulderPitch3=sim.getObjectHandle("LShoulderPitch3")lShoulderRoll3=sim.getObjectHandle("LShoulderRoll3")lElbowYaw3=sim.getObjectHandle("LElbowYaw3")lElbowRoll3=sim.getObjectHandle("LElbowRoll3")lThumbBase=sim.getObjectHandle("NAO_LThumbBase")--rightrShoulderPitch3=sim.getObjectHandle("RShoulderPitch3")rShoulderRoll3=sim.getObjectHandle("RShoulderRoll3")rElbowYaw3=sim.getObjectHandle("RElbowYaw3")rElbowRoll3=sim.getObjectHandle("RElbowRoll3")naoName=sim.getObjectName(nao)xml='<ui title="'..naoName..' Control Grasp" closeable="true" resizable="true" layout="vbox" >'..[[<tabs><tab title="LElbowRoll3"><hslider minimum="0" maximum="100"  id="1"/></tab><tab title="LElbowYaw3"><hslider minimum="0" maximum="100"  id="2"/></tab><tab title="LShoulderPitch3"><hslider  minimum="0" maximum="100" id="3"/></tab><tab title="LShoulderRoll3"><hslider  minimum="0" maximum="100" id="4"/></tab><tab title="NAO_LThumbBase"><button  text="grasp" id="5"/></tab></tabs></ui>]]ui=simUI.create(xml)simUI.setSliderValue(ui,1,0)simUI.setSliderValue(ui,2,50)simUI.setSliderValue(ui,3,50)-- 50=(100-0)/2simUI.setSliderValue(ui,4,0)
endfunction sysCall_actuation()position=minDeg[1]+simUI.getSliderValue(ui,1)/100*(maxDeg[1]-minDeg[1])sim.setJointTargetPosition(lElbowRoll3,-position)  position=minDeg[2]+simUI.getSliderValue(ui,2)/100*(maxDeg[2]-minDeg[2])sim.setJointTargetPosition(lElbowYaw3,-position)position=minDeg[3]+simUI.getSliderValue(ui,3)/100*(maxDeg[3]-minDeg[3])sim.setJointTargetPosition(lShoulderPitch3,position)position=minDeg[4]+simUI.getSliderValue(ui,4)/100*(maxDeg[4]-minDeg[4])sim.setJointTargetPosition(lShoulderRoll3,position)if(simUI.getWidgetVisibility(ui,5)) thensim.setJointTargetVelocity(lThumbBase,1)end
end

修改ui界面以后

function sysCall_init() nao=sim.getObjectHandle("NAO")--Set degminDeg={0,-math.pi,-math.pi/2,0}maxDeg={math.pi/2,math.pi,math.pi/2,math.pi/2}--left armlShoulderPitch3=sim.getObjectHandle("LShoulderPitch3")lShoulderRoll3=sim.getObjectHandle("LShoulderRoll3")lElbowYaw3=sim.getObjectHandle("LElbowYaw3")lElbowRoll3=sim.getObjectHandle("LElbowRoll3")--finger in left arm--fistlThumbBase=sim.getObjectHandle("NAO_LThumbBase")lLFingerBase=sim.getObjectHandle("NAO_LLFingerBase")lRFingerBase=sim.getObjectHandle("NAO_LRFingerBase")--secondrevolute_joint8=sim.getObjectHandle("Revolute_joint8")revolute_joint12=sim.getObjectHandle("Revolute_joint12")revolute_joint11=sim.getObjectHandle("Revolute_joint11")--thirdrevolute_joint14=sim.getObjectHandle("Revolute_joint14")revolute_joint13=sim.getObjectHandle("Revolute_joint13")--right armrShoulderPitch3=sim.getObjectHandle("RShoulderPitch3")rShoulderRoll3=sim.getObjectHandle("RShoulderRoll3")rElbowYaw3=sim.getObjectHandle("RElbowYaw3")rElbowRoll3=sim.getObjectHandle("RElbowRoll3")naoName=sim.getObjectName(nao)--[[xml='<ui title="'..naoName..' Control Grasp" closeable="true" resizable="true" layout="vbox" >'..[[<tabs><tab title="LElbowRoll3"><hslider minimum="0" maximum="100"  id="1"/> </tab><tab title="LElbowYaw3"><hslider minimum="0" maximum="100"  id="2"/></tab><tab title="LShoulderPitch3"><hslider  minimum="0" maximum="100" id="3"/></tab><tab title="LShoulderRoll3"><hslider  minimum="0" maximum="100" id="4"/></tab><tab title="NAO_LThumbBase"><button  text="grasp" checkable="true" id="5"/></tab></tabs></ui>]]--]]xml='<ui title="'..naoName..' Control Grasp" closeable="true" resizable="true" layout="vbox" >'..[[<group><hslider minimum="0" maximum="100"  id="1"/> </group><group><hslider minimum="0" maximum="100"  id="2"/></group><group><hslider  minimum="0" maximum="100" id="3"/></group><group><hslider  minimum="0" maximum="100" id="4"/></group><group><button  text="grasp" checkable="true" id="5"/></group></ui>]]ui=simUI.create(xml)simUI.setSliderValue(ui,1,0)simUI.setSliderValue(ui,2,50)simUI.setSliderValue(ui,3,50)-- 50=(100-0)/2simUI.setSliderValue(ui,4,0)simUI.setButtonPressed(ui,5,false)
endfunction sysCall_actuation()grasping=simUI.getWidgetVisibility(ui,5)--[[if(grasping) thensim.setJointTargetPosition(lThumbBase,0)sim.setJointTargetPosition(lLFingerBase,20)sim.setJointTargetPosition(lRFingerBase,30)elsesim.setJointTargetPosition(lThumbBase,0)sim.setJointTargetPosition(lLFingerBase,0)sim.setJointTargetPosition(lRFingerBase,0)end--]]if(grasping) thensim.setJointTargetVelocity(lThumbBase,0.2)sim.setJointTargetVelocity(lLFingerBase,0.2)sim.setJointTargetVelocity(lRFingerBase,0.2)sim.setJointTargetVelocity(revolute_joint8,0.2)sim.setJointTargetVelocity(revolute_joint12,0.2)sim.setJointTargetVelocity(revolute_joint11,0.2)sim.setJointTargetVelocity(revolute_joint14,0.2)sim.setJointTargetVelocity(revolute_joint13,0.2)elsesim.setJointTargetVelocity(lThumbBase,0)sim.setJointTargetVelocity(lLFingerBase,0)sim.setJointTargetVelocity(lRFingerBase,0)sim.setJointTargetVelocity(revolute_joint8,0)sim.setJointTargetVelocity(revolute_joint12,0)sim.setJointTargetVelocity(revolute_joint11,0)sim.setJointTargetVelocity(revolute_joint14,0)sim.setJointTargetVelocity(revolute_joint13,0)endposition=minDeg[1]+simUI.getSliderValue(ui,1)/100*(maxDeg[1]-minDeg[1])sim.setJointTargetPosition(lElbowRoll3,-position)  position=minDeg[2]+simUI.getSliderValue(ui,2)/100*(maxDeg[2]-minDeg[2])sim.setJointTargetPosition(lElbowYaw3,-position)position=minDeg[3]+simUI.getSliderValue(ui,3)/100*(maxDeg[3]-minDeg[3])sim.setJointTargetPosition(lShoulderPitch3,position)position=minDeg[4]+simUI.getSliderValue(ui,4)/100*(maxDeg[4]-minDeg[4])sim.setJointTargetPosition(lShoulderRoll3,position)--if(simUI.getWidgetVisibility(ui,5)) then--sim.setJointTargetVelocity(lThumbBase,1)--end
end 

vrep_Nao控制_学习记录相关推荐

  1. QT子线程实现串口通信_学习记录

    QT子线程实现串口通信_学习记录 1 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容 ...

  2. C++高级编程(第3版)_学习记录

    <C++高级编程(第3版)> Professional C++, Third Edition [美]Narc Gregoire 著,张永强 译,清华大学出版社,2015.5第1版 文章目录 ...

  3. u3d005坦克大战_学习记录

    主要内容: 1.刚体.速度移动 2.自定义操作 3.自动销毁 4.调用 其他游戏物体挂载的脚本_非公共方法2() 5.音乐播放器获取 6.一段音频获取 7.通过字符串获取组件 8.3d的UI _血条制 ...

  4. python和pygame游戏开发指南_学习记录

    <python和pygame游戏开发指南> Making Games With Python and Palme [美]Ai Sweigart 著,李强 译,2015.12第一版 文章目录 ...

  5. cat命令分析_学习记录

    cat命令是将标准输入输出到标准输出 1 2 SYNOPSIS        cat [OPTION]... [FILE]... 虽然我们经常用cat来查看文件,但是它的本意可不是查看文件的,而是co ...

  6. mysql 设置某个字段等于某个字段_学习记录-第十八天(李玉婷MySQL基础 第12天)...

    复习DQL-DML-DDL+约束 /*复习 union DQL 查询语句,将多条查询语句的结果合并成一个结果 合并查询 union [all] 将一条比较复制的查询语句拆分多条语句 适用于查询多表,查 ...

  7. ALSA声卡12_从零编写之添加音量控制_学习笔记

    1.设置音量时应用程序的调用过程 (1)strace分析: amixer cset numid=1 30 (设置音量) /dev/snd/controlC0 open SNDRV_CTL_IOCTL_ ...

  8. u3d011 秘密行动_学习记录

    目录 1.网格碰撞器 2.灯光 3.声音AudioSource 3.人物移动 4. z轴越障碍相机跟随 5.自动寻路NavMeshAgent 6.简单计时器 7.画线LineRenderer 1.网格 ...

  9. Java面向对象编程(第2版)_学习记录

    <Java面向对象编程(第2版)> 孙卫琴 编著 文章目录 一.介绍 (一)平台与开发环境 (二)一些知识 (三)数组 二.类的生命周期 (一)类的加载 1. 加载 2. 连接 3. 初始 ...

  10. 显示请求_学习记录:HTTP的响应与请求amp;Curl

    本文包含四个部分,简要介绍HTTP请求.HTTP响应.chrome开发者查看.与CURL命令. Part1:HTTP请求 1GET请求指定的页面信息,并返回实体主体. 2HEAD类似于get请求,只不 ...

最新文章

  1. Mysql中Drop删除用户的名字_mysql5.5 使用drop删除用户
  2. Office2003与Office2007默认打开方式的切换
  3. Huffman树压缩和解压文件
  4. 单例设计模式八种写法
  5. Win10桌面上:[ 我的电脑 ] 图标不见了
  6. 移动热修复Sophix之初体验
  7. #今日论文推荐# XAI+网络安全?布兰登大学等最新《可解释人工智能在网络安全应用》综述,33页pdf阐述其现状、挑战、开放问题和未来方向
  8. QQ坦白说异常火爆!小伙平凡遭到妹子表白,编程技术是时候登场了
  9. walking机器人仿真教程-仿真控制
  10. 怎么将计算机设置为光盘引导模式,怎么设置uefi引导系统
  11. 片上总线Wishbone 学习(七)总线周期之握手协议
  12. 【产业互联网周报】高盛上调阿里云估值至1238亿美元;腾讯云入选Gartner全球云计算IaaS和PaaS魔力象限...
  13. 三菱fx 3u plc官方定位实例 整理
  14. android 自定义键盘震动,实现android按键震动按键声音的机制
  15. 爬虫抓取BestCoder的比赛排名
  16. 网络层协议(1):Internet 发展简史(上)
  17. 高级信息系统项目管理师十大领域
  18. 信息泛滥,抽奖集赞:微信如何扼杀了用户的独立和自由
  19. 获取汉字首字母(php,java)
  20. PEGAXY首创科幻类赛马游戏

热门文章

  1. matlab firl,matlab 利用matlab工具箱函数fir1 联合开发网 - pudn.com
  2. Webmax 2.0开启无限量下载
  3. 【信号检测】基于matlab双稳随机共振微弱信号检测【含Matlab源码 1701期】
  4. 学习笔记4--惯性导航及总结
  5. 网站定制开发和模板建站的具体区别是什么?
  6. PointRCNN 车辆 行人 自行车识别
  7. input type=file标签图片上传路径fakepath问题
  8. 程序人生之七:我的 2010
  9. 关于数据库方言MySQLDialect、MySQL5Dialect、MySQL55Dialect、MySQL57Dialect、MySQL8Dialect之间的区别与联系
  10. 做了三年前端开发后,我选择回家创业