邹老师您好,学习您的倒立摆课程后,您的课程讲解的非常清晰,我感觉学习到了很多,我在学习完成课程之后模仿您的这个强化学习框架,尝试搭建UR3机械臂的强化学习环境,但是我在过程中遇到了这样的问题,请邹老师帮忙指导一下。
老师课程中提到关于开启同步模式的一些注意事项,我程序中都是仿照老师的框架写的,但是当我执行设置机械臂的某一个关节转动0.3弧度,然后执行同步触发+ 阻塞命令(保证前面的设置关节命令执行完成)

simxSynchronousTrigger
simxGetPingTime
然后我读取关节的角度信息,我理解应该是0.5弧度可是实际得到的角度是不足0.3而且误差较大,为此我写了一个for循环
让关节1每次增加0.5弧度,执行同步触发+ 阻塞命令,然后紧接着读取关节1 的角度信息,我发现确实有误差。而且我发现如果我在执行完成阻塞命令后
再加入一个短暂延时例如 time.sleep(0.05) 结果读取到的关节角度就变成0.3弧度了,为此我很疑惑,根据官方手册和老师课程中的讲解,
同步模式下,同步触发+ 阻塞命令为什么没有保证我命令执行完成呢,我有点疑惑。
附上官方同步模式保证数据更新的方法
https://www.coppeliarobotics.com/helpFiles/en/remoteApiModusOperandi.htm#synchronous
最简单的方法是在调用 simxSynchronousTrigger 之后直接以阻塞方式调用函数:
simxSynchronous(clientID,true); // Enable the stepped mode (Blocking function call)
simxStartSimulation(clientID,simx_opmode_oneshot);
设置关节1;// The first simulation step waits for a trigger before being executed
simxSynchronousTrigger(clientID); // Trigger next simulation step (Blocking function call)
// The first simulation step is now being executed
simxGetPingTime(clientID); // After this call, the first simulation step is finished (Blocking function call)
// Now we can safely read all streamed values
读取关节1角度
(然后我就是按照这个框架编写的但是读到的数据不对,好像这个阻塞命令没有完成阻塞一样,好像读取命令到底的时候机械臂还没有运行结束)
我自己的代码我进行了改进 ,在设置关节1命令之后使用同步触发+ 阻塞命令然后读两次关节1的角度,看看两次的关节角度是否一样,理论应该一样但是实际真不一样
下面是我的截图

请老师有时间帮忙解答一下。