VREP官方手册学习笔记(接近传感器篇)

接近传感器

官方手册Scene objects栏

类型

类型从超声波到红外线,能检测detectable的实体

这里写图片描述

  1. 光线类型:

    • 理想地适用于接近传感器的简单模型或是激光距离探测器的建模
    • 最快的接近传感器
  2. 随机光线类型

    • 属于光线类型,随机扫描圆锥的体积,外观与锥形接近传感器相似
  3. 金字塔型

    • 理想地适用于接近传感器的简单模型,检测体积是矩形,具有迅速性
  4. 圆柱型

    • 理想地适用于接近传感器的简单模型,检测体积是旋转的,具有迅速性
  5. 磁盘型

    • 接近传感器的精确模型,检测体积是旋转扫描
    • 取决于选择的精度和运行模式,其可以有更大的计算量

6.圆锥型

  • 大部分接近传感器最好,最精确的模型
  • 取决于选择的精度和运行模式,其可以有更大的计算量

检测机制

  • 接近传感器以几何精确的方式操作:它们在感测点(小球体)和干扰其检测体积(理解为与检测体积的交集)的任何可检测实体之间执行精确的距离计算(它们不像大多数其他仿真软件那样,在检测体积边缘之间进行简单的碰撞检测,而是在检测体积内进行精确的距离计算)。每个接近传感器如下计算以下最小距离

这里写图片描述

检测结果可以在图表数据流中显示

接近传感器属性设置

小技巧
如果选择了一个以上的接近传感器进行参数设置,那么可以将一些参数设置从最后选定的接近传感器复制到其他选定的接近传感器(点击Apply to selection按钮):

  • Sensing point size:对检测无影响,即使显示尺寸很大,也被认为是一个点
  • Entity to detect:只检测带标签的可检测实体(带标签,即设置Detectable properties)
  • Explicit handling:指明是否显式处理传感器,若选中,则当调用simHandleProximitySensor(sim_handle_all_except_explicit) 时,传感器不去进行处理,只有当调用simHandleProximitySensor(sim_handle_all) 或 simHandleProximitySensor(proximitySensorHandle),传感器才处理
  • 如果用户希望在子脚本中而不是在主脚本中处理传感器(如果没有检查,则传感器将被处理两次,一次在主脚本中调用simHandleProximitySensor(sim_handle_all_except_explicit),一次在脚本中simHandleProximitySensor(proximitySensorHandle)),这样很有用。具体参考explicit and non-explicit calls部分

接近传感器检测参数设置

这里写图片描述

  • Front / back face detection:用户决定传感器看到并检测到三角形的哪一边,在 triangle edit mode中,Front faces为蓝色,back faces为红色
  • Fast detection (approximate):变快,但准确性降低
  • Limited angle detection:选中时,可指定检测光线和物体表面法向量的最大角度,该特性在超声波接近传感器上很有用(超声波传感器一般不能看到没有足够面向传感器的物体表面)。当最大角度设置为很小时,检测速度大大提高。
    这里写图片描述
    这里写图片描述
  • Occlusion check:障碍物确认,当传感器运行在limited angle detection模式上时,其会检测一些隐藏的物体,为了避免这样的情况,选中该项,计算时间会大大增加。当需要设置该项时,建议使用随机光线型接近传感器
  • Don’t allow detections if distance smaller than:设置最小检测距离(a mask distance),模拟真实情况(太近检测不到),若简单地设置检测体积偏移(an offset for the detection volume),则也会增加检测距离(不希望看到)
  • Randomized ray detection:适用随机光线型接近传感器

加速度传感器

红色:X轴
绿色:Y轴
蓝色:Z轴

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

if (sim_call_type==sim_childscriptcall_initialization) then 
    modelBase=simGetObjectAssociatedWithScript(sim_handle_self)
    //Retrives the handle of the object the script is attached to
    massObject=simGetObjectHandle('Accelerometer_mass')
    sensor=simGetObjectHandle('Accelerometer_forceSensor')
    result,mass=simGetObjectFloatParameter(massObject,sim_shapefloatparam_mass)
    ui=simGetUIHandle('Accelerometer_UI')
    simSetUIButtonLabel(ui,0,simGetObjectName(modelBase))
    accelCommunicationTube=simTubeOpen(0,'accelerometerData'..simGetNameSuffix(nil),1)
end 

if (sim_call_type==sim_childscriptcall_cleanup) then 

end 

if (sim_call_type==sim_childscriptcall_sensing) then 
    result,force=simReadForceSensor(sensor)
    if (result>0) then
        accel={force[1]/mass,force[2]/mass,force[3]/mass}
        simTubeWrite(accelCommunicationTube,simPackFloatTable(accel))
        simSetUIButtonLabel(ui,3,string.format("X-Accel: %.4f",accel[1]))
        simSetUIButtonLabel(ui,4,string.format("Y-Accel: %.4f",accel[2]))
        simSetUIButtonLabel(ui,5,string.format("Z-Accel: %.4f",accel[3]))
    else
        simSetUIButtonLabel(ui,3,"X-Accel: -")
        simSetUIButtonLabel(ui,4,"Y-Accel: -")
        simSetUIButtonLabel(ui,5,"Z-Accel: -")
    end
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值