RoboMaster

标题: 【RM2020 圆桌】第二期 步兵代码的那些问题 [打印本页]

作者: RoboMaster赛务    时间: 2020-1-7 17:03
标题: 【RM2020 圆桌】第二期 步兵代码的那些问题

[attach]25852[/attach]

面对官方已开源的步兵代码,你是有如神助,还是依旧满头问号呢?
现在给你机会,来向我们的攻城狮提出你所有的困惑!
60分钟实时问答圆桌,等你来一次问个够!


【圆桌时间】:2020年1月9日(周四) 19:30-20:30
【圆桌主题】:步兵代码的那些问题
【圆桌嘉宾】:论坛ID @陈小豪右边童鞋
                        DJI嵌入式工程师
【主持人】:@RoboMaster赛务
【圆桌流程】:19:30-20:30 实时问答环节 (嘉宾与论坛网友)
                        是的,你没看错,本期全由你们来做主提问,所以快来问问题吧!可在此帖下面留言问题,攻城狮会优先回答哦
【相关内容】RoboMaster 2020官方机器人文件说明


温馨提示:
在直播期间,大家可以直接移步至论坛活动版块,https://bbs.robomaster.com/forum-technology-1.html,直播墙会自动实时更新文字内容。

我们将挑选出三位优秀提问者送出电机福袋各一份~

本期获得福袋的三个ID是:
Evan-GH
superdoggy
北极星耀
请联系微信赛务号邮寄信息(附上自己的ID截图哦)


                               
登录/注册后可看帖子
华丽分割线

                               
登录/注册后可看帖子


主持人:分享一个重大的好消息:RoboMaster开发板C型嵌入式软件教程文档以及例程今天在Github上刚刚开源,大家速速前往查看:https://github.com/RoboMaster/Development-Board-C-Examples。 请大家火速扩散!



1.  Q:关于CAN控制电机的问题我比较好奇,也有些疑惑……希望能够得到解答。
例程在CAN控制电机方面,似乎是使用了中断接收CAN回报的各种信息,如果我没有记错的话是1kHz发送的报文。然后在RTOS中开了一个线程来尽可能快的解析收到的信息并计算PID,向电机发出PID计算出的目标电流值,并且这个线程执行速度应该远快于1kHz。
所以如果说电机回报的速度是1kHz,那么理论上PID的执行频率如果大于1kHz,是否可以说PID计算出来的信息就是重复的呢?如果是重复的,那以1kHz的速度发送控制数据包,是否可以达到同样的控制效果?
另外在我自己实验的时候发现,单纯发送一帧数据哪怕电流给到最大值,电机也不会转动。只有当以一定频率(印象中是100Hz)发送的时候,电机才会转动。但是无论是以100Hz的频率发送数据包还是以1kHz的频率发送数据包,电机的转速都没有显著的变化。
其中电调对CAN控制的处理机制让我很不解,查阅大量资料未果,希望得到一些解答。例如,是否一帧控制帧在电调内有着一定时间的生命周期,每包在下一包到来之前都会维持当前电流环目标值一定的时间?如果能略加指点,不胜感激!
      A:控制频率应该与数据反馈频率相一致,对于不一致场景 ,通常是使用串级PID ,外内环频率不一致,但对应PID频率应该是需要一致的,对于控制不了电机问题,应该检测CAN发送函数,或者使用逻辑分析仪采集发送的can包,以确认是否消息发送,或者使用一些官方demo程序,发送全固定值进行检测。
     补充一下: 电调内部是做了CAN消息处理,在一段时间未收到CAN消息后,停止转动

2.  Q:我们的步兵云台有pitch轴电机、摩擦轮电机,拨弹盘电机四个电机,全都用的can控制,但是每次运行时要么只有pitch动要么只有摩擦轮和拨弹盘动,代码里谁的输出在前面谁动,每个电机都有反馈,都有输出,id也没有问题,不动的电机的输出一直显示最大(pitch电机单独一个can发送,两个摩擦轮和拨弹电机一个can发送)。有人说是can发送队列太多,导致发送错误,我们云台一共两个电机的can发送、两个给底盘数据的can发送,四个应该不多吧,底盘的can队列比云台还要多也没有问题。如果确实是队列太多,应该怎么解决,每个can发送最多几个队列。我们尝试过在两个电机can发送之间加了1ms的延时,几个电机都可以动了,但是延时不应该在程序里留着,不是长久之策。几个电机、电调、电路板都是好的,全都单独测试过,也更换过,一直出现同样的错误。
     A:CAN带宽应该是够的,应该是程序或者硬件问题, 试着使用一些demo例程进行检查

3.  Q:官方开源的是github的还是robomaster.com官网2016开源的代码?官方代码是直接适用开发板A型吗?开发板A型是427芯片,若移植到407会需要哪些修改?谢谢!
      A:官方开源过ICRA以及2016 2019,2020外赠步兵程序,本次以外赠步兵代码讲解, ICRA程序不在本次圆桌谈论, 移植到407需要修改对应的硬件配置,接口配置等。

4.   Q:步兵电控组在和视觉组对接时,视觉组会给我们传回pitch轴和yaw轴的数据,视觉组传来的数值不是固定的,一直在一定的范围内变化(可能是云台不稳造成的),所以使云台一直抖动(pitch轴一直上下震,因为pitch一直追视觉那个变化的值)这个问题只靠调内外环pid可以解决吗,还是应该先处理数值,像取个平均值,还有那个卡尔曼滤波加上之后,好像没有什么变化,甚至有的时候更加的震。如果需要处理数据有什么好办法。
5.   Q:在步兵刚刚检测到装甲板的时候,视觉传回的pitch轴的数有一个越变,突然数值变得很大,云台就会使劲震一下,在不到1秒之后数值恢复到正常范围,云台也恢复正常。我们应该怎样处理这个值,有什么好办法。
      4&5A:不推荐在嵌入式端进行处理, 对于视觉的数据,应该由视觉的同学来保证数据稳定性, 基本的要求都应该是数据应该是收敛的, 如果需要嵌入式端进行处理,我觉得这个可以使用一下中值滤波,去除反复跳变的数据

6.  Q: 目前参赛队伍的机器人主控采用的多为STM32,STM32的CAN收发器Fifo的深度仅有3,这就导致了如果CAN线上设备过多则容易试得在某些时刻丢失掉部分数据,或者是CAN线上有一个发送速率很快(比如远超1KHz)的设备持续发送信息也会导致有时无法解析到其他设备(电调等设备都是1KHz)的报文信息,请问官方在这一方面有什么方法解决吗?
      A: 如果是stm32未能及时处理,可以试试将CAN的中断优先级提高,或者添加临界区保证不被其他任务打断

7.  Q:B版的官方程序 枪口热量还有底盘功率的数据来源于哪里?裁判系统里面并没有赋值也有没有调用呀(小哥哥 回复我一下)
     A:来源于裁判系统的电源模块上的用户串口,需要用3pin串口线连接到C板的3pin串口,故而需要需要一套裁判系统主控和裁判系统电源模块

8.  Q:想知道CAN总线控制电机和PWM控制电机的区别,就除了接线数量的差别外,还有什么呢?对这个不是特别了解
     A:使用CAN可以获取到电机的转速 角度等消息,但需要自己实现控制,如果PWM控制电机,内置控制器,可以认为是当一个舵机使用

9. Q: c620的dome的
MX_FREERTOS_Init();
osKernelStart();
这两函数缺少一个都不行,debug测试第二个函数是发送数据的能详细说一下这两个函数吗
      A: 这两句是cubemx软件生成的, 第一句是创建对应的任务,第二句是开启操作系统的运行, 如果少第一句,操作系统只会运行idle任务, 少第二句,操作系统都没有启动

10.  Q:官方开源的步兵代码中PID计算采用的是位置式PID,官方是否有对比过在不同控制情况下(比如功率控制)采用增量式PID和位置式PID达到稳态的控制过程中哪个控制效果更好吗?
      A:增量型和位置型PID并没有哪个更好的说法, 对于不同的应用场景,应该选择不同的PID类型

11. Q:请问为什么做键盘鼠标控制时,即使是鼠标左右直接控制底盘的旋转模式下,在调试的时候步兵底盘 转的一卡一卡的(遥控器控制的时候正常),还有就是用键盘控制的时候,在不给信号后,电机就会突然制动,感觉对电机伤害很大,在做键盘控制的时候,在程序逻辑上有什么需要注意的地方吗?谢谢
       A:鼠标一卡一卡,没有遇见过,程序中遥控器的赋值控制地方和鼠标赋值控制的地方是一样的吗会不会两个地方处理的时间不同,或者灵敏度的问题, 在键盘控制控制上 对于底盘应该设置控制目标值应该是逐步增大,使用斜波或者一阶滤波方式给定会比较好

12. Q:请问官方代码有在控制端做视觉自瞄角度的滤波以及预测处理吗
       A:没有,外赠步兵的代码没有对视觉的处理

13. Q:官方开源的步兵代码中,对于Dbus的空闲中断接收采用了双缓冲区处理,这样做有什么好处吗?
      A:正常情况下,区别不大,但是在如果进DBUS中断,又被另一个中断打断,另一个中断处理后,返回DBUS中断,这时候DBUS又来一帧数据,可能导致数据处理错误防止程序如果在处理中

14.  Q:做视觉C++比python好吗?
      A:因人而异

15. Q:请问云台控制线程的运行频率在多少会比较适合,还是要需要根据装甲检测的频率来动态调整吗?
      A:设置1000Hz或者500Hz, 视觉的装甲检测频率? ,可以对视觉进行控制目标的优化

16. Q:请问一下,官方开源的步兵代码中的遥控器是运用PB6(uart1)接收数据,进行处理得到ch的值,那么用DMA中断比用串口直接中断有什么好处
     A:节约CPU时间,同时减少进入中断次数

17. Q:使用的是A板,上面18个GPIO口可以自己随意设置,想接受其他传感器返回的数据(支持AD或I2C),想问下大家是写的GPIO模拟口还是用的自己的板子?
     A:18GPIO有ADC的IO,也有I2C spi接口,都可以,根据走线或者精度要求决定是不是使用stm32上的ADC

18. Q:RoboMaster开发板C型的主芯片具体是什么型号?
     A: stm32f407ig

19. Q:官方开源的步兵代码中OLED采用的是STM32的硬件IIC,然后网络上经常能看到对于STM32硬件IIC不好用的吐槽,在实际使用中也的确遇到过其硬件IIC总线宕机的情况,请问官方在测试过程中有没有遇到这个问题呢?又是如何解决的
       A:I2C硬件是因为如果需要使用到DMA,如果使用模拟I2C 每次通信需要传输1025个字节,占CPU资源比较多,遇见过I2C死机,所以添加了detect任务,如果发现死机,重启I2C,目前自测觉得没有问题

20. Q: robomaster.com官网2016开源的代码会否有些过时?还是同样适用现在的开发板A、B板?
      A:已经开源了2019 2020年外赠步兵,可以在帖子的顶楼的下载链接, 同时C板在GitHub开源一套教程文档和教程例程

21. Q:代码中6020电机的数据返回 返回的是什么数据
      A:详见6020说明书

22. Q:官方开源的步兵代码中,support文件夹下有一个名为mem_manager4.c的文件,而CubeMX软件生成工程时在FreeRTOS的中间层文件中也有一个关于内存分配的heap4.c文件,这里support文件夹下的文件作用是什么呢?
      A:mem_manager4.c是使用单字节解包的裁判系统解包,的FIFO相关文件, heap4.c是freeRTOS内存管理相关文件

23. Q:可以简单讲解一下官方步兵代码对于小陀螺模式下的底盘运动控制方式吗,能否做到在小陀螺模式下正常的进行方向移动
     A:使用到一个旋转角度操作,将底盘运动角度旋转到云台对应角度,可以看chassis_task.c内的follow_gimbal_yaw的相关代码

24.Q: void CAN1_RX0_IRQHandler(void)
{
HAL_CAN_IRQHandler(&CAN1_Handler);
}
void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan)
小哥哥 从标准库转换到hal库对can中的这几个函数理解有点迷糊,能具体说一下吗
      A:这个是hal生成的回调函数,hal为了将中断的一些消除标志位等等操作进行处理, 用户就只需要关心对应数据回调接口

25. Q:请问官方的PID调参大概是怎样做的,有什么比较简单高效的方法或者技巧分享吗?
     A: PID调试需要结合波形调试,多使用一些上位机显示波形工具,也可能看C型板教程中的 16章节,有对PID的参数进行讲解, 同时学习好理论知识也很有用

26. Q:官方开源的步兵中使用的IMU芯片和之前内测的RM陀螺仪配置很像,请问是同款吗?
     A:是

27. Q:用官方代码后,某个电机掉线其他电机能否正常运行,并且以亮灯形式报错?
      A:2020年机器人代码是以OLED屏幕 蜂鸣器 和USB串口三种方式, 2019是通过LED灯显示

28. Q:云台控制时,斜坡信号输入有什么作用啊
     A:一般是底盘斜坡输入,云台输入是一般是摇杆值和鼠标值 叠加到角度,相当与给了斜坡慢慢增加, 不过对视觉信号可能是阶跃信号,可根据情况进行处理吧

29. Q:开源代码中的freeRTOS文件是关于什么的?我看着cube里面也有这个文件,作用一样吗
     A:freeRTOS是cubemx生成的,2019年代码是标准库,需要移植freeRTOS官网的代码,freeRTOS文件夹便是放官网freeRTOS代码的

30. Q:代码以LED报错以后,其他没有掉线电机还能不能遥控呀
      A:没有明白?应该是机器人在启动的时候,如果云台电机出现问题, 云台不能正常控制,同时底盘会认为云台没有启动,为了安全起见,将底盘也进入保护状态, 机器人正常使用都应该在所有电机正常运动中,如果需要特殊情况,需要修改代码

31. Q:底盘速度值反馈震动厉害 如果要是给速度滤波的话用什么滤波办法比较好,自己的车底盘跑起来感觉不是很顺滑,陀螺的室友云台也有频率比较高的颤抖 请问这是底盘PID输出震荡导致的吗
      A:中值或者低通, 或者使用MATLAB设置数字滤波, 云台最好在底盘的几何中心,底盘震动, 云台当然也会受到干扰

32. Q:陀螺仪初始化部分,领飘处理能不能提前测好偏移量,然后每次上电都固定的减去那个偏移量。温度闭环对零飘的影响大吗
     A:零漂有保存进入flash中,如果只使用flash保存零漂值,可以不使用开机校准的,使用开机能保证开机后的稳定 温度闭环有必要

33. Q:请问这个c板咋烧录啊。。。。。那个usb没有识别成串口欸
      A:可以使用SWD方式或者 DFU方式,其中SWD用到stlink 或者jlink, DFU需要更改boot配置

34. Q:为什么rtos选择了freertos?和其他的比freertos优势有哪些?
     A:开源,简单,cubemx学习起来方便,也不必拘泥操作系统类型,对其他操作系统有兴趣,也可以学习 以及 如果用xxx操作,这个问题就便是为什么是ucos?

35. Q:在使用FreeRTOS时,任务数比较多的情况下就需要考虑优先级和任务间隔时间,在实际使用中就有发生过某个任务一直被抢占的情况,请问官方在分配任务时一般会采用什么原则呢
     A:重要的任务优先级高, rm机器人目前使用上的任务大都不是特别需要消耗cpu,对比较消耗CPU的任务,需要进行优化

36. Q: keil的编译器也支持c++,c和c++比,优势在哪里?
      A:c++也能用,C++是C的超集(如果没有记错) 如果是觉得C++的继承和多态等特性,是你想需要使用到的功能,可以使用

37. Q: C板的程序可以移植到A板上吗
     A:可以


作者: Mlekow    时间: 2020-1-7 23:53
本帖最后由 Mlekow 于 2020-1-7 23:55 编辑

关于CAN控制电机的问题我比较好奇,也有些疑惑……希望能够得到解答。

例程在CAN控制电机方面,似乎是使用了中断接收CAN回报的各种信息,如果我没有记错的话是1kHz发送的报文。然后在RTOS中开了一个线程来尽可能快的解析收到的信息并计算PID,向电机发出PID计算出的目标电流值,并且这个线程执行速度应该远快于1kHz。

所以如果说电机回报的速度是1kHz,那么理论上PID的执行频率如果大于1kHz,是否可以说PID计算出来的信息就是重复的呢?如果是重复的,那以1kHz的速度发送控制数据包,是否可以达到同样的控制效果?

另外在我自己实验的时候发现,单纯发送一帧数据哪怕电流给到最大值,电机也不会转动。只有当以一定频率(印象中是100Hz)发送的时候,电机才会转动。但是无论是以100Hz的频率发送数据包还是以1kHz的频率发送数据包,电机的转速都没有显著的变化。

其中电调对CAN控制的处理机制让我很不解,查阅大量资料未果,希望得到一些解答。例如,是否一帧控制帧在电调内有着一定时间的生命周期,每包在下一包到来之前都会维持当前电流环目标值一定的时间?如果能略加指点,不胜感激!



作者: 烟火清凉    时间: 2020-1-8 10:40
我们的步兵云台有pitch轴电机、摩擦轮电机,拨弹盘电机四个电机,全都用的can控制,但是每次运行时要么只有pitch动要么只有摩擦轮和拨弹盘动,代码里谁的输出在前面谁动,每个电机都有反馈,都有输出,id也没有问题,不动的电机的输出一直显示最大(pitch电机单独一个can发送,两个摩擦轮和拨弹电机一个can发送)。有人说是can发送队列太多,导致发送错误,我们云台一共两个电机的can发送、两个给底盘数据的can发送,四个应该不多吧,底盘的can队列比云台还要多也没有问题。如果确实是队列太多,应该怎么解决,每个can发送最多几个队列。我们尝试过在两个电机can发送之间加了1ms的延时,几个电机都可以动了,但是延时不应该在程序里留着,不是长久之策。几个电机、电调、电路板都是好的,全都单独测试过,也更换过,一直出现同样的错误。
作者: infosis    时间: 2020-1-9 00:11
本帖最后由 infosis 于 2020-1-9 00:13 编辑

官方开源的是github的还是robomaster.com官网2016开源的代码?
作者: infosis    时间: 2020-1-9 00:15
官方代码是直接适用开发板A型吗?开发板A型是427芯片,若移植到407会需要哪些修改?谢谢!
作者: 烟火清凉    时间: 2020-1-9 16:06
步兵电控组在和视觉组对接时,视觉组会给我们传回pitch轴和yaw轴的数据,视觉组传来的数值不是固定的,一直在一定的范围内变化(可能是云台不稳造成的),所以使云台一直抖动(pitch轴一直上下震,因为pitch一直追视觉那个变化的值)这个问题只靠调内外环pid可以解决吗,还是应该先处理数值,像取个平均值,还有那个卡尔曼滤波加上之后,好像没有什么变化,甚至有的时候更加的震。如果需要处理数据有什么好办法。
作者: 烟火清凉    时间: 2020-1-9 16:13
在步兵刚刚检测到装甲板的时候,视觉传回的pitch轴的数有一个越变,突然数值变得很大,云台就会使劲震一下,在不到1秒之后数值恢复到正常范围,云台也恢复正常。我们应该怎样处理这个值,有什么好办法。
作者: 花师小哲    时间: 2020-1-9 16:17
烟火清凉 发表于 2020-1-9 16:13
在步兵刚刚检测到装甲板的时候,视觉传回的pitch轴的数有一个越变,突然数值变得很大,云台就会使劲震一下 ...

emmm其实在我们这里,这是视觉组要解决的问题,视觉那边负责处理类似于越变这样的问题,给电控尽量提供高质量稳定的数据(我觉得不应该放在步兵代码模块里面提问?不过如果嘉宾能解答就更好了
作者: 烟火清凉    时间: 2020-1-9 16:22
花师小哲 发表于 2020-1-9 16:17
emmm其实在我们这里,这是视觉组要解决的问题,视觉那边负责处理类似于越变这样的问题,给电控尽量提供高 ...

如果视觉组解决不了,可不可以把第一个数过滤掉或者减少它的影响。
作者: 末世    时间: 2020-1-9 19:17
关于pwm控制电机的问题
作者: superdoggy    时间: 2020-1-9 19:29
B版的官方程序 枪口热量还有底盘功率的数据来源于哪里?(小哥哥 回复我一下)
作者: Evan-GH    时间: 2020-1-9 19:31
目前参赛队伍的机器人主控采用的多为STM32,STM32的CAN收发器Fifo的深度仅有3,这就导致了如果CAN线上设备过多则容易试得在某些时刻丢失掉部分数据,或者是CAN线上有一个发送速率很快(比如远超1KHz)的设备持续发送信息也会导致有时无法解析到其他设备(电调等设备都是1KHz)的报文信息,请问官方在这一方面有什么方法解决吗?
作者: superdoggy    时间: 2020-1-9 19:31

B版的官方程序 枪口热量还有底盘功率的数据来源于哪里?裁判系统里面并没有赋值 也有没有调用呀(小哥哥 回复我一下)
作者: RoboMaster赛务    时间: 2020-1-9 19:31
hello,大家晚上好!
作者: djiuser_fQ0rHPX    时间: 2020-1-9 19:32
想知道CAN总线控制电机和PWM控制电机的区别,就除了接线数量的差别外,还有什么呢?对这个不是特别了解
作者: wangshulei    时间: 2020-1-9 19:32
我想请教下,在由编码器的值推算车子运动的里程的时候,即函数“mecanum_position_measure”中,为什么用编码器的数值“total_ecd”进行计算,是这样的算法误差比较小吗?为社么不把每个时间段内运动的距离进行积分呢?
作者: 空城伤    时间: 2020-1-9 19:33
开播了吗?

作者: RoboMaster赛务    时间: 2020-1-9 19:33
本期圆桌主题:步兵代码的那些问题,主讲嘉宾:@陈小豪右边童鞋。我们的嘉宾会在活动时间内依次回答各位的问题,大家不要着急,先讲问题打出来~
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:33
Q:关于CAN控制电机的问题我比较好奇,也有些疑惑……希望能够得到解答。

例程在CAN控制电机方面,似乎是使用了中断接收CAN回报的各种信息,如果我没有记错的话是1kHz发送的报文。然后在RTOS中开了一个线程来尽可能快的解析收到的信息并计算PID,向电机发出PID计算出的目标电流值,并且这个线程执行速度应该远快于1kHz。

所以如果说电机回报的速度是1kHz,那么理论上PID的执行频率如果大于1kHz,是否可以说PID计算出来的信息就是重复的呢?如果是重复的,那以1kHz的速度发送控制数据包,是否可以达到同样的控制效果?

另外在我自己实验的时候发现,单纯发送一帧数据哪怕电流给到最大值,电机也不会转动。只有当以一定频率(印象中是100Hz)发送的时候,电机才会转动。但是无论是以100Hz的频率发送数据包还是以1kHz的频率发送数据包,电机的转速都没有显著的变化。

其中电调对CAN控制的处理机制让我很不解,查阅大量资料未果,希望得到一些解答。例如,是否一帧控制帧在电调内有着一定时间的生命周期,每包在下一包到来之前都会维持当前电流环目标值一定的时间?如果能略加指点,不胜感激!
A:控制频率应该与数据反馈频率相一致, 对于不一致场景 ,通常是使用串级PID ,外内环频率不一致,但对应PID频率应该是需要一致的,对于控制不了电机问题, 应该检测CAN发送函数,或者使用逻辑分析仪采集发送的can包,以确认是否消息发送,或者使用一些官方demo程序,发送全固定值进行检测。

作者: djiuser_oMkvf69    时间: 2020-1-9 19:33
c620的dome的
MX_FREERTOS_Init();
  osKernelStart();
这两函数缺少一个都不行,debug测试第二个函数是发送数据的能详细说一下这两个函数吗


作者: RoboMaster赛务    时间: 2020-1-9 19:33
另外分享一个重大的好消息:RoboMaster开发板C型嵌入式软件教程文档以及例程今天在Github上刚刚开源,大家速速前往查看:https://github.com/RoboMaster/Development-Board-C-Examples。 请大家火速扩散!
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:35
补充一下: 电调内部是做了CAN消息处理,在一段时间未收到CAN消息后,停止转动

作者: Evan-GH    时间: 2020-1-9 19:36
官方开源的步兵代码中PID计算采用的是位置式PID,官方是否有对比过在不同控制情况下(比如功率控制)采用增量式PID和位置式PID达到稳态的控制过程中哪个控制效果更好吗?
作者: qiumeng    时间: 2020-1-9 19:36
请问为什么做键盘鼠标控制时,即使是鼠标左右直接控制底盘的旋转模式下,在调试的时候 步兵底盘 转的一卡一卡的(遥控器控制的时候正常),还有就是用键盘控制的时候,在不给信号后,电机就会突然制动,感觉对电机伤害很大,在做键盘控制的时候,在程序逻辑上有什么需要注意的地方吗?谢谢
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:36
2. 我们的步兵云台有pitch轴电机、摩擦轮电机,拨弹盘电机四个电机,全都用的can控制,但是每次运行时要么只有pitch动要么只有摩擦轮和拨弹盘动,代码里谁的输出在前面谁动,每个电机都有反馈,都有输出,id也没有问题,不动的电机的输出一直显示最大(pitch电机单独一个can发送,两个摩擦轮和拨弹电机一个can发送)。有人说是can发送队列太多,导致发送错误,我们云台一共两个电机的can发送、两个给底盘数据的can发送,四个应该不多吧,底盘的can队列比云台还要多也没有问题。如果确实是队列太多,应该怎么解决,每个can发送最多几个队列。我们尝试过在两个电机can发送之间加了1ms的延时,几个电机都可以动了,但是延时不应该在程序里留着,不是长久之策。几个电机、电调、电路板都是好的,全都单独测试过,也更换过,一直出现同样的错误。
A: CAN带宽应该是够的,应该是程序或者硬件问题, 试着使用一些demo例程进行检查
作者: 彭彩彤    时间: 2020-1-9 19:36
请问有没有哪个强队开源出来视觉的python代码,为啥大家都觉得C++比python好呢
作者: Mlekow    时间: 2020-1-9 19:36
陈小豪右边童鞋 发表于 2020-1-9 19:35
补充一下: 电调内部是做了CAN消息处理,在一段时间未收到CAN消息后,停止转动
...

非常感谢!另外,可以方便告知一下这个一段时间大约是多久吗
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:38
3. 官方开源的是github的还是robomaster.com官网2016开源的代码?官方代码是直接适用开发板A型吗?开发板A型是427芯片,若移植到407会需要哪些修改?谢谢!

A:官方开源过ICRA以及2016 2019, 2020外赠步兵程序,本次以外赠步兵代码讲解, ICRA程序不在本次圆桌谈论, 移植到407需要修改对应的硬件配置,接口配置等。
作者: 北极星耀    时间: 2020-1-9 19:39
请问官方代码有在控制端做视觉自瞄角度的滤波以及预测处理吗

作者: Evan-GH    时间: 2020-1-9 19:39
官方开源的步兵代码中,对于Dbus的空闲中断接收采用了双缓冲区处理,这样做有什么好处吗?
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:40
4. 步兵电控组在和视觉组对接时,视觉组会给我们传回pitch轴和yaw轴的数据,视觉组传来的数值不是固定的,一直在一定的范围内变化(可能是云台不稳造成的),所以使云台一直抖动(pitch轴一直上下震,因为pitch一直追视觉那个变化的值)这个问题只靠调内外环pid可以解决吗,还是应该先处理数值,像取个平均值,还有那个卡尔曼滤波加上之后,好像没有什么变化,甚至有的时候更加的震。如果需要处理数据有什么好办法。

5. 在步兵刚刚检测到装甲板的时候,视觉传回的pitch轴的数有一个越变,突然数值变得很大,云台就会使劲震一下,在不到1秒之后数值恢复到正常范围,云台也恢复正常。我们应该怎样处理这个值,有什么好办法。

A:不推荐在嵌入式端进行处理, 对于视觉的数据,应该由视觉的同学来保证数据稳定性, 基本的要求都应该是数据应该是收敛的, 如果需要嵌入式端进行处理,我觉得这个可以使用一下中值滤波,去除反复跳变的数据
作者: 末世    时间: 2020-1-9 19:42
做视觉C++比python好吗?

作者: 陈小豪右边童鞋    时间: 2020-1-9 19:43
6.目前参赛队伍的机器人主控采用的多为STM32,STM32的CAN收发器Fifo的深度仅有3,这就导致了如果CAN线上设备过多则容易试得在某些时刻丢失掉部分数据,或者是CAN线上有一个发送速率很快(比如远超1KHz)的设备持续发送信息也会导致有时无法解析到其他设备(电调等设备都是1KHz)的报文信息,请问官方在这一方面有什么方法解决吗?
如果是stm32未能及时处理,可以试试将CAN的中断优先级提高,或者添加临界区保证不被其他任务打断,
作者: 北极星耀    时间: 2020-1-9 19:45
7.请问云台控制线程的运行频率在多少会比较适合,还是要需要根据装甲检测的频率来动态调整吗
作者: Evan-GH    时间: 2020-1-9 19:45
陀螺仪姿态解算的时候会融合加速度计,但是这个融合解算过程需要一定的时间,具体就会表现为云台PID控制之后,加速度计融合到姿态解算中使得这一位置的姿态角发生改变,PID控制器又开始进行输出,导致云台又开始缓慢进行调节之后稳定。且在加速度大的情况下云台容易出现抬头点头现象,请问这个如何解决呢?
作者: RoboMaster赛务    时间: 2020-1-9 19:45
【消息通知】RoboMaster开发板C型嵌入式软件教程文档以及例程今天在Github上刚刚开源,大家速速前往查看:https://github.com/RoboMaster/Development-Board-C-Examples。 请大家火速扩散哦。
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:45
7. B版的官方程序 枪口热量还有底盘功率的数据来源于哪里?裁判系统里面并没有赋值 也有没有调用呀(小哥哥 回复我一下)

A:来源于裁判系统的电源模块上的用户串口,需要用3pin串口线连接到C板的3pin串口,故而需要 需要一套裁判系统主控和裁判系统电源模块
作者: 空城伤    时间: 2020-1-9 19:45
请问一下,官方开源的步兵代码中的遥控器是运用PB6(uart1)接收数据,进行处理得到ch的值,那么用DMA中断比用串口直接中断有什么好处
作者: djiuser_oMkvf69    时间: 2020-1-9 19:46
c620的dome的
MX_FREERTOS_Init();
osKernelStart();
这两函数缺少一个都不行,debug测试第二个函数是发送数据的能详细说一下这两个函数吗
作者: ZYZ    时间: 2020-1-9 19:46
使用的是A板,上面18个GPIO口可以自己随意设置,想接受其他传感器返回的数据(支持AD或I2C),想问下大家是写的GPIO模拟口还是用的自己的板子?
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:46
8. 想知道CAN总线控制电机和PWM控制电机的区别,就除了接线数量的差别外,还有什么呢?对这个不是特别了解

使用CAN可以获取到电机的转速 角度等消息,但需要自己实现控制,如果PWM控制电机,内置控制器,可以认为是当一个舵机使用
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:47
9. 我想请教下,在由编码器的值推算车子运动的里程的时候,即函数“mecanum_position_measure”中,为什么用编码器的数值“total_ecd”进行计算,是这样的算法误差比较小吗?为社么不把每个时间段内运动的距离进行积分呢?

这是ICRA的程序代码, 暂不回答,等其他问题回答
作者: infosis    时间: 2020-1-9 19:47
RoboMaster开发板C型的主芯片具体是什么型号?
作者: 彭彩彤    时间: 2020-1-9 19:47
官方有开源出来视觉python代码吗
作者: RoboMaster赛务    时间: 2020-1-9 19:47
djiuser_oMkvf69 发表于 2020-1-9 19:46
c620的dome的
MX_FREERTOS_Init();
osKernelStart();

攻城狮小哥正在按顺序回答大家的问题,请耐心等待一下哈~
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:49
10. c620的dome的
MX_FREERTOS_Init();
  osKernelStart();
这两函数缺少一个都不行,debug测试第二个函数是发送数据的能详细说一下这两个函数吗

A: 这两句是cubemx软件生成的, 第一句是创建对应的任务,第二句是开启操作系统的运行, 如果少第一句,操作系统只会运行idle任务, 少第二句,操作系统都没有启动
作者: Interesting    时间: 2020-1-9 19:49
控制底盘和遥控转发是通过can吗,如何控制这两个东西
作者: Evan-GH    时间: 2020-1-9 19:50
官方开源的步兵代码中OLED采用的是STM32的硬件IIC,然后网络上经常能看到对于STM32硬件IIC不好用的吐槽,在实际使用中也的确遇到过其硬件IIC总线宕机的情况,请问官方在测试过程中有没有遇到这个问题呢?又是如何解决的
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:50
11. 官方开源的步兵代码中PID计算采用的是位置式PID,官方是否有对比过在不同控制情况下(比如功率控制)采用增量式PID和位置式PID达到稳态的控制过程中哪个控制效果更好吗?

增量型和位置型PID并没有哪个更好的说法, 对于不同的应用场景,应该选择不同的PID类型,
作者: infosis    时间: 2020-1-9 19:53
官方开源的代码是指开发板A型连接的github代码还是robomaster.com官网2016开源的代码?
作者: infosis    时间: 2020-1-9 19:54
robomaster.com官网2016开源的代码会否有些过时?还是同样适用现在的开发板A、B板?
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:54
12. 请问为什么做键盘鼠标控制时,即使是鼠标左右直接控制底盘的旋转模式下,在调试的时候 步兵底盘 转的一卡一卡的(遥控器控制的时候正常),还有就是用键盘控制的时候,在不给信号后,电机就会突然制动,感觉对电机伤害很大,在做键盘控制的时候,在程序逻辑上有什么需要注意的地方吗?谢谢
A:鼠标一卡一卡,没有遇见过,程序中遥控器的赋值控制地方和鼠标赋值控制的地方是一样的吗 会不会两个地方处理的时间不同,或者灵敏度的问题,  在键盘控制控制上 对于底盘应该设置控制目标值应该是逐步增大,使用斜波或者一阶滤波方式给定会比较好,
作者: 启林    时间: 2020-1-9 19:54
代码中6020电机的数据返回 返回的是什么数据
作者: RoboMaster赛务    时间: 2020-1-9 19:54
大家在等待的过程中,也可以查看攻城狮小哥已回答的问题,学习相关问题~
作者: 北极星耀    时间: 2020-1-9 19:55
请问云台控制线程的运行频率在多少会比较适合,是越快越好吗,还是要需要根据装甲检测的频率来动态调整吗
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:55
13. 请问官方代码有在控制端做视觉自瞄角度的滤波以及预测处理吗

没有, 外赠步兵的代码没有对视觉的处理
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:57
14. 官方开源的步兵代码中,对于Dbus的空闲中断接收采用了双缓冲区处理,这样做有什么好处吗?
正常情况下,区别不大,但是在如果进DBUS中断,又被另一个中断打断,另一个中断处理后,返回DBUS中断,这时候DBUS又来一帧数据,可能导致数据处理错误防止程序如果在处理中
作者: Evan-GH    时间: 2020-1-9 19:57
官方开源的步兵代码中,support文件夹下有一个名为mem_manager4.c的文件,而CubeMX软件生成工程时在FreeRTOS的中间层文件中也有一个关于内存分配的heap4.c文件,这里support文件夹下的文件作用是什么呢?
作者: 北极星耀    时间: 2020-1-9 19:57
可以简单讲解一下官方步兵代码对于小陀螺模式下的底盘运动控制方式吗,能否做到在小陀螺模式下正常的进行方向移动
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:58
15. 做视觉C++比python好吗?

因人而异
作者: UnlimitedLemon    时间: 2020-1-9 19:58
标准库,hal库,ll库,各位都是怎么选的?
作者: 陈小豪右边童鞋    时间: 2020-1-9 19:59
16. 请问云台控制线程的运行频率在多少会比较适合,还是要需要根据装甲检测的频率来动态调整吗?

设置1000Hz或者500Hz, 视觉的装甲检测频率? ,可以对视觉进行控制目标的优化,
作者: djiuser_oMkvf69    时间: 2020-1-9 20:00
void CAN1_RX0_IRQHandler(void)
{
    HAL_CAN_IRQHandler(&CAN1_Handler);
}
void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan)
小哥哥  从标准库转换到hal库对can中的这几个函数理解有点迷糊,能具体说一下吗
作者: 陈小豪右边童鞋    时间: 2020-1-9 20:00
18. 请问一下,官方开源的步兵代码中的遥控器是运用PB6(uart1)接收数据,进行处理得到ch的值,那么用DMA中断比用串口直接中断有什么好处

节约CPU时间,同时减少进入中断次数,
作者: RoboMaster赛务    时间: 2020-1-9 20:01
如果是完全与本期主题无关的问题,攻城狮小哥可能不会回答哦(毕竟术业有专攻==)
作者: 陈小豪右边童鞋    时间: 2020-1-9 20:02
19. 使用的是A板,上面18个GPIO口可以自己随意设置,想接受其他传感器返回的数据(支持AD或I2C),想问下大家是写的GPIO模拟口还是用的自己的板子?

18GPIO有ADC的IO,也有I2C spi接口,都可以,根据走线或者精度要求决定是不是使用stm32上的ADC
作者: 陈小豪右边童鞋    时间: 2020-1-9 20:02
20. RoboMaster开发板C型的主芯片具体是什么型号?

stm32f407ig
作者: djiuser_oMkvf69    时间: 2020-1-9 20:03
c620的dome有不是cube生成的吗,,,求资料

作者: 陈小豪右边童鞋    时间: 2020-1-9 20:03
22. 控制底盘和遥控转发是通过can吗,如何控制这两个东西

ICRA程序,暂不回答
作者: 北极星耀    时间: 2020-1-9 20:03
请问官方的PID调参大概是怎样做的,有什么比较简单高效的方法或者技巧分享吗?

作者: 彭彩彤    时间: 2020-1-9 20:03
陈小豪右边童鞋 发表于 2020-1-9 19:58
15. 做视觉C++比python好吗?

因人而异

感觉网上开源的python很少
作者: 花师小哲    时间: 2020-1-9 20:03
我感觉在这里看着,就像在复习操作系统一样。。。学过操作系统,能看懂的东西就多了一些
作者: 花师小哲    时间: 2020-1-9 20:04
感觉C++更受欢迎,毕竟快
作者: infosis    时间: 2020-1-9 20:04
陈小豪右边童鞋 发表于 2020-1-9 19:38
3. 官方开源的是github的还是robomaster.com官网2016开源的代码?官方代码是直接适用开发板A型吗?开发板A ...

十分感谢回复!外赠步兵代码是不是也在robomaster.com官网上下载?(可能是没有找仔细,没有找到,谢谢!)
作者: RoboMaster赛务    时间: 2020-1-9 20:04
ICRA相关的问题,我们会记录大家提问的问题,本次活动后会争取邀请ICRA的小哥哥回复帖子或开专场回答哈~
作者: 陈小豪右边童鞋    时间: 2020-1-9 20:06
23. 官方开源的步兵代码中OLED采用的是STM32的硬件IIC,然后网络上经常能看到对于STM32硬件IIC不好用的吐槽,在实际使用中也的确遇到过其硬件IIC总线宕机的情况,请问官方在测试过程中有没有遇到这个问题呢?又是如何解决的

I2C硬件是因为如果需要使用到DMA,如果使用模拟I2C 每次通信需要传输1025个字节,占CPU资源比较多,遇见过I2C死机,所以添加了detect任务,如果发现死机,重启I2C,目前自测觉得没有问题,


作者: UnlimitedLemon    时间: 2020-1-9 20:06
几个task里的状态机的写法有什么资料可以参考?
作者: Evan-GH    时间: 2020-1-9 20:07
官方开源的步兵中使用的IMU芯片和之前内测的RM陀螺仪配置很像,请问是同款吗?
作者: 陈小豪右边童鞋    时间: 2020-1-9 20:07
24. robomaster.com官网2016开源的代码会否有些过时?还是同样适用现在的开发板A、B板?

已经开源了2019 2020年外赠步兵,可以在帖子的顶楼的下载链接, 同时C板在GitHub开源一套教程文档和教程例程
作者: 陈小豪右边童鞋    时间: 2020-1-9 20:08
25.代码中6020电机的数据返回 返回的是什么数据

详见6020说明书25.代码中6020电机的数据返回 返回的是什么数据

详见6020说明书25.代码中6020电机的数据返回 返回的是什么数据

详见6020说明书25.代码中6020电机的数据返回 返回的是什么数据

详见6020说明书
作者: 陈小豪右边童鞋    时间: 2020-1-9 20:09
27.官方开源的步兵代码中,support文件夹下有一个名为mem_manager4.c的文件,而CubeMX软件生成工程时在FreeRTOS的中间层文件中也有一个关于内存分配的heap4.c文件,这里support文件夹下的文件作用是什么呢?

mem_manager4.c是使用单字节解包的裁判系统解包,的FIFO相关文件, heap4.c是freeRTOS内存管理相关文件
作者: 949793941    时间: 2020-1-9 20:09
用官方代码后,某个电机掉线其他电机能否正常运行,并且以亮灯形式报错?
作者: 陈小豪右边童鞋    时间: 2020-1-9 20:10
28.可以简单讲解一下官方步兵代码对于小陀螺模式下的底盘运动控制方式吗,能否做到在小陀螺模式下正常的进行方向移动

使用到一个旋转角度操作,  将底盘运动角度旋转到云台对应角度,可以看chassis_task.c内的follow_gimbal_yaw的相关代码
作者: RoboMaster赛务    时间: 2020-1-9 20:11
所有的问答之后都会整理到原帖中,一些开源文档链接也在帖子内容中有哦,请大家仔细查看【RoboMaster 2020官方机器人文件说明】https://www.robomaster.com/zh-CN ... ype=announcementSub

作者: 陈小豪右边童鞋    时间: 2020-1-9 20:12
29. void CAN1_RX0_IRQHandler(void)
{
HAL_CAN_IRQHandler(&CAN1_Handler);
}
void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan)
小哥哥 从标准库转换到hal库对can中的这几个函数理解有点迷糊,能具体说一下吗

这个是hal生成的回调函数,hal为了将中断的一些消除标志位等等操作进行处理, 用户就只需要关心对应数据回调接口,
作者: 陈小豪右边童鞋    时间: 2020-1-9 20:13
31.请问官方的PID调参大概是怎样做的,有什么比较简单高效的方法或者技巧分享吗?

PID调试需要结合波形调试, 多使用一些上位机显示波形工具,也可能看C型板教程中的 16章节, 有对PID的参数进行讲解, 同时学习好理论知识也很有用
作者: RoboMaster赛务    时间: 2020-1-9 20:14
infosis 发表于 2020-1-9 20:04
十分感谢回复!外赠步兵代码是不是也在robomaster.com官网上下载?(可能是没有找仔细,没有找到,谢谢! ...

https://www.robomaster.com/zh-CN ... ype=announcementSub
作者: 陈小豪右边童鞋    时间: 2020-1-9 20:14
32.几个task里的状态机的写法有什么资料可以参考?

不太明白?  变量起名吗?
作者: 陈小豪右边童鞋    时间: 2020-1-9 20:14
33. 官方开源的步兵中使用的IMU芯片和之前内测的RM陀螺仪配置很像,请问是同款吗?



作者: Laplace    时间: 2020-1-9 20:15
云台控制时,斜坡信号输入有什么作用啊
作者: 启林    时间: 2020-1-9 20:15
C板的程序可以移植到A板上吗
作者: 陈小豪右边童鞋    时间: 2020-1-9 20:15
34. 用官方代码后,某个电机掉线其他电机能否正常运行,并且以亮灯形式报错?

2020年机器人代码是以OLED屏幕 蜂鸣器 和USB串口三种方式, 2019是通过LED灯显示
作者: djiuser_oMkvf69    时间: 2020-1-9 20:17
开源代码中的freeRTOS文件是关于什么的
我看着cube里面也有这个文件,作用一样吗
作者: 陈小豪右边童鞋    时间: 2020-1-9 20:18
35. 云台控制时,斜坡信号输入有什么作用啊

一般是底盘斜坡输入, 云台输入是一般是摇杆值和鼠标值 叠加到角度,相当与给了斜坡慢慢增加, 不过对视觉信号可能是阶跃信号,可根据情况进行处理吧,
作者: 949793941    时间: 2020-1-9 20:18
代码以LED报错以后,其他没有掉线电机还能不能遥控呀
作者: YSUSLD    时间: 2020-1-9 20:18
底盘速度值反馈震动厉害 如果要是给速度滤波的话 用什么滤波办法比较好,自己的车底盘跑起来感觉不是很顺滑,陀螺的室友云台也有频率比较高的颤抖 请问这是底盘PID输出震荡导致的吗
作者: BPJ    时间: 2020-1-9 20:18
官方的云台控制中的电机速度环为什么不用6020反馈的速度?
作者: 陈小豪右边童鞋    时间: 2020-1-9 20:19
37. 开源代码中的freeRTOS文件是关于什么的
我看着cube里面也有这个文件,作用一样吗

freeRTOS是cubemx生成的,2019年代码是标准库,需要移植freeRTOS官网的代码,freeRTOS文件夹便是放官网freeRTOS代码的
作者: YSUSLD    时间: 2020-1-9 20:20
陀螺仪初始化部分,领飘处理能不能提前测好偏移量,然后每次上电都固定的减去那个偏移量。 温度闭环对零飘的影响大吗
作者: hth0817    时间: 2020-1-9 20:22
请问这个c板咋烧录啊。。。。。那个usb没有识别成串口欸





欢迎光临 RoboMaster (https://bbs.robomaster.com/) Powered by Discuz! X3.2