精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

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

冬至子 ? 來源:螺絲松掉的人 ? 作者:螺絲松掉的人 ? 2023-09-20 15:28 ? 次閱讀

背景

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

IMU姿態解算

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

dt = dwt_get_delta(&ins_dwt);
    imu_ops.gyro_read(ins.gyro);
    imu_ops.accel_read(ins.accel);
    // 核心函數,EKF更新四元數
    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,隨后根據加速度計數據計算運動加速度
    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型開發板上的 BMI088 周圍是又一圈加熱電阻的,可以通過 PWM 控制加熱功率,從而實現恒溫控制,有助于抑制陀螺儀漂移,根據手冊提示恒溫控制在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)

到此就可以使用解算得到的歐拉角等數據去對云臺等進行閉環控制啦。

存在問題及優化方向

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

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

    關注

    18

    文章

    461

    瀏覽量

    36053
  • 卡爾曼濾波
    +關注

    關注

    3

    文章

    162

    瀏覽量

    24636
  • STM32F407
    +關注

    關注

    15

    文章

    187

    瀏覽量

    29374
  • RT-Thread
    +關注

    關注

    31

    文章

    1273

    瀏覽量

    39926
  • 姿態解算
    +關注

    關注

    0

    文章

    49

    瀏覽量

    8241
收藏 人收藏

    評論

    相關推薦

    基于RT-ThreadRoboMaster電控框架設計

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

    RT-Thread編程指南

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

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

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

    RT-Thread設備模型框架及創建注冊設備的實現

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

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發表于 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 介紹與移植
    發表于 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 測試框架
    發表于 02-22 18:43 ?2次下載
    <b class='flag-5'>RT-Thread</b>文檔_utest 測試<b class='flag-5'>框架</b>

    淺析RT-Thread設備驅動框架

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

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

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

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

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

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

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

    RT-Thread框架下的SMP支持

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

    基于rt-thread的socket通信設計

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

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

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

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

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