首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >RoboMaster SDK 解读.3

RoboMaster SDK 解读.3

作者头像
云深无际
发布2021-03-12 11:43:22
发布2021-03-12 11:43:22
8960
举报
文章被收录于专栏:云深之无迹云深之无迹
代码语言:javascript
复制
import time
from robomaster import robot
from robomaster import led
if __name__ == '__main__':
    ep_robot = robot.Robot()
    ep_robot.initialize(conn_type="sta")

    ep_led = ep_robot.led

    # 设置灯效为常亮,亮度递增
    bright = 1
    for i in range(0, 8):
        ep_led.set_led(comp=led.COMP_ALL, r=bright << i, g=bright << i, b=bright << i, effect=led.EFFECT_ON)
        time.sleep(1)
        print("brightness: {0}".format(bright << i))

    ep_robot.close()

我们直接拿一段代码来看,和以往不一样的是引入了LED的包,看来作为装饰的灯也是一个独立的系统,有很多的方法去控制。

记得创建一个新的led对象,下面是是要设置一个递减变化用的标志变量~

代码语言:javascript
复制
 bright = 1
    for i in range(0, 8):
        ep_led.set_led(comp=led.COMP_ALL, r=bright << i, g=bright << i, b=bright << i, effect=led.EFFECT_ON)
        time.sleep(1)
        print("brightness: {0}".format(bright << i))

这段是对一个RGB的灯的控制,这段代码可以封装好复用

代码语言:javascript
复制
r=bright << i,
 g=bright << i, 
 b=bright << i

for搭配<<运算来实现显示效果,记录下来

昨天的话其实没有说完,我们今天继续

延时的作用就是保证当前任务执行的完整性,这里的设计是设计了一个阻塞性质的代码,在执行的时候会停在这里,直到完成任务或者被强制回收。对地位一样的模块,任务相同是互斥的。不同模块之间是互相独立的。总之所有的设计就是保证任务的完整运行

没忍住还是搜索了一下这个单词的意思

以及ACK也去找了一下相关的定义

接着说了TT无人家里面的一个实时控制

就是不提前写好序列让机器去执行,而是实时的发出控制的命令去操作机器

这个也给出了一个代码,我按照逻辑和作用分类了

可以看到所谓的实时模式就是用了rc的方法

多机的控制流程是这样,我想对于一个大型的无人机控制的流程也是这样

  1. 首先将所有的待控制的飞行器连接在同一个中继器上面(路由器),而后进行飞行前的初始化。
  2. 接着就是对连接的所有的飞行器进行排队,编号
  3. 接着是两种模式,我没有看懂,也不知道该怎么办来实现
  4. 接着就是执行飞行任务
代码语言:javascript
复制
https://pypi.org/project/netifaces/

这是什么?

一段时间,没有简单的方法从Python获取计算机网络接口的地址,这让我很恼火。这种困难有充分的理由,即几乎不可能以便携式的方式做到这一点。然而,在我看来,应该有一个包,你可以easy_install将照顾出这样做的细节,你使用的计算机上,然后你可以继续编写Python代码,而不用关心自己与系统依赖的低级网络 API的细微的坚韧。

此包尝试解决此问题。

这就是说。用Py获得一个计算机的IP地址

代码语言:javascript
复制

def GetNetworkIP():
    #获取本地网卡IP地址
    import netifaces
    #routingGateway = netifaces.gateways()['default'][netifaces.AF_INET][0]   #网关
    routingNicName = netifaces.gateways()['default'][netifaces.AF_INET][1]   #网络适配器信息
 
    for interface in netifaces.interfaces():
        if interface == routingNicName:
            #print (netifaces.ifaddresses(interface))
            try:
                routingIPAddr = netifaces.ifaddresses(interface)[netifaces.AF_INET][0]['addr']   #获取IP
            except KeyError:
                pass
    #print ("Routing IP Address:%s"% routingIPAddr)
    return routingIPAddr
if __name__ == "__main__":
    try:
        print ("Routing IP Address:",GetNetworkIP())
    except:
        print ("Unable to get the address, there may not be installed netifaces module! command: pip install netifaces")

以上代码给出了一个demo,如果有使用的,可以直接拿来去使用。

对于多机的编号,使用列表的方式

  1. 是想要编号的机器id
  2. 一个是实体机器的号码,形成了映射的关系

组的方法,可以复用无人机

先将机器编组,然后向组发送命令来控制飞行器

特别的给出了两个方法,在一个组内添加机器或移除机器

代码语言:javascript
复制
for drone_id in drone_group.robots_id_list:
    drone_obj = drone_group.get_robot(drone_id)
    drone_obj.flight.takeoff().wait_for_completed()

给出了一个依次起飞的代码,drone_group 为获取到的“组对象”

用循环依次的放飞飞行器~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 这是什么?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档