小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 7805|回复: 8

關於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的对应的文件夹
这一步就是最重要的移植接口文件的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 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,即使想避免同業抄襲,應該也有比較好的方式來封裝才是…

這個移植方式您能不能再詳細說說…,或是考慮一下有沒有其它比較方便的做法?
回复 支持 反对

使用道具 举报

 楼主| 发表于 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通訊控制才是我們希望的,希望你們能協助一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-14 17:15:10 | 显示全部楼层
過了這麼久,還是沒有解決方法?
至少讓這個servo控制可以跑在Python 3.X

如果這板子不是你們自己做的,至少要承認你們沒辦法改、或是提供控制的I2C protocol,這樣也免得大家浪費時間

遇到問題放著不理,問題不會自己消失,還是覺得我們已經交了錢不理沒關係?


回复 支持 反对

使用道具 举报

发表于 2019-7-30 17:18:59 | 显示全部楼层
期待早日开源 XRServo.so. 舵机目前只能用那3个函数,最小步进也就是1度不可调。
回复 支持 反对

使用道具 举报

发表于 2020-4-16 22:21:15 | 显示全部楼层
舵机使用了I2C接口后,PWR板子上的I2C接口是是不是就不能用了。我在引脚上加了个3轴加速度模块,MPU6050,用 i2cdetect -y 1 来查看设备地址,全是——横线,没有内存地址。运行mpu6050相关的py程序也不行。换了官方镜像的SD卡,就可以读出地址,且有两个设备的地址,其中一个是MPU6050.且可以运行py程序。
如果要在车上另外使用I2c通信的模块,该怎么办呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-4-20 12:58 , Processed in 1.092669 second(s), 18 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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