用于简单实时控制机器人玩具的库。

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

许可证

麻省理工学院

使用风险自负,玩得开心。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
分别使用椭圆曲线密码对文本消息进行java加密和解密   java如何将JTable滚动到特定值?   java JSP登录注销简单web应用程序,使用bean在数据库中存在数据时返回false   java无法编译,未设置类路径,包不存在?   java为什么这一变量会受到影响?   集合为什么Java在Map中没有putIfAbsent(key,supplier)方法?   安卓在Java中计算仿真时间   java初始化方法在主类中的指定方法之前运行   java如何在hadoop的reduce中将genericWritable恢复为用户定义的可写?   如何使用java替换pdf中的文本   参数不适用于ASP服务器的java HttpPost   创建对象时的java NullPointerException   Java JPanel中的swing图形有问题,但它在一个框架中工作   java Android Studio在硬件设备上运行时出错   google api类路径的java空指针异常   java如何将InputStream转换为DataHandler?   java在多个Jetty服务器之间共享连接池