工作记录【12.2】

明确了并不是一个threading快一个threading慢, 就是都慢

并且figured out 计算的trajectory和time interval无关,不论多慢都不会丢包

两个threading同时运行并不会使其共同变慢,对比如下图,都是在main threading里面输出的interval, 理想情况是100Hz

在这里插入图片描述

从mean和variance上面来看,差的并不多

有两篇文章讲为什么python里的threading很垃圾,https://www.youtube.com/watch?v=Obt-vMVdM8s and https://www.dabeaz.com/python/UnderstandingGIL.pdf, 码住,有时间看

现在复制一份Hiwonder代码并且尝试改为multiprocessing

——————————————————————————更新————————————————————————

换成了multiprocessing, 数据处理速度确实快了很多,而且也很稳定了

但是现在的问题是multiprocess 接收不到外面传来的信号,like(velocity),所以机器人不动

查阅了一下资料,threading是使用的同一个memory,但是multiprocessing用的是不同memory,所以如何处理不同processing之间的通信很重要

现在继续work on communication

经过一段时间的研究,发现main_threading和主函数数据交流很多而且频繁,使用multiprocessing的技术难度较大,而且不确定是否一定可行

但是另外一个servo_threading中只有一个数据传输,而且是单向输入的,所以比较适合用multiprocessing

现在implement 的code可以实现单向传输,** 但是在循环的时候只有外部有更新时,循环内部的值才会改变,当外部没有更新值时,循环的值还是初始值,这个需要解决一下 **

——————————————————12.3————————————————————————————

查阅资料得知,之前用的multiprocess的manager的namespace, 这个方法只能暂存并且传输数据,所以会导致不传数据的时候回到初始值的问题

后来使用了multiprocessing中的Array把传递setValue的状态,实验代码如下

from multiprocessing import Process, Array
import time
import numpy as np

def modify_shared_array(shared_array, rows, cols):
    # Modify the two-dimensional array
    while(1):

      print((np.array(shared_array).reshape(rows,cols)))
      time.sleep(0.01)

if __name__ == '__main__':
    # Define the size of the 2D array
    rows, cols = 3, 4
    set_value = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
    print(set_value)
    # Create shared array
    shared_array = Array('i', set_value.flatten())

    # Create a process and pass shared array and its dimensions
    process = Process(target=modify_shared_array, args=(shared_array, rows, cols))

    # Start the process
    process.start()
    
    for i in range(10):
      for i in range(len(shared_array)):
        shared_array[i] *=2
      time.sleep(0.1) 
    
    
    # Wait for the process to finish
    process.join()


结果如下:

[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
[[ 2 4 6 8]
[10 12 14 16]
[18 20 22 24]]
[[ 2 4 6 8]
[10 12 14 16]
[18 20 22 24]]
[[ 2 4 6 8]
[10 12 14 16]
[18 20 22 24]]
[[ 2 4 6 8]
[10 12 14 16]
[18 20 22 24]]
[[ 2 4 6 8]
[10 12 14 16]
[18 20 22 24]]
[[ 2 4 6 8]
[10 12 14 16]
[18 20 22 24]]
[[ 4 8 12 16]
[20 24 28 32]
[36 40 44 48]]
[[ 4 8 12 16]
[20 24 28 32]
[36 40 44 48]]
[[ 4 8 12 16]
[20 24 28 32]
[36 40 44 48]]
[[ 4 8 12 16]
[20 24 28 32]
[36 40 44 48]]
[[ 4 8 12 16]
[20 24 28 32]
[36 40 44 48]]
[[ 4 8 12 16]
[20 24 28 32]
[36 40 44 48]]
[[ 8 16 24 32]
[40 48 56 64]
[72 80 88 96]]
[[ 8 16 24 32]
[40 48 56 64]
[72 80 88 96]]
[[ 8 16 24 32]
[40 48 56 64]
[72 80 88 96]]
[[ 8 16 24 32]
[40 48 56 64]
[72 80 88 96]]
[[ 8 16 24 32]
[40 48 56 64]
[72 80 88 96]]
[[ 8 16 24 32]
[40 48 56 64]
[72 80 88 96]]
[[ 8 16 24 32]
[40 48 56 64]
[72 80 88 96]]
[[ 16 32 48 64]
[ 80 96 112 128]
[144 160 176 192]]
[[ 16 32 48 64]
[ 80 96 112 128]
[144 160 176 192]]
[[ 16 32 48 64]
[ 80 96 112 128]
[144 160 176 192]]
[[ 16 32 48 64]
[ 80 96 112 128]
[144 160 176 192]]
[[ 16 32 48 64]
[ 80 96 112 128]
[144 160 176 192]]
[[ 16 32 48 64]
[ 80 96 112 128]
[144 160 176 192]]
[[ 32 64 96 128]
[160 192 224 256]
[288 320 352 384]]
[[ 32 64 96 128]
[160 192 224 256]
[288 320 352 384]]
[[ 32 64 96 128]
[160 192 224 256]
[288 320 352 384]]
[[ 32 64 96 128]
[160 192 224 256]
[288 320 352 384]]
[[ 32 64 96 128]
[160 192 224 256]
[288 320 352 384]]
[[ 32 64 96 128]
[160 192 224 256]
[288 320 352 384]]
[[ 32 64 96 128]
[160 192 224 256]
[288 320 352 384]]

成功在process外永久修改变量的值

最后成功地实施在了Puppy Pi上面,calculating interval (threading)稳定在0.01s,servo interval(process)稳定在0.008s

梦中花前书生 2023-12-12 16.06.53

future work:

  1. 为什么call puppy.py的时候他会很快倒地
  2. 有时候会启动失败,height会锁定在-5cm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Teamcenter 12.2是由西门子数字工业软件公司开发的一个产品生命周期管理(PLM)系统。它提供了一套丰富的API(应用编程接口),以便开发人员可以通过编程方式与Teamcenter系统进行交互。 Teamcenter API Java是为了与Teamcenter系统集成而开发的Java编程接口。使用这个API,开发人员可以使用Java编程语言执行各种操作,例如创建、修改和删除Teamcenter中的对象,从Teamcenter中检索数据,执行工作流程等等。 使用Teamcenter 12.2 API Java,开发人员可以根据具体的需求编写自己的应用程序或插件,以满足用户的特定需求。它提供了一系列的类和方法,让开发人员可以轻松访问和操作Teamcenter中的数据。 通过Teamcenter 12.2 API Java,开发人员可以实现以下功能: 1. 访问和检索Teamcenter中的数据,例如产品信息、文件和文档等。 2. 创建、修改和删除Teamcenter中的对象,例如项目、工作组和工作流程等。 3. 执行一系列的操作,例如发布和回收数据、版本控制、访问权限管理等。 4. 与Teamcenter中的其他系统集成,例如ERP(企业资源计划)、CAD(计算机辅助设计)等。 5. 支持批量处理和自动化任务,提高工作效率和精确度。 6. 提供丰富的错误处理和日志记录机制,方便开发人员排查和解决问题。 总而言之,Teamcenter 12.2 API Java为开发人员提供了一个强大的工具,可以与Teamcenter PLM系统进行无缝集成,实现定制化的功能和自动化的流程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值