RoboMaster SDK 解读.4
我们不可能把所有的API都看完,就按照我未来要写一套机器人的系统来看
首先可以看到这个的class是最大的robomaste的类,后面是**kw
到目前为止我们遇到看第一个知识点,为什么要在这里设计一个这样玩的参数,一定是有原因的。┓( ´∀` )┏
https://www.cnblogs.com/hoaprox/p/9481877.html
在python中定义函数,可以使用一般参数、默认参数、非关键字参数和关键字参数。
*args和**kw分别属于非关键字参数和关键字参数,后两者也都是可变参数。
非关键字参数的特征是一个星号*加上参数名,比如*number,定义后,number可以接收任意数量的参数,并将它们储存在一个tuple(元组)中。
关键字参数的特征是两个星号**加上参数名,比如**kw, 定义后,kw将接收到的任意数量参数存到一个dict(字典)中。
关键字参数是在传递构成中不必按照顺序传递(因为dict内的key-value是没有顺序的),但必须要提供”传递参数名=传递参数值”形式的参数。
这段代码便是显示
*,你传输的什么样的数据,打印的就是什么内容
python中的一般参数、默认参数、非关键字参数和关键字参数可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:一般参数、默认参数、可变参数和关键字参数,先后顺序不能颠倒。即:
def func(a, b, c=0, *args, **kw):
pass
我们用到函数'calculate_sum’,但'calculate_sum’需要多个位置参数作为元组传给’args’。所以在函数'ignore_first_calculate_sum’需要拆元组'iargs’,然后将元素作为位置参数传给'calculate_sum’.注意,用’*’拆元组。
所以,我们这样用'required_sum=calculate_sum(*iargs)’.'required_sum=calculate_sum(iargs)’不能这么调用,因为传给’calculate_sum’之前我们需要unpack数值。不使用’*’将不会unpack数值,也就不能执行想要的动作。
这个是我们最后的一个例子
我们再说一下这个API的作用,在所有的任务里面都需要执行,所以这个功能是一定要被设计的,注意到是,返回值是一个bool
装甲
首先是一个转换用的函数,将具体的部位转换成int量
https://docs.python.org/zh-cn/3/library/enum.html
Python内的枚举很少见,我查一下
枚举是与多个唯一常量值绑定的一组符号名(即成员)。枚举中的成员可以进行身份比较,并且枚举自身也可迭代。
枚举是由 class
句法创建的,这种方式易读、易写。
还有互逆的操作
这个是设置装甲的灵敏度,这个不懂是如何实现的。是传感器吗?
接着这个API是打击函数,是设计成回调函数了。也好理解,因为你不知道什么时候会接收打击事件~
https://zhuanlan.zhihu.com/p/110031082
在Python里面因为没指针,所以一个函数可以作为另一个函数的参数
就是一个回调函数了~
带有额外状态的回调函数,异步回调
这里带额外信息的回调函数是print_result。
注意:这里print_result只能接收一个result的参数,不能传入其他信息。当想让回调函数访问其他变量或者特定环境的变量值的时候会遇到问题。
我们可以绑定一个新函数来访问
可以看到这些名词,其实这个是ROS系统里面的名词
按照设计,MCU是STM32,性能不足以跑ROS,所以说只能是借鉴
已经看到这个底盘的API了,想写一点麦轮的东西
、为什么不在汽车上面装麦轮
麦轮的全向移动是在每一个麦轮的滚子单独接触地面时分解速度实现的,也就是说如果在崎岖不平的地面就会造成无法分解速度,从而无法横向移动,所以麦轮自身路面要求比较高。所以,就没有普及开来
这个是设置麦轮的速度的代码,我们可以看到控制起来还是很麻烦的
这个是控制一个车到指定的位置
以及是6路的PWM驱动
以及底盘的状态的订阅,我不清楚为什么是飞行器的一些指标
这个理解起来不难,小车有4个电调
这个底盘也有一个陀螺仪的信息~陀螺仪的作用是稳定
这段代码好有趣,未来SDK一定要集成这段
显示车辆当前的速度分量