V-rep机器人仿真

基本操作

1.物体的移动:拖动鼠标、输入绝对坐标、相对移动
2.旋转:绕世界坐标系旋转、绕相对坐标系旋转
3.关节:转动关节、移动关节(方形)、球角(球状)
4.旋转:world(世界坐标系旋转)、Parent(绕父系旋转)、Own (绕自己旋转)
5.产生鬼畜:原因每个杆有碰撞、调到动力学部分进行、设置不同的mask
6.可以增加驱动:选择关节–>动力学界面–>选择Motor enabled -->目标速度
7.Dummy :将两个位置完全黏在一起(注意Dummy 的方向不对有可能发生错位)
8.调速框为xml编程语言。
9.可以参照已经有的坐标,相对移动(选中两个物体,点击移动到重合)
10.为了直观可见:把移动副隐藏,在common–>Vis…
11.程序(4部分组成):第一部分初始化(获得句柄)、第二部分给关节赋速度(给句柄赋值)、第三部分读取传感器的值、第四部分清空
12.编程中有很多库函数:比如赋值速度、赋值力、赋值位置 可以通过Help中Helptopic来看
V-rep 说明书–>Writing code in and …–>V-REP API fra…–>Regular API–>Regular API functing list ( …)–>按Ctrl+F 出来搜索界面
13.我们使用的是Lua ,也可以使用 C/C++
14.一定要记住:把转动关节设置成电机驱动模式才能编程控制!!!
15.可以充当编码器或姿态转换器Graph
Grap绘制x、y、z曲线–>add–>Floating view–>选中Graph,在Floating右键–>view–>Associate,并且可以3D画线
16.添加距离传感器 选择最后一个(一般):先把传感器移动到合适的位置,再调整检测区域的大小
检测范围双击–>common–>Show volume parameters–>Range(检测的距离),Angle(检测的角度)
Show detection par…–>去掉 Don"t…
15.注意:先新建一个matlab的工作路径,比如我这里建立一个E:\monkey\Vrep Tutorial\3vrep_car_Matlab的路径。
16.但是另一种使用场景为我们希望采用界面操作的方式手动输入一些参数,或者是采用一些滑块等方式调整仿真状态,
这就涉及到了采用GUI实现的方式,选用Qt编程
17.在原点位置沿着Word坐标系转和沿着Own转是一样的效果,但是不是原点,一般要沿着Own转
18,可以设置转动关节的大小,为了美观 0.02 0.07
19.通过力传感器将前轮和车体连接,原理:车体和前轮通过力传感器连接在一起,前轮又和重力连接到一起
实现
20.运动鬼畜:因为:出现碰撞 解决:修改make
21.隐藏模型:双击模型–>commen–>Visib…
22.小车太轻需要附加质量:双击–>最下–>改质量和转动惯量–>点三下(M=M2;I=I2)
加上质量后小车一动不动,因为太沉了。
23.添加程序 :记事本图标–>Insert new script -->Child script(non-thre…) -->把程序连接到车体上 --> 打开关节驱动
24.修改一下质量对运动有影响
25.如果小车向反方向移动,则说明速度方向赋反了,正负号改一下就好,正负号控制速度方向
26.注意:放一个物体测试能不能检测到,要把这个物体的属性改了 :双击–>comon–>下边选择4都勾选
27.增加一个视觉传感器:add–>Vision sensor --> Perspective type
之后调整一下摄像头属性:Near/far 最近/最远照射到位置,Resolution X/Y :256/256 (应该是范围x和y方向)
28.做一个界面:add–>Floating view(用于显示摄像头的画面)
选中摄像头传感器,–>在Floating 右键 -->View–>Assoiate view with vision…
29.前面的万向轮可以改成没有摩擦,可以解决车抖动的问题
如果小车出现翻车,可以将小车改成4轮,把前车轮不让电机使能,把前车轮的摩擦力勾掉
30.add–>path–>圆圈(第二个) 调整视角(多窗口)
对Path编辑,旁边的path编辑器 全选所用点 位置有一个缩放,选择0.19
31.传送带:先复制上下两个顶点–>选中一半的园拉长0.5
0.05 0.005 0.18 传送带木板(不需要动力学属性、将common的4个勾都勾选) Dummy Bate -90°
32.把三个物体合成一个物体,比如传送带,选中这三个物体–>Edit–>Grouping
33.让物体移动,一种是摩擦力方式,一种是物体坐标的移动
34.连杆机构一般有一个主动件,设成电机驱动,注意:一定要给一个速度。
35.在制造连杆机构时候,先建立一个平面,这个平面相当于地面,例如四杆机构两个转动关节要接地,就把这两个转动关机固定到地面上
36.当一个物体没有动力学属性时,一定要把conmon四个勾打上(让图形变得可视,可检测)
37.循迹灯建立,add–>Vision sensor–>第一个 设置参数 : 去掉深度信息 Near/far 0.01/0.1 调整摄像头的取值范围
38.每个物体都有自己的坐标系, x(红色),y(蓝色),z(黑色)
39.建立循迹线add–>path–>s(园用来做封闭的路径) 编辑 缩小,扩大选项 位置–>scaling operations
除了园,还有直线(复制,粘贴增加点数)(直线做非封闭)
调整曲线的属性 双击–>Show path shaping dialog -->Path shaping enable(选上) type(形状)(循迹用平面) colo
用两个直线拼接可以形成没有弧度的尖角
40.如果传感器没有检测到线,有可能黑线在地面上,稍微让黑线向上移动0.001,就可以了
41.机器人其次变换:固定坐标系点的坐标 = 目标点(最后一个坐标系)左乘(绕着固定坐标系x旋转)或右乘(绕这自己x轴旋转)
注意:平移左乘没有意义
42.有姿态信息的点就是一个坐标系!!!!
43.D-H参数确定:
各个坐标系建立,Z轴沿着转动副方向,X轴垂直于Z1,Z2所构成的平面(不用确定y轴)
固定坐标系一般和x1,Z1重合
编写D-H参数:Xq:绕着X轴旋转 XL:绕着X轴移动 Zq:绕着Z轴旋转 ZL:绕着Z轴移动
(0,1!)(1,2!)(2,3!)(…) 注意所有的Zq都是变量 看后一个相对于前一个
看有没有沿着x轴转动看两个z轴的角度 绕着Z轴旋转 一般都是变量
XL:绕着X轴移动 XL:绕着X轴移动 ::看前一个坐标中X (一开始是沿着前一个坐标系转完后移动)
Zq:绕着Z轴旋转 ZL:绕着Z轴移动::看后一个坐标系Z (后是沿着后一个坐标系系旋转后移动)
如果最后结果多了一段距离(其实就是y轴的距离),则可以将间的坐标系向前移动一段距离
44.用V-rep制作连杆模型时,关节(固定位置不动的关节)固定在平面上,连杆一般不固定到地面上
两个杆件焊接用Dmmuy完成
45.关节可以固定到地面上或连接在连杆之上
46.正运动学,已经知道各个关节的角度求末端的位置(相对于固定坐标的位置)
47.逆运动,已经知道末端的位置,求角度。

函数控制

控制关节运动:
初始化–>先获得这个关节的句柄–>句柄就是一个变量:以后通过操作这个变量来控制这个关节的运动
例:left = simGetObjectHandle(‘left’)
right = simGetObjectHandle(‘right’)
控制关节的转速:
simSetJointTargetVelocity(right,-0.5)
simSetJointTargetVelocity(left,-2)
传感器的读取(开关量传感器):
先要获得距离传感器的句柄:
sensor1 = simGetObjectHandle(‘sensor1’)
通过句柄获得距离传感器:
result = simRendProximitySensor(sensor1)
result == 0 没有检查到物体,反之检测到物体
注意编程技巧:双击名称,相同名称的单词会点亮,说明你输入的没错
程序中的判断语句编写:
if() then

end

如果检测到物体就转弯程序:
if(result == 0) then
simSetJointTargetVelocity(right,speed)
simSetJointTargetVelocity(left,speed)
end
if(result == 1) then
simSetJointTargetVelocity(right,-speed/8)
simSetJointTargetVelocity(left,-speed/2)
end
由于速度太短,几乎没有后退的时间,因为这个程序没有延时函数。
改进 加一个 back参数
back = -1
if (result == 1) then back=simGetSimulationTime() + 4 end
if (back<simGetSimulationTime()) then --back一开始是负数一定小于系统时间
simSetJointTargetVelocity(right,speed)
simSetJointTargetVelocity(left,speed)
else
simSetJointTargetVelocity(right,-speed/8)
simSetJointTargetVelocity(left,-speed/2)
end
函数解释:如果检测到物体,back > time ,back一直大于四个循环周期,所以起到一个延时的效果
要读取传感器,先要获得传感器的句柄
数组使用前要定义floorSensorHandles(-1,-1,-1)
floorSensorHandles[1] = simGetObjectHandle(“l”)
读取视觉传感器传感器:result,data = simReadVisionSensor(floorSensorHandles[1])
注意读取视觉传感器函数返回两个参数:result 代表是否正常工作 result == -1 代表有问题
data 代表图像信息,是一个数组
data[11] 代表灰度信息,若data[11] <0.3 则代表是黑色
for循环的写法: for i=1,10,1 do

                      end

猜你喜欢

转载自blog.csdn.net/weixin_39303781/article/details/108911217