在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

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

冬至子 ? 來源:螺絲松掉的人 ? 作者:螺絲松掉的人 ? 2023-09-20 15:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景

使用的開發(fā)板為大疆RoboMaster-C 型開發(fā)板,基礎工程為 rt-thread>bsp>stm32f407-robomaster-c

IMU姿態(tài)解算

使用 BMI088 robomaster-c 開發(fā)板上集成的6軸 imu 進行姿態(tài)解算,使用的方案其實是RM中比較普遍成熟的一套,主要使用了四元數(shù)和卡爾曼濾波進行融合解算,解算頻率為 1Khz。

dt = dwt_get_delta(&ins_dwt);
    imu_ops.gyro_read(ins.gyro);
    imu_ops.accel_read(ins.accel);
    // 核心函數(shù),EKF更新四元數(shù)
    IMU_QuaternionEKF_Update(ins.gyro[X], ins.gyro[Y], ins.gyro[Z], ins.accel[X], ins.accel[Y], ins.accel[Z], dt);
    memcpy(ins.q, QEKF_INS.q, sizeof(QEKF_INS.q));
    // 機體系基向量轉換到導航坐標系,本例選取慣性系為導航系
    BodyFrameToEarthFrame(xb, ins.xn, ins.q);
    BodyFrameToEarthFrame(yb, ins.yn, ins.q);
    BodyFrameToEarthFrame(zb, ins.zn, ins.q);
    // 將重力從導航坐標系n轉換到機體系b,隨后根據(jù)加速度計數(shù)據(jù)計算運動加速度
    float gravity_b[3];
    EarthFrameToBodyFrame(gravity, gravity_b, ins.q);
    for (uint8_t i = 0; i < 3; ++i) // 同樣過一個低通濾波
    {
        ins.motion_accel_b[i] = (ins.accel[i] - gravity_b[i]) * dt / (ins.accel_lpf + dt) + ins.motion_accel_b[i] * ins.accel_lpf / (ins.accel_lpf + dt);
    }
    BodyFrameToEarthFrame(ins.motion_accel_b, ins.motion_accel_b, ins.q); // 轉換回導航系n
    ins.yaw = QEKF_INS.Yaw;
    ins.pitch = QEKF_INS.Pitch;
    ins.roll = QEKF_INS.Roll;
    ins.yaw_total_angle = QEKF_INS.YawTotalAngle;

恒溫控制

C型開發(fā)板上的 BMI088 周圍是又一圈加熱電阻的,可以通過 PWM 控制加熱功率,從而實現(xiàn)恒溫控制,有助于抑制陀螺儀漂移,根據(jù)手冊提示恒溫控制在40攝氏度較好,

static pid_obj_t *imu_temp_pid;
static pid_config_t imu_temp_config = {
.Kp = 50000,
.Ki = 8000,
.Kd = 0,
.IntegralLimit = 50000,
.Improve = PID_Integral_Limit,
.MaxOut = 250000,
};
static rt_err_t temp_pwm_init(rt_uint32_t period, rt_uint32_t pulse)
{
temp_pwm_dev = (struct rt_device_pwm )rt_device_find(TEMP_PWM_DEV_NAME);
if (temp_pwm_dev == RT_NULL)
{
LOG_E("Can't find %s device!", TEMP_PWM_DEV_NAME);
return -RT_ERROR;
}
/
設置PWM周期和脈沖寬度默認值 /
rt_pwm_set(temp_pwm_dev, TEMP_PWM_DEV_CHANNEL, period, pulse);
/
使能設備 */
rt_pwm_enable(temp_pwm_dev, TEMP_PWM_DEV_CHANNEL);
}

在 ins_task 中以 500hz 的頻率進行恒溫控制,需要注意,使用加熱電阻外圍電路需要給C板額外供電。

void ins_thread_entry(void argument)
{
static uint32_t count;
temp_pwm_init(period, pulse);
/
注冊 PID 實例 */
imu_temp_pid = pid_register(&imu_temp_config);
imu_ops.imu_init();
LOG_I("Example Task Start");
for (;;)
{
example_start = dwt_get_time_ms();
imu_ops.gyro_read(gyro);
imu_ops.accel_read(acc);
if(count % 2 == 0){
temp = imu_ops.temp_read();
pulse = pid_calculate(imu_temp_pid, temp, IMU_TARGET_TEMP);
rt_pwm_set_pulse(temp_pwm_dev, TEMP_PWM_DEV_CHANNEL, pulse);
}
count++;
rt_thread_delay(1);
}
}

實際效果測試如下:

不加恒溫控制,室溫下(23攝氏度左右)十分鐘內,yaw 軸偏移近20度;
加入恒溫控制后(40攝氏度),十分鐘內,yaw 軸偏移10度
arm_math庫使用
有一個小插曲就是arm_math庫的移植使用,需要通過修改 Scons 文件,將 arm_math 庫鏈接到工程中,并添加需要的宏定義:

使用 arm_math.h 需要添加相關內核定義

CPPDEFINES = ['ARM_MATH_CM4']
LIBPATH = [cwd + '/arm_math']
LIBS = ['libarm_cortexM4lf_math.a']
path += [cwd + '/arm_math']
group = DefineGroup('RM_Algorithms', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES, LIBS = LIBS, LIBPATH=LIBPATH)

到此就可以使用解算得到的歐拉角等數(shù)據(jù)去對云臺等進行閉環(huán)控制啦。

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

雖然通過陀螺儀校準和恒溫控制等有效抑制了零漂,但yaw的零飄依然存在;
之后考慮通過融合磁力計數(shù)據(jù),解決零飄問題;

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

    關注

    19

    文章

    560

    瀏覽量

    37069
  • 卡爾曼濾波
    +關注

    關注

    3

    文章

    166

    瀏覽量

    25065
  • STM32F407
    +關注

    關注

    15

    文章

    188

    瀏覽量

    30531
  • RT-Thread
    +關注

    關注

    32

    文章

    1398

    瀏覽量

    41819
  • 姿態(tài)解算

    關注

    0

    文章

    49

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    基于RT-ThreadRoboMaster電控框架設計

    由于 RT-Thread 穩(wěn)定高效的內核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設備驅動框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包……很難不選擇 RT-Thread 進行項目開發(fā)。
    發(fā)表于 09-06 15:21 ?1025次閱讀

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開發(fā)組(2015-03-31)。RT-Thread做為國內有較大影響力的開源實時操作系統(tǒng),本文是RT-Thread實時操作系統(tǒng)的編程指南
    發(fā)表于 11-26 16:06 ?0次下載

    RT-Thread全球技術大會:RT-Thread上的單元測試框架與運行測試用例

    RT-Thread全球技術大會:RT-Thread上的單元測試框架與運行測試用例 ? ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:21 ?1883次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:<b class='flag-5'>RT-Thread</b>上的單元測試<b class='flag-5'>框架</b>與運行測試用例

    RT-Thread設備模型框架及創(chuàng)建注冊設備的實現(xiàn)

    RT-Thread設備模型框架及創(chuàng)建注冊設備的實現(xiàn)方式介紹如下:
    的頭像 發(fā)表于 05-28 10:38 ?2413次閱讀
    <b class='flag-5'>RT-Thread</b>設備模型<b class='flag-5'>框架</b>及創(chuàng)建注冊設備的實現(xiàn)

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發(fā)表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread文檔_utest 測試框架

    RT-Thread文檔_utest 測試框架
    發(fā)表于 02-22 18:43 ?2次下載
    <b class='flag-5'>RT-Thread</b>文檔_utest 測試<b class='flag-5'>框架</b>

    淺析RT-Thread設備驅動框架

    RT-Thread 設備框架屬于組件和服務層,是基于 RT-Thread 內核之上的上層軟件。設備框架是針對某一類外設,抽象出來的一套統(tǒng)一的操作方法及接入標準,可以屏蔽硬件差異,為應用
    的頭像 發(fā)表于 08-07 15:39 ?2574次閱讀

    基于 RT-ThreadRoboMaster 電控框架(一)

    。但也正是因為這些優(yōu)點的覆蓋面較廣,很多初學者會覺得無從下手,但只要步入 RT-Thread 的大門,你就發(fā)現(xiàn)她的美好。這系列文檔將作為本人基于 RT-Thread 開發(fā) RoboMaster
    的頭像 發(fā)表于 09-19 19:55 ?1183次閱讀

    基于RT-ThreadRoboMaster電控框架(二)

    由于 RT-Thread 穩(wěn)定高效的內核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設備驅動框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包
    的頭像 發(fā)表于 09-20 15:16 ?1117次閱讀

    基于RT-ThreadRoboMaster電控框架(三)

    使用的開發(fā)板為大疆的 RoboMaster-C 型開發(fā)板,基礎工程為 rt-thread>bsp>stm32f407-robomaster-c
    的頭像 發(fā)表于 09-20 15:21 ?1285次閱讀

    RT-Thread框架下的SMP支持

    使其支持 RT-Thread 框架下的 SMP,最近就一直在研究 SMP,并在 Raspberry-Pico 上做了一些實驗。
    的頭像 發(fā)表于 10-11 10:34 ?1682次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>框架</b>下的SMP支持

    基于rt-thread的socket通信設計

    最近再研究 rt-thread 的通信 ,想設計出 eps8266(多個) rt-thread(作為中控) 服務器的通信框架,使用的開發(fā)板是 潘多拉
    的頭像 發(fā)表于 10-13 15:02 ?1675次閱讀
    基于<b class='flag-5'>rt-thread</b>的socket通信設計

    基于RT-ThreadRoboMaster電控框架(五)

    使用的開發(fā)板為大疆的 RoboMaster-C 型開發(fā)板,基礎工程為 rt-thread>bsp>stm32f407-robomaster-c
    的頭像 發(fā)表于 10-30 17:10 ?1691次閱讀

    基于RT-ThreadRoboMaster電控框架(六)

    使用的開發(fā)板為大疆的 RoboMaster-C 型開發(fā)板,基礎工程為 rt-thread>bsp>stm32f407-robomaster-c
    的頭像 發(fā)表于 10-30 17:41 ?795次閱讀
    主站蜘蛛池模板: 色综合久久网 | 97就要鲁就要鲁夜夜爽 | 久久精品五月天 | 色综合日韩 | 国产精品国产午夜免费福利看 | 精品综合久久久久久98 | 在厨房乱子伦在线观看 | www.999精品视频观看免费 | 色骚综合| 天堂在线最新版在线www | 男女午夜特黄毛片免费 | 香蕉视频在线免费播放 | 五月婷婷丁香在线视频 | 久久亚洲国产精品五月天 | www.色黄| 亚州人成网在线播放 | 91免费视| 生活片毛片| 天天做夜夜爱 | 深爱激情五月网 | 理论片久久 | 天天操天天做 | 亚洲综合图片人成综合网 | 欧美在线视频看看 | ww欧洲ww在线视频看ww | 欧美极品bbbbⅹxxxx | 激情六月天婷婷 | av免费网站在线观看 | 免费国产不卡午夜福在线 | 欧美xxxx日本 | 三级成人影院 | 精品黄色片 | 欧美啊片| 激情婷婷在线 | 亚洲国产日韩女人aaaaaa毛片在线 | 国产小视频在线观看免费 | 狠狠干狠狠艹 | 高清不卡日本v在线二区 | 国产精品15p | 无夜精品久久久久久 | 美女网站色视频 |