用于简单实时控制机器人玩具的库。
rstoys的Python项目详细描述
玩具
跨平台轻量级python库,帮助创建交互式实时远程控制玩具(通常基于Raspberry Pi)。库提供了一组独立的可重用模块,如下所述。在
源代码位于https://github.com/rstgh/rstoys
请使用pip安装此程序包:
pip install rstoys pip install flask # if you plan to use rstoys.touchy pip install arcade # if you plan to use rstoys.maps
在rstoys.realtime公司在
实时模块提供一些与实时主循环处理功能相关的功能。
所有时间或间隔值都用seconds
表示。在
realtime.loop(callback, update_interval=0.020)
此函数将进入一个无限循环,在指定的更新间隔使用两个参数(elapsed_time, delta_time)
调用您的callback
函数。在
elapsed_time
-是以秒为单位的绝对运行时间,以0开头delta_time
-是自上次执行回调函数以来的增量时间(以秒为单位),可用于缩放机器人操作,使其更独立于cpu负载。在
它相当于:
^{pr2}$使用实时循环()的优点是它动态地调整睡眠时间,以补偿在回调中花费的时间,试图提供尽可能稳定的callback
调用间隔。在
到目前为止,退出这个循环的唯一方法是按CTRL+C
。在
用法示例:
fromrstoysimportrealtimedefupdate(elapsed_time,delta_time):print("elapsed=%08.3fs | dt=%06.3fms"%(elapsed_time,delta_time*1000))# initialize my hardware here# enter the loop that calls update function every 100msrealtime.loop(update,0.1)
realtime.Interval(interval = 1.0)
简化给定间隔的周期性执行。在
用法:
fromrstoysimportrealtimeevery1s=realtime.Interval(1.0)every3s=realtime.Interval(3.0)defupdate(elapsed_time,delta_time):print("Every 100ms")ifevery1s.should(delta_time):print("Once per second")ifevery3s.should(delta_time):print("Once every 3 seconds")realtime.loop(update,0.1)
realtime.Mapper(value)
提供fluent接口,通过以下方法映射给定的输入值,所有方法对负值都是对称的。在
.copy()
\
.value()
\
.add(o = 0.0)
value=value+o
.mul(s = 1.0)
value=value*s
.trim(min = -1.0, max = -1.0)
将值修剪到给定的最小-最大范围
.exp(e = math.e)
value=e^值
.pow(p = 1.0)
value=值^p
.gap(g = 0.0)
如果value<;=-g或value>;=g否则返回值0.0
.gaplin(g = 0.0, m = 1.0)
#类似于gap,但在g上从0到m线性插值
在玩具。敏感在
这个模块提供了一个移动友好的web界面,带有基本的touch stick控制器,可以很容易地在python代码中读取(x,y)值来控制机器人。在
touchy.start_server(port=80)
在指定的端口上启动简单的flask Web服务器实例,该端口在一个单独的线程中运行,可以访问该Web服务器:
本地http://127.0.0.1:<port>/
或远程使用RPi的IP地址,而不是127.0.0.1
touchy.stop_server()
停止touchy webserver并终止其线程。在
(x, y) = touchy.controller.getStick()
此函数返回(x,y)元组,表示触控杆控制器的位置。
值在[-1...0...1]
范围内。在
示例代码:
fromrstoysimporttouchyfromrstoysimportrealtimedefupdate(elapsed_time,delta_time):(x,y)=touchy.controller.getStick()print("elapsed=%08.3fs | dt=%06.3fms | X=%6.3f | Y=%6.3f"%(elapsed_time,delta_time*1000,x,y))touchy.start_server(port=5000)realtime.loop(update)touchy.stop_server()
。。。然后在您的移动浏览器中打开http://<YOUR-IP-ADDRESS>:5000/
,并移动屏幕上的棒来查看更改。在
在玩具.geo在
此模块提供简单的地理位置相关功能,以帮助建立基于方位调整的位置感知导航。它正确地计算了两个地理位置之间的绝对方位,提供了正确的average_bearing()
方法和简单的WebMercatorProjection
实现。在
请查看example-geo.py文件以获取更多用法示例。在
geo.LatLon(lat, lon)
经纬度地理定位点
munich=geo.LatLon(48.133333,11.566667)# accepts also lat lon as string comma separatedmunich=geo.LatLon('48.133333,11.566667')
在玩具地图在
使用arcade框架提供基本的开放地图窗口渲染,以提供地理数据的可视化。在
请查看example-maps-sailing.py文件以获取一些用法示例。在
开发
想做贡献吗?给我发个电子邮件:rstechnology@gmail.com
许可证
麻省理工学院
使用风险自负,玩得开心。在
- 项目
标签: