vrep的bubbeRob仿真机器人制作教程

1. 构造基础模型

  • 添加bubbleRob的主体。点击 Menu bar --> Add --> Primititive shape --> Sphere,添加一个球体(以下称为bubbleRob),并将X-size设置为0.2。
    vrep的bubbeRob仿真机器人制作教程_第1张图片

  • 设置bubbleRob的动态属性。双击bubbleRob,打开动态属性设置对话框,勾选Body is respondableBody is dynamic。bubbleRob将对外界的碰撞作出动作和回应。同时在Common选项卡中,勾选CollidableMeasurable, Detecable, Renderable
    vrep的bubbeRob仿真机器人制作教程_第2张图片
    vrep的bubbeRob仿真机器人制作教程_第3张图片

  • 移动bubbleRob位置。将bubbleRob沿Z轴上移动2cm(因为后面要安装轮子),打开position对话框,在translation选项卡的Z轴输入0.02(m)。注意要以world为参考系。
    position对话框 vrep的bubbeRob仿真机器人制作教程_第4张图片

  • 加入距离传感器。点击Menu bar --> Add --> Proximity sensor --> Cone type,打开orientation对话框,在Around YAround Z上输入90。打开position对话框,选择position选项卡,在X-coordZ-coord上输入0.1和0.12。
    orientation对话框 vrep的bubbeRob仿真机器人制作教程_第5张图片

  • 设置距离传感器的探测距离。双击添加的Proximity sensor(以下称为bubbleRob_sencingNose),点击Show volume parameters,修改Offset为0.005,Angle为30,Range为0.15。确定后返回上一级,点击Show detection parameters,取消勾选Don’t allow detections if distance smaller than
    vrep的bubbeRob仿真机器人制作教程_第6张图片
    vrep的bubbeRob仿真机器人制作教程_第7张图片

  • 将bubbleRob_sencingNose安装到bubbleRob上。先在Scene hierachy上点击bubbleRob_sencingNose,然后按住Ctrl,再点击bubbleRob,最后点击Menu bar --> Edit --> Make last selected object parent 。
    vrep的bubbeRob仿真机器人制作教程_第8张图片

  • 构建轮子。可以新开一个界面,Menu bar --> File --> New Scene,在这个界面上构建好轮子模型后,再复制回去。添加一个圆柱体(cylinder),设置尺寸为(0.08, 0.08, 0.02)。同时将轮子设置为Collidable, Measurable, Renderable, Detectable。最后设置轮子的position为(0.05, 0.1, 0.04),Orientation为(-90, 0, 0)。Ctrl+C, V复制粘贴轮子,设置第二个轮子的position为(0.05, -0.1, 0.04)。将两个轮子复制粘贴回前一个Scene。
    vrep的bubbeRob仿真机器人制作教程_第9张图片

  • 安装轮子。需要先给左(右)轮子安装传动轴(电机)。点击Menu bar --> Add --> Joint --> Revolute。需要将传动轴安转在轮子的中心点。首先选中轮子,然后按住Ctrl,再选中传动轴。
    (电机),打开position对话框,在position选项卡中,点击Apply to selection;在orientation对话框的orientation选项卡中,也点击Apply to selection。然后在Scene hierarchy中,双击传动轴,点击Show dynamic parameters,选中enable the motorLock motor when target velocity is zero。同样对另外一个轮子做同样的工作。最后就是将轮子固定在传动轴上,然后将两个传动轴固定到bubbleRob上。
    vrep的bubbeRob仿真机器人制作教程_第10张图片
    vrep的bubbeRob仿真机器人制作教程_第11张图片

  • 构建后轮。如果没有后轮,运行仿真的时候,机器人是往后倒的。同样在新建场景中,添加一个球体(以下称为bubbleRob_slider),设置半径为0.05,动态属性设置为Collidable, Measurable, Renderable, Detecable。然后将bubbleRob_silder的材料摩擦力设置为0。
    vrep的bubbeRob仿真机器人制作教程_第12张图片
    vrep的bubbeRob仿真机器人制作教程_第13张图片

  • 固定后轮。为了将bubbleRob_silder固定在bubbleRob上,需要添加一个力传感器,点击Menu bar --> Add --> Force sencor,添加一个力传感器(以下称为bubbleRob_connection)。设置position为(-0.07, 0, 0.05),将bubbleRob_silder绑定在bubbleRob_connection上,然后复制回前一个场景,将bubbleRob_connection绑定在bubbleRob上。如果这时打开仿真,就会发现后轮迅速弹开,这是因为bubbleRob_silder和bubbleRob之间存在接触,仿真软件vrep认为它们之间存在碰撞。解决办法是在它们的动态属性对话框中,设置响应掩码。将bubbleRob_silder的掩码(local respondable mask)设置为00001111,将bubbleRob的掩码设置为11110000。这时再运行仿真就不会出现后轮弹开的现象了。但是还会有小幅度的滑动现象,这是由于仿真引擎和质量惯性的原因。在动态属性框中将三个轮子的质量和惯性因子设置成8倍,即点击三次M=M * 2(for selection)I=I * 2(for selection)
    在这里插入图片描述
    在这里插入图片描述
    vrep的bubbeRob仿真机器人制作教程_第14张图片

  • 运行仿真。设置两个传动轴的速度为50。
    vrep的bubbeRob仿真机器人制作教程_第15张图片

2.创建距离传感器、视觉传感器

  • 创建集合(collection)。为了将整个bubbleRob机器人当成一个整体,需要将bubbleRob全部零件设置为一个集合。点击 Menu bar --> Tools --> Collections打开对话框。或者单击下列图标:
    在这里插入图片描述
  • 将bubbleRob设置为集合。点击Add new collection,然后在左侧列表中选中bubbleRob,点击Add。点击Visualize selected collection可以查看集合中的元素。 vrep的bubbeRob仿真机器人制作教程_第16张图片
  • 添加距离传感器。点击 Menu bar --> Tools --> Calculation module properties,也可以点击下列图标:
    在这里插入图片描述
    在对话框中,点击Add new distance object,然后选择检测目标(bubbleRob_collection是上面的colleciton,已改名)和被检查目标(其他所有物体)。点击OK后,将这个对象重命名为bubbleRob_distance,对于后面的绘图有帮助。
    vrep的bubbeRob仿真机器人制作教程_第17张图片
  • 添加绘图对象。点击Menu bar --> Add --> Graph,然后将绘图对象重命名为bubbleRob_graph。将绘图对象绑定在bubbleRob上。
    vrep的bubbeRob仿真机器人制作教程_第18张图片
    接着调整graph的坐标为(0, 0, 0.005),双击graph设置属性,取消Display XYZ-planes,然后点击 Add new data stream to record,Data stream type选择Object absolute x-position,Object / items to record选择bubbleRob_graph。这样我们便可以记录bubbleRob实时的x坐标值。同理也对Y轴和Z轴进行同样的设置。另外,为了显示bubbleRob到其他物体的距离,点击 Add new data stream to record,Data stream type选择Distance: segment length,Object / items to record选择bubbleRob_distance。最后重新命名这些数据流(双击重命名)。如下图。
    vrep的bubbeRob仿真机器人制作教程_第19张图片
    可以在Time graph properties属性框中改变数据流线条的颜色和是否显示(取消勾选Visible则不显示)。
  • 设置bubbleRob的3D运动轨迹。同样在graph的属性框中,点击Edit 3D curves,打开轨迹对话框,点击Add new curve,XYZ值分别对应bubbleRob_x_pos, bubbleRob_y_pos, bubbleRob_z_pos,勾选Relative to world,设置参考系为世界坐标系,然后输入Curve width为4。
    vrep的bubbeRob仿真机器人制作教程_第20张图片
  • 添加障碍物。加入半径为0.1m, 高度为0.2m的圆柱体,然后可以使用Ctrl+CCtrl+V进行批量复制。可以按住Shift,再按住鼠标左键进行多选。先按住鼠标左键,再按住Shift可以进行微小调整。先按住鼠标左键,再按住Ctrl可以在Z轴进行调整。
  • 定义模块。如果我们想点击某个零件时,选中的是整个bubbleRob,或者是复制bubbleRob主体时,粘贴出来的bubbleRob也包含全部零件,或者防止不小心拖动某个零件导致错位,可以将bubbleRob的整体定义为一个模块。首先打开bubbleRob主体的属性框,在common属性项中,勾选Object is model baseObject/model can transfer or accept DNA
    vrep的bubbeRob仿真机器人制作教程_第21张图片
    第一项的作用是保存或复制某个对象时,会同时保存或复制它的所有子对象。第二项的作用是修改某个对象时,可以通过DNA transfer toolbar button将所有修改复制到该对象的所有副本。该按钮如下所示。
    在这里插入图片描述
    然后将两个转动轴(关节)和距离传感器还有绘图对象不要显示在模块的框框中。同样是在属性框的common属性项中,勾选Ignored by model bounding box,对比图如下所示,左侧是没有勾选之前的,右侧是勾选之后的。
    vrep的bubbeRob仿真机器人制作教程_第22张图片为了隐藏在转动轴和连接器这些小零件,可以两个转动轴和连接器的camera visibility layer勾选第10层,取消第2层。默认情况下第9-16层是不显示的,因此设置之后它们会在场景中隐藏起来。
    vrep的bubbeRob仿真机器人制作教程_第23张图片
    vrep的bubbeRob仿真机器人制作教程_第24张图片为了单击小零件时,自动选中bubbleRob主体,将两个轮子、滑块、传感器和绘图对象勾选上Select base of model instead。如果确实想只选中小零件,可以按住Ctrl+Shift,再点击小零件。也可以在左侧列表中选中。
  • 增加视觉传感器。点击 Menu bar --> Add --> Vision sensor --> Perspective type,然后将视觉传感器绑定在距离传感器上,将位置坐标为relative(0,0,0),同理将旋转角度也设置为relative(0, 0, 0)。同时隐藏视觉传感器,通过勾选Select base of model insteadIgnored by model bounding box。最后,在视觉传感器的属性框中,将Far clipping plane设置为1,Resolution xResolution y都设置为256。前者是设置最远检测距离,后者是设置分辨率。
    vrep的bubbeRob仿真机器人制作教程_第25张图片
  • 添加滤波器。打开Show filter dialog,在下拉框中选择Edge detection on work image,然后点击Add filter。成功添加Edge detection on work imagel滤波器后,点击上移图标,将滤波器移动至第二个位置。最后双击滤波器将阈值修改为0.2。vrep的bubbeRob仿真机器人制作教程_第26张图片

创建脚本控制bubbleRob

  • 只有在编写脚本后,bubbleRob才等于有了生命。在左侧列表中右键bubbleRob,点击Menu bar --> Add --> Associated child script --> Non threaded,创建一个脚本,这是bubbleRob图标的旁边会出现一个“小纸张”的图案,
    在这里插入图片描述
    双击进去即可编写Lua脚本。下面是一个实例脚本:
function speedChange_callback(ui,id,newVal)
    speed=minMaxSpeed[1]+(minMaxSpeed[2]-minMaxSpeed[1])*newVal/100
end

function sysCall_init()
    -- This is executed exactly once, the first time this script is executed
    bubbleRobBase=sim.getObjectAssociatedWithScript(sim.handle_self) -- this is bubbleRob's handle
    leftMotor=sim.getObjectHandle("bubbleRob_leftMotor") -- Handle of the left motor
    rightMotor=sim.getObjectHandle("bubbleRob_rightMotor") -- Handle of the right motor
    noseSensor=sim.getObjectHandle("bubbleRob_sensingNose") -- Handle of the proximity sensor
    minMaxSpeed={50*math.pi/180,300*math.pi/180} -- Min and max speeds for each motor
    backUntilTime=-1 -- Tells whether bubbleRob is in forward or backward mode
    -- Create the custom UI:
        xml = ''..[[
        
        
        ]]
    ui=simUI.create(xml)
    speed=(minMaxSpeed[1]+minMaxSpeed[2])*0.5
    simUI.setSliderValue(ui,1,100*(speed-minMaxSpeed[1])/(minMaxSpeed[2]-minMaxSpeed[1]))
end

function sysCall_actuation()
    result=sim.readProximitySensor(noseSensor) -- Read the proximity sensor
    -- If we detected something, we set the backward mode:
    if (result>0) then backUntilTime=sim.getSimulationTime()+4 end 

    if (backUntilTime

最后可以通过点击 Menu bar --> Tools --> Scripts或者下面的图标来对当前场景全部脚本进行管理。
在这里插入图片描述

你可能感兴趣的:(VREP)