人妻暴雨中被强制侵犯在线,亚洲国产欧美日韩精品一区二区三区,四虎影免看黄,国产无人区二卡三卡四卡不见星空

 找回密碼
 注冊(cè)會(huì)員

QQ登錄

只需一步,快速開始

搜索
查看: 7244|回復(fù): 9

小型雙足機(jī)器人設(shè)計(jì)方案

[復(fù)制鏈接]
1#
發(fā)表于 2021-12-23 14:04:35 | 只看該作者 |倒序?yàn)g覽 |閱讀模式
本帖最后由 1五湖四海1 于 2021-12-23 15:10 編輯 9 b0 [4 _! g3 {+ I6 w& W( O

5 j/ a3 }( K9 w8 f2 e
仿生機(jī)器人主要是模仿人的步伐進(jìn)行行走,從最開始的靜態(tài)步伐發(fā)展到了像人一樣的動(dòng)態(tài)步伐,開發(fā)者們經(jīng)歷了漫長(zhǎng)的時(shí)間研發(fā),最終實(shí)現(xiàn)了接近人類的漂亮步伐,下面我來(lái)介紹下我們研發(fā)發(fā)雙機(jī)器人軟件架構(gòu)和硬件構(gòu)成。

+ x# K. Z7 V" L' C: {) d% P5 F" h8 O7 m9 I6 \) c! R( }% Z" ^
硬件控制板大體分為主控板和主機(jī)板

2 h* a. x6 |6 C/ Y* C- ?- f! J+ T, A0 V) W6 k' O
主控負(fù)責(zé)運(yùn)動(dòng)控制和采集傳感器數(shù)據(jù),采用stm32h743 跑rtthread RTOS系統(tǒng)。下面是主控上電啟動(dòng)的效果。

; u$ w3 R" n( ]. ]- r2 J1 \% I% M8 m+ S& t# y: g: L
主機(jī)板主要負(fù)責(zé)運(yùn)動(dòng)具體控制,采用樹莓派4b運(yùn)行官方Raspbian系統(tǒng),基于樹莓派平臺(tái)運(yùn)行控制軟件采用QT編寫,并配有5寸hdmi顯示屏和兩個(gè)小音箱提供了多媒體功能。
( [3 A) _# Y+ k- z

0 H1 S2 B5 c# P% J; `8 E
腿部結(jié)構(gòu)部分是采用12個(gè)舵機(jī)作為關(guān)節(jié)提供動(dòng)力,舵機(jī)是RS485總線方式與主控板進(jìn)行通信。
0 Q- L$ L* a; ?6 S5 o
主機(jī)與主控通信采用Mobus協(xié)議通信,主機(jī)作為客戶端,主控作為服務(wù)端,在主控上的文件系統(tǒng)映射一個(gè)modbus寄存器區(qū)域。
7 q$ @5 L- J1 r8 A9 o

0 C% M) W; ]& f2 W; H
傳感器分布
主控上有九軸陀螺傳感器用于獲取身體姿態(tài)
樹莓派接8個(gè)tof激光測(cè)距傳感器通過(guò)i2c總線連接,安裝在雙足的四個(gè)角上面用了測(cè)量雙足觸地情況。

  q2 X5 h% \9 m: L' x7 a2 f; p1 S
整體框架是PC機(jī)電腦和樹莓派開發(fā)板上運(yùn)行QT運(yùn)動(dòng)控制軟件控制主控板完成各個(gè)關(guān)節(jié)運(yùn)動(dòng)控制,主控板映射一個(gè)寄存器內(nèi)存需要,建立兩個(gè)modbus服務(wù)器,一個(gè)用來(lái)連接PC機(jī)一個(gè)用來(lái)連接樹莓派開發(fā)板。
具體模塊介紹待續(xù)....
0 q7 u) h( h6 I3 l( K4 H
5 P& n; [1 d5 O  K: d/ Q* Y& ~

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有賬號(hào)?注冊(cè)會(huì)員

×
2#
 樓主| 發(fā)表于 2021-12-23 18:00:23 | 只看該作者
最早的控制策略是開環(huán)控制,根據(jù)控制模式計(jì)算出理論的步伐數(shù)據(jù)去執(zhí)行,但實(shí)際中會(huì)受到地面不平等因素影響機(jī)器人走穩(wěn),所以需要采用閉環(huán)控制很有必要。下面的思路是通過(guò)陀螺儀傳感器獲取機(jī)器人姿態(tài),然后通過(guò)pid控制器輸出需要調(diào)整的角度,在把目標(biāo)角度重新調(diào)整下,最后控制伺服電機(jī)帶動(dòng)關(guān)節(jié)轉(zhuǎn)動(dòng)。
: M2 X: H" W" E# M3 s  S
上位機(jī)需要根據(jù)用戶輸入的運(yùn)動(dòng)動(dòng)作和速度參數(shù)轉(zhuǎn)換為時(shí)間相等的小段運(yùn)動(dòng)動(dòng)作,這個(gè)相等的時(shí)間就是pid控制周期。轉(zhuǎn)換后的小段數(shù)據(jù)依次發(fā)送到主控端,運(yùn)動(dòng)數(shù)據(jù)需要做流控等待主控運(yùn)動(dòng)隊(duì)列空閑空余時(shí)進(jìn)行發(fā)送數(shù)據(jù)。

6 x; o, z) _7 Z2 ]) u
主控端接收運(yùn)動(dòng)隊(duì)列的每一段運(yùn)動(dòng)數(shù)據(jù),進(jìn)行獲取陀螺儀數(shù)據(jù)后進(jìn)行pid控制器輸出需要調(diào)整的角度,俯仰角是根據(jù)pid控制器的輸出調(diào)整臀俯仰關(guān)節(jié)。橫滾角是根據(jù)pid控制器的輸出調(diào)整雙足的高度重而調(diào)整身體橫滾姿態(tài)。

/ t' N0 \9 t( N: ]; N

7 a9 B' A: x2 f3 z8 U; N

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有賬號(hào)?注冊(cè)會(huì)員

×
3#
 樓主| 發(fā)表于 2021-12-24 13:15:54 | 只看該作者
本帖最后由 1五湖四海1 于 2021-12-24 13:18 編輯 9 h) e* z" j! X* B

$ }& f+ A* w1 @, z  O! N9 _2 m* `4 r& D9 I6 G. x2 [
上圖是站立姿態(tài)腿部膝蓋俯仰角,髖俯仰角,踝俯仰角的示意圖。
最終需要計(jì)算出a,b,c三個(gè)角度。已知d,h,L1,L3參數(shù)。
L1,L3是腿長(zhǎng)固定的數(shù)據(jù),d踝到重心的垂直距離。根據(jù)用戶輸入高度參數(shù)h輸出三個(gè)關(guān)節(jié)角度。
步驟1.已知d和h通過(guò)勾補(bǔ)定理計(jì)算出L2
步驟2.已知L1,L3和L2,通過(guò)公式計(jì)算出三角。
a = arcos (L12+L32-L22 / 2 * L1 * L3)
b = arcos (L12+L22-L32 / 2 * L1 * L2)
c = arcos (L22+L32-L12 / 2 * L2 * L3)

0 ]: y5 ?2 r1 U& I/ F
根據(jù)上面的思路加入腿部的前后的移動(dòng),計(jì)算方法也類似首先計(jì)算出L2再根據(jù)三邊計(jì)算出三角,不同的是需要根據(jù)三個(gè)關(guān)節(jié)的角度計(jì)算出d是正負(fù),上圖是d為負(fù)數(shù)的情況。

5 w( p# x9 k5 H0 e5 v3 v
如果已知的三角計(jì)算同樣可以計(jì)算出步長(zhǎng)d和高度h。

+ }- W1 U( H/ h

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有賬號(hào)?注冊(cè)會(huì)員

×
4#
 樓主| 發(fā)表于 2021-12-24 13:56:05 | 只看該作者
本帖最后由 1五湖四海1 于 2021-12-24 14:02 編輯
) F3 g( E$ k3 |, x9 Z1 F
1五湖四海1 發(fā)表于 2021-12-24 13:15
, {' i1 p6 S. ?4 M- Q) ]! h上圖是站立姿態(tài)腿部膝蓋俯仰角,髖俯仰角,踝俯仰角的示意圖。最終需要計(jì)算出a,b,c三個(gè)角度。已知d,h ...

( m( A( W& r9 H8 R; M+ N
模塊化設(shè)計(jì)
機(jī)械需要模塊化設(shè)計(jì)軟件同樣使用模塊設(shè)計(jì)思想,設(shè)計(jì)出面向?qū)ο蟮哪K設(shè)計(jì),抽象出需要使用的對(duì)象,提供對(duì)外部使用的API方法。
雙足機(jī)器人運(yùn)動(dòng)主控的軟件架構(gòu)主要分舵機(jī)驅(qū)動(dòng)模塊,通訊模塊,關(guān)節(jié)模塊,腿部模塊,寄存器模塊,整體應(yīng)用模塊組成。

! X4 s2 Q2 u. K
舵機(jī)驅(qū)動(dòng)模塊
該模塊提供了舵機(jī)當(dāng)前位置的初始化,舵機(jī)在線設(shè)備搜索,獲取舵機(jī)是否運(yùn)動(dòng),獲取舵機(jī)溫度,設(shè)置舵機(jī)pid參數(shù),舵機(jī)的運(yùn)動(dòng)控制等功能。舵機(jī)設(shè)備對(duì)象創(chuàng)建后,這些方法注冊(cè)到舵機(jī)設(shè)備對(duì)象中供外部模塊使用。
/ p( Z$ [! H9 o; p* S+ J% V
通訊模塊
主機(jī)與主控采用標(biāo)準(zhǔn)modbus通訊協(xié)議 ,通過(guò)共享內(nèi)存區(qū)的數(shù)據(jù)進(jìn)行通訊,主控作為服務(wù)端存儲(chǔ)內(nèi)存數(shù)據(jù),主機(jī)作為客戶端可以對(duì)內(nèi)存進(jìn)行寫入與讀取。下面是基于modbus實(shí)現(xiàn)的功能。
運(yùn)動(dòng)相關(guān)
上位機(jī)通過(guò)寫入0x68到0x9f區(qū)域內(nèi)存,主控解析出關(guān)節(jié)信息去執(zhí)行舵機(jī)運(yùn)動(dòng)。
get_joint_move_cmd                      這個(gè)函數(shù)是輪詢獲取主機(jī)是否有新數(shù)據(jù)到來(lái)。
get_joint_move_data                      如果有新數(shù)據(jù)到來(lái)通過(guò)這個(gè)函數(shù)解析出關(guān)節(jié)角度數(shù)據(jù)。
get_joint_init                                 主控端啟動(dòng)后通過(guò)這個(gè)函數(shù)讀取內(nèi)存中每個(gè)關(guān)節(jié)對(duì)應(yīng)舵機(jī)id數(shù)                                                據(jù)
set_joint_init                                 主控端設(shè)置關(guān)節(jié)參數(shù)到寄存器內(nèi)存里
set_joint_pos_last                          設(shè)置舵機(jī)位置數(shù)據(jù)到寄存器里
get_joint_pos_last                          獲取存儲(chǔ)在寄存器里的舵機(jī)位置數(shù)據(jù)
set_move_id                                 主控執(zhí)行運(yùn)動(dòng)隊(duì)列的id寫入寄存器里

* j. d* b% m" S0 X2 W
陀螺儀相關(guān)
get_body_euler_angle                   獲取存儲(chǔ)在寄存器里的陀螺儀姿態(tài)數(shù)據(jù)
set_body_euler_angle                   硬件陀螺儀數(shù)據(jù)寫入到寄存器內(nèi)存里
get_body_euler_pid                      獲取存儲(chǔ)在寄存器里的pid參數(shù)
set_body_euler_pid                      主控設(shè)置pid參數(shù)到寄存器里
2 I' f$ o: u: O3 T, M- D0 P5 \
控制相關(guān)
get_master_ctl_cmd                     獲取內(nèi)存中控制位數(shù)據(jù)
set_master_ctl_cmd                     設(shè)置控制數(shù)據(jù)到內(nèi)存里
- S9 B* f' @! ?: m% T
關(guān)節(jié)模塊
主要提供了和舵機(jī)ID的綁定與獲取函數(shù),關(guān)節(jié)角度與舵機(jī)位置之間的相互轉(zhuǎn)換功能,關(guān)節(jié)運(yùn)動(dòng)數(shù)據(jù)的生成與位置更新等功能。
$ p9 \* e6 e, S; d* Z1 T
腿部模塊
腿部模塊的創(chuàng)建需要先創(chuàng)建好關(guān)節(jié)模塊然后在腿部模塊里初始化各個(gè)關(guān)節(jié)。
leg_set_attribute                            設(shè)置小腿,大腿長(zhǎng)度,踝到重心長(zhǎng)度等屬性。
leg_get_h_step_len                         獲取當(dāng)前腿的高度和步長(zhǎng)。
leg_get_barycnter_off                     獲取當(dāng)前腿的重心偏移距離
leg_stretch                                    此函數(shù)提供了對(duì)腿部上下前后和重心移動(dòng)等運(yùn)動(dòng)
leg_d_foot_touch_refactor               根據(jù)陀螺儀反饋數(shù)據(jù)調(diào)整雙足支撐時(shí)身體姿態(tài)需要變化的關(guān)節(jié)角度
4 b4 W. z/ `2 B5 Y5 c9 b: [
整體應(yīng)用模塊
1.創(chuàng)建各個(gè)模塊
其中包括,與上位機(jī)的modbus總線創(chuàng)建,紅外遙控設(shè)備創(chuàng)建,舵機(jī)模塊,寄存器模塊,管模塊,腿部設(shè)備模塊,姿態(tài)模塊的創(chuàng)建
+ Y" j8 C1 W9 w1 y* Y. s
2模塊的注冊(cè)與初始化
需要用到的模塊創(chuàng)建后依次注冊(cè)到機(jī)器人robot_api_dev中,然后按照順序依次完成初始化工作。
feet_robot_sms_dev_init                                      初始化舵機(jī)設(shè)備
robot_regs_data_read_joint_init_param        
robot_leg_create                                                 在寄存器中讀取關(guān)節(jié)初始參數(shù)后創(chuàng)建腿部模塊
robot_leg_set_attribute                                        設(shè)置大腿小腿長(zhǎng)度和踝到重心的距離
feet_robot_serch_dev                                          對(duì)舵機(jī)模塊進(jìn)行在線舵機(jī)搜索
robot_regs_data_set_joint_postion_last                 設(shè)置舵機(jī)位置數(shù)據(jù)到寄存器中

1 q, R" j  e& [9 y
3業(yè)務(wù)邏輯
有兩個(gè)任務(wù)處理業(yè)務(wù)邏輯,一個(gè)是主應(yīng)用用于輪詢處理函數(shù),一個(gè)是運(yùn)動(dòng)執(zhí)行任務(wù),該任務(wù)負(fù)責(zé)接收運(yùn)動(dòng)隊(duì)列并執(zhí)行運(yùn)動(dòng)控制
上面是主任務(wù)需要處理的函數(shù)
robot_regs_data_get_joint_move_cmd                        在寄存器內(nèi)存中獲取運(yùn)動(dòng)標(biāo)志
robot_regs_data_joint_move_cmd_handle                   如果運(yùn)動(dòng)標(biāo)志置位進(jìn)行解析運(yùn)動(dòng)數(shù)據(jù)并發(fā)送                                                                                                                                                         到運(yùn)動(dòng)隊(duì)列
robot_servo_monitoring                                             每五秒進(jìn)行一次舵機(jī)溫度檢查
robot_pid_controller_loop                                           輪詢上位機(jī)是否打開pid控制,如果打開進(jìn)行                                                                                                                                                         pid參數(shù)設(shè)置
robot_wait_move_fin_loop                                         運(yùn)動(dòng)等待處理輪詢函數(shù)
* x' d* `% v  h# j3 h
上面是運(yùn)行執(zhí)行任務(wù)處理邏輯
joint_move_data_recv_mq                                         阻塞接收運(yùn)動(dòng)隊(duì)列數(shù)據(jù)
robot_regs_data_set_move_id                                    運(yùn)動(dòng)id寫入到寄存器
robot_regs_data_joint_move_refactor                         姿態(tài)控制打開時(shí)進(jìn)行關(guān)節(jié)角度微調(diào)
robot_move_wait_timer_set_period                             根據(jù)運(yùn)動(dòng)隊(duì)列參數(shù)設(shè)定下一次運(yùn)動(dòng)等待時(shí)間
robot_joint_update_pos                                             更新舵機(jī)位置
robot_regs_data_joint_move_exeute                           開始執(zhí)行運(yùn)動(dòng)

. m+ |0 B* B2 D5 Y: z
5.4 遙控調(diào)試功能
紅外遙控框架包括解碼層,紅外中間件和紅外驅(qū)動(dòng)層,中間件提供了紅外事件回調(diào)

+ E& `1 I* Z$ ]4 t5 h: ]6 |
注冊(cè)好時(shí)間回調(diào)后,有按鍵按下后進(jìn)行回調(diào)到處理函數(shù),上面圖中對(duì)按鍵進(jìn)行了對(duì)應(yīng)的運(yùn)動(dòng)控制
+                  雙腿支撐身體上升30mm
-                   雙腿支撐身體下降30mm
←                 身體向左重心移動(dòng) 30mm
→                 身體向右重心移動(dòng)30mm
0                   雙腿向前移動(dòng)30mm
C                   雙腿向后移動(dòng)30mm
1                  左腿伸展30mm
4                  左腿彎曲30mm
2                  右腿伸展30mm
5                  有腿彎曲30mm
7                  加速運(yùn)動(dòng)200mm/s
8                  加速運(yùn)動(dòng)200mm/s

" }' j% P- i- z8 E1 k- M) m' M
- ^9 Y/ K5 `$ W3 ~

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有賬號(hào)?注冊(cè)會(huì)員

×
5#
發(fā)表于 2021-12-24 15:05:53 | 只看該作者
大牛
6#
 樓主| 發(fā)表于 2021-12-24 15:59:16 | 只看該作者
本帖最后由 1五湖四海1 于 2021-12-24 21:51 編輯 2 e. v+ y, H+ N

: _2 w, q; l4 ~  h3 Z# |( X) h, `足底著地檢測(cè)傳感器
2 n* M0 M- Q6 t* n6 @& J& m/ {( {/ b( m! E4 u
一共采用了8個(gè)tof 時(shí)間飛行測(cè)距傳感器型號(hào)是st的vl530。
下面是編寫的上位機(jī)測(cè)量模塊和實(shí)際安裝位置。

: y4 }4 B* ~3 h7 g8 c. a8 i* T! l+ e7 v/ |8 _
6 r/ O, O" t4 X# l; {! T% \; j" B, `
: U5 J& m  \3 @5 G: _
這八個(gè)tof模塊初始化比較耗時(shí)放在了樹莓派端進(jìn)行采集,tof vl530類中初始化tof的步驟是,首先使能第一個(gè)tof傳感器電源重新配置tof模塊地址完成初始化,然后基于這個(gè)地址加一作為下一個(gè)tof模塊地址,然后使能第二個(gè)tof模塊電源進(jìn)行初始化,后面的模塊安裝上面的方法一次初始化tof模塊。tof模塊I2C物理通訊接口采用樹莓派的BCM2835庫(kù)進(jìn)行讀寫控制。
. i  w2 I; C! |9 ?/ }

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有賬號(hào)?注冊(cè)會(huì)員

×
7#
發(fā)表于 2021-12-25 11:05:01 | 只看該作者
可以6 `1 l4 L5 i/ r/ R* l3 O4 R+ `
8#
 樓主| 發(fā)表于 2021-12-27 14:41:45 | 只看該作者
1五湖四海1 發(fā)表于 2021-12-24 15:597 K. G( m  T2 l
足底著地檢測(cè)傳感器7 B9 h7 x' \+ M9 J1 Q' S
. x& n8 e! N; ?5 N' W, }; \
一共采用了8個(gè)tof 時(shí)間飛行測(cè)距傳感器型號(hào)是st的vl530。下面是編寫的上位機(jī)測(cè)量模塊 ...

/ E4 D9 W0 _0 H: T6 W8 J0 e7 I: k3 K$ _; J3 p3 m
樹莓派開發(fā)板獲取8個(gè) tof vl530傳感器代碼- o$ Q% S+ {* F8 }

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有賬號(hào)?注冊(cè)會(huì)員

×
9#
發(fā)表于 2023-8-29 10:05:06 | 只看該作者
樓主大牛 能否加個(gè)好友qq2074772922
10#
發(fā)表于 2023-10-19 14:33:36 | 只看該作者

本版積分規(guī)則

Archiver|手機(jī)版|小黑屋|機(jī)械社區(qū) ( 京ICP備10217105號(hào)-1,京ICP證050210號(hào),浙公網(wǎng)安備33038202004372號(hào) )

GMT+8, 2025-7-6 09:46 , Processed in 0.086633 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回復(fù) 返回頂部 返回列表