国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于 RT-Thread 的 RoboMaster 電控框架(一)

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:未知 ? 2023-09-19 19:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

由于 RT-Thread 穩(wěn)定高效的內(nèi)核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設(shè)備驅(qū)動框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包……很難不選擇 RT-Thread 進行項目開發(fā)。但也正是因為這些優(yōu)點的覆蓋面較廣,很多初學者會覺得無從下手,但只要步入 RT-Thread 的大門,你就發(fā)現(xiàn)她的美好。這系列文檔將作為本人基于 RT-Thread 開發(fā) RoboMaster 電控框架的記錄與分享,希望能幫助到更多初識 RT-Thread 的小伙伴,也歡迎大家交流分享,指正不足,共同進步。

背景

Robomaster 機器人比賽包含多個兵種,為了提高研發(fā)效率,模塊化尤為重要,使用 RT-Thread 有助于面對對象思想開發(fā);通過配備的 Kconfig,Scons 等工具可以實現(xiàn)工程的靈活配置;軟件定時器可用作各電機等模塊監(jiān)控,RingBuffer 可以實現(xiàn)傳感器信息的高效處理 …….使用的開發(fā)板為大疆的 RoboMaster-C 型開發(fā)板,基礎(chǔ)工程為 rt-thread>bsp>stm32f407-robomaster-c

電機模塊開發(fā)

使用電機和電調(diào)均為大疆官方出品,如 2006,3508,6020 等,采用 CAN 通訊方式。

構(gòu)建對象

首先我們根據(jù)使用的電機特性,構(gòu)建一個通用的電機對象

 1/**
 2*@briefDJIintelligentmotortypedef
 3*/
 4typedefstructdji_motor_object
 5{
 6rt_device_tcan_dev;//電機CAN實例
 7dji_motor_measure_tmeasure;//電機測量值
 8uint32_ttx_id;//發(fā)送id(主發(fā))
 9uint32_trx_id;//接收id(主收)
10/*分組發(fā)送設(shè)置*/
11uint8_tsend_group;//同一幀報文分組
12uint8_tmessage_num;//一幀報文中位置
13motor_type_emotor_type;//電機類型
14motor_working_type_estop_flag;//啟停標志
15/*監(jiān)控線程相關(guān)*/
16rt_timer_ttimer;//電機監(jiān)控定時器
17/*電機控制相關(guān)*/
18void*controller;//電機控制器
19int16_t(*control)(dji_motor_measure_tmeasure);//控制電機的接口用戶可以自定義,返回值為16位的電壓或電流
20}dji_motor_object_t;

因為這些電機我們均使用 CAN 方式進行驅(qū)動,是 CAN 設(shè)備的延申,于是將 rt_device_t can_dev 父類結(jié)構(gòu)體對象內(nèi)嵌。

dji_motor_measure_t 結(jié)構(gòu)體中為,電機控制時需要用到的一些反饋值,包括電調(diào)直接反饋的數(shù)據(jù)以及進一步解算的得出的:

 1/**
 2*@briefDJImotorfeedback
 3*/
 4typedefstruct
 5{
 6/*以下是處理得出的數(shù)據(jù)*/
 7floatangle_single_round;//單圈角度
 8floatspeed_aps;//角速度,單位為:度/秒
 9floattotal_angle;//總角度,注意方向
10int32_ttotal_round;//總?cè)?shù),注意方向
11floattarget;//目標值(輸出軸扭矩矩/速度/角度(單位度))
12/*以下是電調(diào)直接回傳的數(shù)據(jù)*/
13uint16_tecd;//0-8191
14uint16_tlast_ecd;//上一次讀取的編碼器
15int16_tspeed_rpm;//電機的轉(zhuǎn)速值
16int16_treal_current;//實際轉(zhuǎn)矩電流
17uint8_ttemperature;//Celsius
18}dji_motor_measure_t;

注冊實例

通過 dji_motor_object_t *dji_motor_register(motor_config_t *config, void *controller) 注冊對應(yīng)的電機實例,用戶通過 motor_config_t *config 對實例進行靈活配置:

 1/**
 2*@brief電機初始化,返回一個電機實例
 3*@paramconfig電機配置
 4*@returndji_motor_object_t*電機實例指針
 5*/
 6dji_motor_object_t*dji_motor_register(motor_config_t*config,void*controller)
 7{
 8dji_motor_object_t*object=(dji_motor_object_t*)rt_malloc(sizeof(dji_motor_object_t));
 9rt_memset(object,0,sizeof(dji_motor_object_t));
10//對接用戶配置的motor_config
11object->motor_type=config->motor_type;//6020or2006or3508
12object->rx_id=config->rx_id;//電機接收報文的ID
13object->control=controller;//電機控制器
14/*查找CAN設(shè)備*/
15object->can_dev=rt_device_find(config->can_name);
16//電機分組,因為至多4個電機可以共用一幀CAN控制報文
17motor_send_grouping(object,config);
18//電機離線檢測定時器相關(guān)
19object->timer=rt_timer_create("motor1",
20motor_lost_callback,
21object,20,
22RT_TIMER_FLAG_PERIODIC);
23rt_timer_start(object->timer);
24dji_motor_enable(object);
25dji_motor_obj[idx++]=object;
26returnobject;
27}
28/*電機配置結(jié)構(gòu)體*/
29typedefstruct
30{
31motor_type_emotor_type;
32constchar*can_name;
33uint32_ttx_id;//發(fā)送id(主發(fā))
34uint32_trx_id;//接收id(主收)
35void*controller;//電機控制器
36}motor_config_t;
motor_config_t 結(jié)構(gòu)體中的 void *controller 為電機所使用到的控制器集合,是一個控制器類型為其成員的結(jié)構(gòu)體變量,如下:
1staticstructchassis_controller_t{
2pid_object_t*speed_pid;
3}chassis_controller;
4staticstructgimbal_controller_t{
5pid_object_t*speed_pid;
6pid_object_t*angle_pid;
7}gimbal_controlelr;

調(diào)用 dji_motor_object_t *dji_motor_register 時傳入的 void *controller 為電機對應(yīng)的控制器具體實現(xiàn),如進行 pid 計算,濾波等,會賦值給電機對象對應(yīng)的函數(shù)指針,在進行電機控制計算時被執(zhí)行,如下:

1rt_int16_tchassis_control(dji_motor_measure_tmeasure){
2staticrt_int16_tset=0;
3set=pid_calculate(chassis_controller.speed_pid,measure.speed_rpm,1000);
4returnset;
5}

數(shù)據(jù)處理

電機對象離不開對數(shù)據(jù)穩(wěn)定快速的收發(fā)和解析計算,接下來展開討論使用 RT-Thread 的 CAN 設(shè)備驅(qū)動收發(fā)數(shù)據(jù)的思路。

首先是數(shù)據(jù)的接收,stm32f4 擁有 2 個 CAN 外設(shè),所有電機和使用 CAN 總線的設(shè)備都掛載在這兩條總線上,但 RT-Thread 的每個 CAN 總線只能通過 rt_device_set_rx_indicate(can_dev, can_rx_call); 注冊一個對應(yīng)的接收回調(diào)函數(shù)。但不同類型電機,不同 CAN 設(shè)備的數(shù)據(jù)解析處理都是不一樣的,我這里的解決思路是:首先創(chuàng)建了一個 usr_callback 文件,用于統(tǒng)一管理 CAN、串口等設(shè)備可能用到的用戶接收對調(diào)函數(shù);將一個大的設(shè)備類型回調(diào)函數(shù)注冊到對應(yīng) CAN 設(shè)備,其中再細分各掛載設(shè)備的數(shù)據(jù)解析,實現(xiàn)如下:

 1#ifdefBSP_USING_CAN
 2rt_err_tcan_rx_call(rt_device_tdev,rt_size_tsize)
 3{
 4structrt_can_msgrxmsg={0};
 5uint8_t*rxbuff=rxmsg.data;
 6/*從CAN讀取一幀數(shù)據(jù)*/
 7rt_device_read(dev,0,&rxmsg,sizeof(rxmsg));
 8/*CAN接收到數(shù)據(jù)后產(chǎn)生中斷,調(diào)用此回調(diào)函數(shù),然后發(fā)送接收信號量*/
 9#ifdefBSP_USING_DJI_MOTOR
10dji_motot_rx_callback(rxmsg.id,rxbuff);
11#endif/*BSP_USING_DJI_MOTOR*/
12returnRT_EOK;
13}
14#endif/*BSP_USING_CAN*/
但是這其中也有一點問題,rt_err_t can_rx_call(rt_device_t dev, rt_size_t size) 傳入的參數(shù)無法判斷具體的 CAN 設(shè)備來源,因此所有使用到的 CAN 外設(shè)數(shù)據(jù)處理函數(shù)都會被調(diào)用,但目前問題不大,因為同一條總線上不會掛載相同 ID 的設(shè)備,這也是一開始就應(yīng)該避免的錯誤。接下來是 CAN 報文的發(fā)送,調(diào)用 rt_device_write 發(fā)送填充好的 CAN 報文幀即可。離線檢測這里使用 RT-Thread 的軟件定時器對電機進行離線檢測,當超過定時間沒有接收到對應(yīng)電機反饋報文,則進入超時回調(diào),并輸出警告日志:
 1/**
 2*@brief電機定時器超時回調(diào)函數(shù)
 3*@parammotor_ptr
 4*/
 5staticvoidmotor_lost_callback(void*motor_ptr)
 6{
 7dji_motor_object_t*motor=(dji_motor_object_t*)motor_ptr;
 8//dji_motor_stop(motor);
 9LOG_W("[dji_motor]Motorlost,canbus[%s],id0x[%x]",motor->can_dev->parent.name,motor->rx_id);
10}

使用實例

封裝完成的電機模塊使用示例如下:

 1staticstructchassis_controller_t{
 2pid_object_t*speed_pid;
 3}chassis_controller;
 4staticstructgimbal_controller_t{
 5pid_object_t*speed_pid;
 6pid_object_t*angle_pid;
 7}gimbal_controlelr;
 8staticdji_motor_object_t*chassis_motor;
 9staticdji_motor_object_t*gimbal_motor;
10rt_int16_tchassis_control(dji_motor_measure_tmeasure){
11staticrt_int16_tset=0;
12set=pid_calculate(chassis_controller.speed_pid,measure.speed_rpm,1000);
13returnset;
14}
15rt_int16_tgimbal_control(dji_motor_measure_tmeasure){
16staticrt_int16_tset=0;
17set=pid_calculate(gimbal_controlelr.speed_pid,measure.speed_rpm,0);
18returnset;
19}
20staticvoidexample_init()
21{
22pid_config_tchassis_speed_config={
23.Kp=10,//4.5
24.Ki=0,//0
25.Kd=0,//0
26.IntegralLimit=3000,
27.Improve=PID_Trapezoid_Intergral|PID_Integral_Limit|PID_Derivative_On_Measurement,
28.MaxOut=12000,
29};
30pid_config_tgimbal_speed_config={
31.Kp=50,//50
32.Ki=200,//200
33.Kd=0,
34.Improve=PID_Trapezoid_Intergral|PID_Integral_Limit|PID_Derivative_On_Measurement,
35.IntegralLimit=3000,
36.MaxOut=20000,
37};
38chassis_controller.speed_pid=pid_register(&chassis_speed_config);
39gimbal_controlelr.speed_pid=pid_register(&gimbal_speed_config);
40motor_config_tchassis_motor_config={
41.motor_type=M3508,
42.can_name=CAN_CHASSIS,
43.rx_id=0x201,
44.controller=&chassis_controller,
45};
46motor_config_tgimbal_motor_config={
47.motor_type=GM6020,
48.can_name=CAN_GIMBAL,
49.rx_id=0x206,
50.controller=&gimbal_controlelr,
51};
52chassis_motor=dji_motor_register(&chassis_motor_config,chassis_control);
53gimbal_motor=dji_motor_register(&gimbal_motor_config,gimbal_control);
54}

到此就可以方便且靈活的配置和使用電機模塊啦

倉庫地址放這里了 HNU_RM_SHARK_C ,覺得不錯可以點個 Star !

存在問題及優(yōu)化方向

  1. 目前 rt-thread 下 stm32 can驅(qū)動似乎僅支持 FIFO0 ,但 stm32f4 系列 can 具備兩個 FIFO,如能同時使能所有 FIFO,應(yīng)該能有效提高性能和穩(wěn)定性。

  2. 電機的離線回調(diào)可以增加相應(yīng)的聲光報警。

  3. 后續(xù)考慮能不能也優(yōu)化為,read,write,control 等形式。

————————————————

版權(quán)聲明:本文為RT-Thread論壇用戶「螺絲松掉的人」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

原文鏈接:https://club.rt-thread.org/ask/article/0a655bcf83494c87.html

———————End——————

點擊閱讀原文進入官網(wǎng)


原文標題:基于 RT-Thread 的 RoboMaster 電控框架(一)

文章出處:【微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1614

    瀏覽量

    44885

原文標題:基于 RT-Thread 的 RoboMaster 電控框架(一)

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    恩智浦亮相RT-Thread 20周年開發(fā)者大會

    日前,“開源向?qū)崱どa(chǎn)力進化啟示錄”全球峰會暨RT-Thread 20周年開發(fā)者大會在上海成功舉辦,恩智浦作為RT-Thread的緊密合作伙伴,在活動中重磅亮相,展示雙方在共建RT-Thread OS開發(fā)生態(tài)方面的新成果、新方案
    的頭像 發(fā)表于 01-26 09:07 ?559次閱讀

    基于RT-Thread和兆易創(chuàng)新GD32F527系列MCU的健康監(jiān)測站 | 技術(shù)集結(jié)

    本項目為RT-Thread嵌入式大賽獲獎作品,基于RT-Thread和兆易創(chuàng)新GD32F527I-EVAL的健康監(jiān)測站。目錄項目概述系統(tǒng)硬件框架結(jié)構(gòu)基礎(chǔ)驅(qū)動程序?qū)崿F(xiàn)整體驅(qū)動實現(xiàn)工程效果演示視頻及代碼演示
    的頭像 發(fā)表于 01-20 17:37 ?4141次閱讀
    基于<b class='flag-5'>RT-Thread</b>和兆易創(chuàng)新GD32F527系列MCU的健康監(jiān)測站 | 技術(shù)集結(jié)

    手搓RT-Thread工地巡檢機器人要幾步? | 技術(shù)集結(jié)

    本項目為RT-Thread嵌入式大賽獲獎作品,基于CanMVK230的工地巡檢機器人。K230芯片集成了兩顆RISC-V處理器核心,雙核玄鐵C908。RT-Thread已全面支持XUANTIE系
    的頭像 發(fā)表于 12-29 21:46 ?3889次閱讀
    手搓<b class='flag-5'>一</b>個<b class='flag-5'>RT-Thread</b>工地巡檢機器人要幾步? | 技術(shù)集結(jié)

    基于RT-Thread的簡單物聯(lián)網(wǎng)溫控箱 | 技術(shù)集結(jié)

    目錄項目概述RT-Thread使用情況概述硬件框架軟件框架說明演示效果改進方向代碼地址1項目概述本項目是個簡易的、較高精度的、易于擴展的桌面級溫控系統(tǒng)。實現(xiàn)對箱內(nèi)溫度的精確控制,并通
    的頭像 發(fā)表于 12-26 18:18 ?7270次閱讀
    基于<b class='flag-5'>RT-Thread</b>的簡單物聯(lián)網(wǎng)溫控箱 | 技術(shù)集結(jié)

    首搭RT-Thread程翧車控平臺| RT-Thread程翧 S32K344 快速原型開發(fā)平臺正式上市!| 產(chǎn)品動態(tài)

    在智能汽車邁向高集成與高安全的時代,VCU/ECU開發(fā)正面臨效率與可靠性的雙重考驗。依賴單硬件或拼湊軟件方案的傳統(tǒng)模式,已成為制約創(chuàng)新的瓶頸。為此,RT-Thread帶來里程碑式的解決方案
    的頭像 發(fā)表于 10-31 11:53 ?997次閱讀
    首搭<b class='flag-5'>RT-Thread</b>程翧車控平臺| <b class='flag-5'>RT-Thread</b>程翧 S32K344 快速原型開發(fā)平臺正式上市!| 產(chǎn)品動態(tài)

    2025年RT-Thread開發(fā)者巡回培訓報名正式啟動!

    親愛的RT-Thread社區(qū)成員們:新程再啟,共赴熱愛!2025年RT-Thread開發(fā)者巡回培訓正式啟動報名!今年,我們選擇了西安、武漢、北京、杭州、深圳、上海、成都這7座城市,為大家?guī)?/div>
    的頭像 發(fā)表于 09-27 10:39 ?1977次閱讀
    2025年<b class='flag-5'>RT-Thread</b>開發(fā)者巡回培訓報名正式啟動!

    rt-thread studio 2.2.9如何使用最新的RT-Thread v5.2.0 released?

    rt-thread studio2.2.9如何使用最新的RT-Thread v5.2.0 released? 原先以為修改index_all.json,發(fā)現(xiàn)聯(lián)網(wǎng)的時候,會自動覆蓋 另lastet版本
    發(fā)表于 09-16 06:06

    在Ubuntu上開發(fā)基于先楫MCU的RT-Thread應(yīng)用指南

    1、前言RT-ThreadEnv是RT-Thread推出的開發(fā)輔助工具,針對基于RT-Thread操作系統(tǒng)的項目工程,提供編譯構(gòu)建環(huán)境、圖形化系統(tǒng)配置及軟件包管理功能。其內(nèi)置的menuconfig
    的頭像 發(fā)表于 08-29 12:22 ?1800次閱讀
    在Ubuntu上開發(fā)基于先楫MCU的<b class='flag-5'>RT-Thread</b>應(yīng)用指南

    【好書推薦】RT-Thread第20本相關(guān)書籍!《嵌入式實時操作系統(tǒng)RT-Thread原理與應(yīng)用》| 技術(shù)集結(jié)

    01內(nèi)容簡介ContentSummary本書為讀者提供了個全面、系統(tǒng)的RT-Thread學習指南,旨在幫助初學者及有經(jīng)驗的開發(fā)者掌握RT-Thread實時操作系統(tǒng)和STM32嵌入式微控制器的核心
    的頭像 發(fā)表于 08-24 10:05 ?1037次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>第20本相關(guān)書籍!《嵌入式實時操作系統(tǒng)<b class='flag-5'>RT-Thread</b>原理與應(yīng)用》| 技術(shù)集結(jié)

    RT-Thread 遇上 Rust:安全內(nèi)核 RusT-Thread 的誕生

    大家好,我們是中國科學技術(shù)大學操作系統(tǒng)原理與設(shè)計(H)課oooooS小組。這個項目是我們的課程大作業(yè):參考RT-Thread架構(gòu),使用Rust搭建個原生的嵌入式操作系統(tǒng)內(nèi)核。初識Rust是因為xk
    的頭像 發(fā)表于 08-02 11:03 ?3540次閱讀
    <b class='flag-5'>RT-Thread</b> 遇上 Rust:安全內(nèi)核 RusT-<b class='flag-5'>Thread</b> 的誕生

    RT-Thread榮獲2025優(yōu)秀開源項目 | 新聞速遞

    6月底,RT-Thread睿賽德受邀參與由上海開源信息技術(shù)協(xié)會主辦的2025上海開源創(chuàng)新精英薈。上海市商委副主任張杰出席會議并致辭。RT-Thread嵌入式操作系統(tǒng)項目憑借其卓越的技術(shù)創(chuàng)新與開源生態(tài)
    的頭像 發(fā)表于 07-04 09:04 ?2653次閱讀
    <b class='flag-5'>RT-Thread</b>榮獲2025優(yōu)秀開源項目 | 新聞速遞

    深度剖析 RT-Thread 線程調(diào)度流程

    RT-Thread調(diào)度第個線程的主要流程分如下:rtthread_startup:RTT的啟動函數(shù),主要負責板級驅(qū)動,調(diào)度器,系統(tǒng)線程初始化,啟動調(diào)度的工作
    的頭像 發(fā)表于 06-25 18:24 ?1774次閱讀
    深度剖析 <b class='flag-5'>RT-Thread</b> 線程調(diào)度流程

    揭秘RT-Thread上的AUTOSAR CP系統(tǒng)

    本文探討了RT-Thread與AUTOSARCP的融合,解決車載ECU開發(fā)中實時性、安全性與靈活性的平衡問題。通過分層安全內(nèi)核(rt-safetyos/autoos)和工具鏈整合,兼容AUTOSAR
    的頭像 發(fā)表于 06-23 20:22 ?3225次閱讀
    揭秘<b class='flag-5'>RT-Thread</b>上的AUTOSAR CP系統(tǒng)

    2025 RT-Thread全球技術(shù)大會議程正式發(fā)布!

    RT-ThreadGlobalTechConference(RT-ThreadGTC,RT-Thread全球技術(shù)大會)是聚焦基礎(chǔ)軟件技術(shù)創(chuàng)新與實踐的嵌入式技術(shù)盛會,持續(xù)推動技術(shù)價值轉(zhuǎn)化
    的頭像 發(fā)表于 05-27 19:28 ?1367次閱讀
    2025 <b class='flag-5'>RT-Thread</b>全球技術(shù)大會議程正式發(fā)布!

    RT-Thread審核團招募: 深度參與開源RTOS社區(qū)治理與演進

    全球開發(fā)者招募:RT-Thread審核團(ReviewTeam)正式開放申請!在開源的世界里,代碼審查(CodeReview)是保證軟件質(zhì)量、促進技術(shù)交流的關(guān)鍵環(huán)節(jié)。RT-Thread作為全球領(lǐng)先
    的頭像 發(fā)表于 05-21 18:02 ?1264次閱讀
    <b class='flag-5'>RT-Thread</b>審核團招募: 深度參與開源RTOS社區(qū)治理與演進