小R科技-WIFI亚博app 官网网·亚博app 官网创意工作室

 找回密码
 立即注册
查看: 1942|回复: 7
打印 上一主题 下一主题

关於XRservo的引用及控制

[复制链接]
跳转到指定楼层
楼主
发表于 2018-4-4 14:25:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小车到了之後,我用内附的SD卡玩了一下PC与Android端的控制现在是想自己从头开始,因此拿了新的SD卡刷了个官方推廌的RASPBIAN

装了vnc来控制,使用create_ap来开wifi热点,并用光碟内的示例测了履带、超声波等的功能


但要测机械臂与Camera云台时才发现,PWR.A53.B是用一颗I2C介面的IC来控制8个舵机,
且这个IC没有spec,只提供了一libXRservo.so、libXRservo.i64来做控制

问了一下线上客服,得到下面的说明:
-------------------------------------------------------------------
1,安装原版ubuntu系统
2,安装smbus-cffi,并确定实际可用
3,小R镜像/usr/local/lib/python2.7/dist-packages/ 替换自己安装的smbus-cffi的对应的文件夹 需要命令操作
4.测试smbus-cffi功能是否正常
5.调用API接口
通信协议在PPT 小R科技树莓派系列初级教程8--PWM进阶之XRservo详解.pptx
这个里面有详细说明
-------------------------------------------------------------------
我做了些测试,
smbus-cffi应该已经装了,
用的是这个:https://github.com/bivab/smbus-cffi
问题是:
步骤2,该如何确定可用?
步骤3,不知道怎麽做,是否有说明?
步骤4,不知怎麽测

另外,如何引入libXRservo.so?
--------------------------------------------------------------------
代码的例子大概像这样:
from smbus import SMBus
XRservo = SMBus(1)

...
XRservo.XiaoRGEEK_SetServo(0x01,Angle_cal(angle_from_protocol))
--------------------------------------------------------------------

这边看不出与libXRservo.so的关系,为什麽会执行前2行後便可以操作XRservo?
这部份也请说明一下…,是要设定python的环境变数?
I2C应该要设定Baudrate及工作模式,在这里也都没有看到,不知是在哪边执行的?

我自己测试:
-----------------------------------------------------------------------
from ctypes import *
import os
from smbus import SMBus

XRservo = SMBus(1)
XRservo.XiaoRGEEK_SetServo(0x01,90)

---------------------------------------------------------------------
是错在最後一行,表示libXRservo.so没有导入 (.so档放在与.py档相同的目录下),但上一行可以正常执行

请再帮忙教一下怎麽让XRservo动起来。

其实这个问题主要是libXRservo被包成库了,让我们没办法直接控制PWR.A53.B的PWMGENERATOR那颗IC,
若是这个档能提供源码,应该就没这麽多麻烦了...

微信关注我们
沙发
发表于 2018-4-4 14:50:47 | 只看该作者
1,安装原版ubuntu系统
2,安装smbus-cffi,并确定实际可用  
3,小R镜像/usr/local/lib/python2.7/dist-packages/   替换自己安装的smbus-cffi的对应的文件夹   需要命令操作
4.测试smbus-cffi功能是否正常
5.调用API接口

通信协议在PPT  小R科技树莓派系列初级教程8--PWM进阶之XRservo详解.pptx
这个里面有详细说明  
XRservo中,有3个标准函数可直接使用
1、设置舵机角度
XRservo.XiaoRGEEK_SetServo(0x01,angle)
注释:此函数为设置1号舵机角度为angle
2、舵机角度记忆,存储当前所有舵机角度值。
XRservo.XiaoRGEEK_SaveServo()
3、恢复所有舵机至已存储的角度
XRservo.XiaoRGEEK_ReSetServo()
''‘
time.sleep(2)
XRservo.XiaoRGEEK_SetServo(0x01,90)        ##设置1舵机角度90°
print 'ser1= 90° '
time.sleep(0.5)
XRservo.XiaoRGEEK_SetServo(0x01,30)        ##设置1舵机角度30°
print 'ser1= 30°并存储 '
time.sleep(0.1)
XRservo.XiaoRGEEK_SaveServo()        ##存储当前角度(30°)
time.sleep(0.5)
XRservo.XiaoRGEEK_SetServo(0x01,90)        ##设置1舵机角度90°
print 'ser1= 90° '
time.sleep(0.5)
XRservo.XiaoRGEEK_SetServo(0x01,150)##设置1舵机角度150°
print 'ser1= 150° '
time.sleep(1.5)
XRservo.XiaoRGEEK_ReSetServo()        ##恢复舵机存储的角度(30°)
print '恢复存储的角度30° '
'''
整个程序功能为:
舵机转动到90°
舵机转动到30°,并存储,
依次隔0.5s,转动到90°及150°
隔1.5s后,恢复存储的角度30°
程序结束
上电启动时候会默认执行3号指令,恢复所有舵机至已存储的角度
板凳
 楼主| 发表于 2018-4-4 15:45:05 | 只看该作者
liuviking 发表于 2018-4-4 14:50
1,安装原版ubuntu系统
2,安装smbus-cffi,并确定实际可用  
3,小R镜像/usr/local/lib/python2.7/dist- ...

老大你把线上客服给我的东西又贴了一次啊...

就是因为这样不够所以我才又整理了一份问题啊

麻烦再确认一下问题啦…,现在应该主要是怎麽引入libXRservo.so
让下面的代码可以执行
from smbus import SMBus
XRservo = SMBus(1)
...
XRservo.XiaoRGEEK_SetServo(0x01,Angle_cal(angle_from_protocol))

地板
发表于 2018-4-4 21:56:51 | 只看该作者
3,小R镜像/usr/local/lib/python2.7/dist-packages/   替换自己安装的smbus-cffi的对应的文件夹
这一步就是最重要的移植接口文件的。
5#
 楼主| 发表于 2018-4-4 22:46:13 | 只看该作者
意思是说把你们提供的 /usr/local/lib/python2.7/dist-packages/中的smbus-cffi相关内容,整个移到新SD卡里对应的路径吗?

就是说你们已经把smbus-cffi里的东西,换成自己的PWR.A53.B I2C Driver,所以源码里才能直接用下面的方式来操作?
---------------------------------------------
  1. from smbus import SMBus
  2. XRservo = SMBus(1)
  3. XRservo.XiaoRGEEK_SetServo(0x01,90)
复制代码

-----------------------------------------------------------


你们提供的路径里,我看了一下,有:(在小R镜像/usr/local/lib/python2.7/dist-packages/ )
smbus_cffi-0.5.1-py2.7-linux-armv7l.egg
smbus-cffi

这两个目录是和smbus_cffi有关的,其中
\smbus\dist-packages\smbus_cffi-0.5.1-py2.7-linux-armv7l.egg\smbus
这里面的smbus.pyc有提到servo的相关function,但路径似乎是写死的:
/usr/local/lib/python2.7/dist-packages/smbus_cffi-0.5.1-py2.7-linux-armv7l.egg/smbus/smbus.pyt

表示我若要移植,smbus_cffi的版本及路径都要完全一样才有机会…

我查了新刷的RASPBIAN,smbus被放在 /home/pi/.local/lib/python2.7/site-packages/smbus
(这个版本没有你们上面提到的/usr/local/lib/python2.7/dist-packages/)
------------------------------------------------------
pi@raspberrypi:/ $ sudo find / -type d -name 'smbus'
find: ??run/user/1000/gvfs?? Permission denied
find: ??home/pi/.gvfs?? Permission denied
/home/pi/.local/lib/python2.7/site-packages/smbus
-------------------------------------------------------------------------

cffi相关的:
--------------------------------------------------------
pi@raspberrypi:~/.local/lib/python2.7/site-packages/cffi $ ls
api.py              commontypes.pyc  __init__.pyc       setuptools_ext.pyc
api.pyc             cparser.py       lock.py            vengine_cpy.py
backend_ctypes.py   cparser.pyc      lock.pyc           vengine_cpy.pyc
backend_ctypes.pyc  _embedding.h     model.py           vengine_gen.py
_cffi_errors.h      error.py         model.pyc          vengine_gen.pyc
_cffi_include.h     error.pyc        parse_c_type.h     verifier.py
cffi_opcode.py      ffiplatform.py   recompiler.py      verifier.pyc
cffi_opcode.pyc     ffiplatform.pyc  recompiler.pyc
commontypes.py      __init__.py      setuptools_ext.py
-----------------------------------------------------------
pi@raspberrypi:/usr/lib/pypy/lib_pypy/cffi $ ls
api.py             _embedding.h    parse_c_type.h     vengine_cpy.py
backend_ctypes.py  ffiplatform.py  __pycache__        vengine_gen.py
_cffi_include.h    gc_weakref.py   _pycparser         verifier.py
cffi_opcode.py     __init__.py     recompiler.py
commontypes.py     lock.py         setuptools_ext.py
-------------------------------------------------------------

看起来不同版本的OS,路径名称都会有些差异,我刷的新版本也不存在smbus_cffi的目录
Python的I2C模组控制方式应该已是公用的library,即使想避免同业抄袭,应该也有比较好的方式来封装才是…

这个移植方式您能不能再详细说说…,或是考虑一下有没有其它比较方便的做法?
6#
 楼主| 发表于 2018-4-7 10:53:28 | 只看该作者
我又试了一阵子,在Python 2.7下面是可以使用了

但在Python 3.5没办法用,你们改的smbus是用2.x版本,同样的方式复制到Python3.5的目录下会出错

我买了你们的PWR.A53.B板子,结果里面的通讯方式是闭源的,只能靠直接复制你们提供的档案覆盖module原始档,还只有旧Python版本才能用,这样不太对吧...

你们自己定义树莓流派与PWR的I2C通讯格式没有问题,但应该要提供这个原始控制格式,想隐藏实作就要提供安装方式,直接改smbus源码来做封装的做法实在是不太好,一来不便修改,再来OS或Python的版本一有变化就没办法用了,这样PWR板子就算废了

如果这板子是你们自己做的,就提供一下标准的通讯方式,若是找外包做的,就去问厂商提供吧

买这个小车的人,应该不会只是想玩现成的遥控车…,可以练习各种周边设备操作才是主要目的,直接用I2C通讯控制才是我们希望的,希望你们能协助一下
7#
 楼主| 发表于 2018-4-14 17:15:10 | 只看该作者
过了这麽久,还是没有解决方法?
至少让这个servo控制可以跑在Python 3.X

如果这板子不是你们自己做的,至少要承认你们没办法改、或是提供控制的I2C protocol,这样也免得大家浪费时间

遇到问题放着不理,问题不会自己消失,还是觉得我们已经交了钱不理没关系?


8#
发表于 2019-7-30 17:18:59 | 只看该作者
期待早日开源 XRServo.so. 舵机目前只能用那3个函数,最小步进也就是1度不可调。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

猜您想找.......上一条 /10 下一条

QQ|QQ技术咨询Ⅰ|QQ技术咨询Ⅱ|QQ技术咨询Ⅲ|QQ技术咨询Ⅳ|诚聘英才|Archiver|手机版|小R科技-WIFI亚博app 官网网·亚博app 官网创意工作室 ( 粤ICP备12019445 )

GMT+8, 2019-10-29 02:22 , Processed in 1.140188 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表