freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

px4pixhawk程序研究筆記-資料下載頁(yè)

2025-06-22 22:57本頁(yè)面
  

【正文】 個(gè)馬達(dá)的控制輸出。具體在某種幾何形狀的飛行器中,某個(gè)電機(jī)的混控參數(shù),則是直接在這個(gè)“.cpp”文件中,“.mix”文件只是選擇機(jī)型。同樣,具體對(duì)“M:”開(kāi)頭行的使用,則是在/ src / modules / systemlib / mixer / 。自定義應(yīng)用程序參考鏈接:步驟一:文件設(shè)置從Github上下載源文件,鏈接:。將工程導(dǎo)入PX4 Eclippse中,導(dǎo)入方法參考鏈接:make archives , 當(dāng)子模塊更改或者Nuttx配置更改過(guò)后,需要進(jìn)行這一步。一般情況下有版本遷移或者更新后都要進(jìn)行這一步。在本地硬盤的“Firmware/src/modules”目錄下新建一個(gè)自己命名的文件夾,如“px4_simple_app”,在這個(gè)文件夾中創(chuàng)建一個(gè)新的名字為“”的文件(注意,),在該文件中添加如下代碼:MODULE_COMMAND = px4_simple_appSRCS = 步驟二:編寫應(yīng)用程序 在第一步創(chuàng)建的文件夾中創(chuàng)建一個(gè)名為“”的文件,向其中添加如下代碼(注意,Nuttx系統(tǒng)下的模塊的主函數(shù)名字都是以“_main”開(kāi)始的,而調(diào)用的時(shí)候,不加_main,而是直接用“px4_simple_app”):/** * @file * Minimal application example for PX4 autopilot. */include nuttx/include include __EXPORT int px4_simple_app_main(int argc, char *argv[])。int px4_simple_app_main(int argc, char *argv[]){ printf(Hello Sky!\n)。 return OK。}步驟三:在NuttShell中注冊(cè)該程序并編譯在Firmware/makefiles/:MODULES += modules/px4_simple_app 執(zhí)行如下操作:make cleanmake px4fmuv2_default 如果沒(méi)有新的程序被注冊(cè),只執(zhí)行make px4fmuv2_default即可,這樣更快一點(diǎn)。步驟四:上傳并測(cè)試程序 執(zhí)行上傳命令:make upload px4fmuv2_default 在你重啟板子之前,界面會(huì)返回如下信息:Generating /Users/user/src/Firmware/Images/Loaded firmware for 5,0, waiting for the bootloader... 重啟板子,開(kāi)始上傳,會(huì)返回如下信息:Found board 5,0 on /dev/erase...program...verify...done, rebooting. 現(xiàn)在切換到NSH連接,在shell中單擊回車鍵,會(huì)返回如下界面:nsh 輸入help并按回車鍵,彈出如下信息:nsh help help usage: help [v] [cmd] [ df kill mkfifo ps sleep ? echo losetup mkrd pwd test cat exec ls mh rm umount cd exit mb mount rmdir unset cp free mkdir mv set usleep dd help mkfatfs mw sh xd Builtin Apps: reboot perf top .. px4_simple_app .. sercon serdis可以發(fā)現(xiàn)px4_simple_app已經(jīng)出現(xiàn)在可用內(nèi)建程序列表中,輸入px4_simple_app并按回車,出現(xiàn)如下信息:nsh px4_simple_appHello Sky!這個(gè)程序運(yùn)行成功,下一步可以將其進(jìn)一步擴(kuò)充。步驟五:訂閱傳感器信息為了做些有用的事,我們需要將程序修改一下,使它可以訂閱一些輸入數(shù)據(jù),并能發(fā)布一些輸出數(shù)據(jù)。注意,PX4平臺(tái)的真實(shí)硬件抽象概念的優(yōu)勢(shì)也在此處體現(xiàn):我們不需要與底層硬件驅(qū)動(dòng)打交道,當(dāng)電路板或者傳感器改變時(shí),我們的應(yīng)用程序不需要做任何改動(dòng)。在PX4中,應(yīng)用程序間通信通道成為topic(本文“進(jìn)程間通信”章節(jié)有詳細(xì)講述),此處例程,我們使用名為“sensor_bined”的topic,它包含了整個(gè)系統(tǒng)的傳感器信息,并且是同步的。訂閱一個(gè)topic是非常迅速并且簡(jiǎn)潔的:include uORB/topics/..int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_bined))。其中,“sensor_sub_fd”是一個(gè)文件描述符,可以用來(lái)非常高效地實(shí)現(xiàn)對(duì)新數(shù)據(jù)的阻塞式等待。當(dāng)前線程進(jìn)入休眠狀態(tài),當(dāng)新數(shù)據(jù)可用時(shí),它會(huì)自動(dòng)地被調(diào)度程序喚醒,因此在數(shù)據(jù)等待時(shí),不會(huì)占用任何CPU資源。為實(shí)現(xiàn)這個(gè)功能,我們用到了poll()系統(tǒng)函數(shù)(這個(gè)函數(shù)在Linux操作系統(tǒng)中很常用)。添加完poll()函數(shù)后整個(gè)程序如下:編譯并進(jìn)行測(cè)試,首先打開(kāi)uorb程序,這個(gè)程序可能已經(jīng)啟動(dòng)了,但是再次啟動(dòng)它不會(huì)產(chǎn)生問(wèn)題。uorb start啟動(dòng)傳感器:sh /etc/啟動(dòng)自定義程序(注意此處與上面的不同,結(jié)尾添加了一個(gè)”amp?!狈希簆x4_simple_app amp。二者的區(qū)別在于uorb和傳感器程序都似乎Daemon(守護(hù)程序,或稱后天程序)。這使得即使我們忘了加“amp?!保覀円廊豢梢詥?dòng)、停止它們,而不會(huì)失去對(duì)NuttShell的控制。自定義的程序現(xiàn)在就好快速輸出一堆傳感器信息:[px4_simple_app] Accelerometer: [px4_simple_app] Accelerometer: [px4_simple_app] Accelerometer: [px4_simple_app] Accelerometer: [px4_simple_app] Accelerometer: [px4_simple_app] Accelerometer: 因?yàn)樗皇且粋€(gè)daemon,我們沒(méi)有辦法去停止它。要么讓它繼續(xù)運(yùn)行,要么輸入以下命令重啟飛控:reboot或者按飛控板上的復(fù)位按鈕。本文后面的章節(jié)會(huì)講如何將一個(gè)程序轉(zhuǎn)換為一個(gè)daemon。步驟六:限定訂閱頻率測(cè)試程序會(huì)將傳感器信息以數(shù)據(jù)洪流般淹沒(méi)窗口,事實(shí)上我們往往不需要全速率的數(shù)據(jù),要跟上全速率的數(shù)據(jù)往往會(huì)將整個(gè)系統(tǒng)變慢。將數(shù)據(jù)速率改為1Hz只需添加如下行:orb_set_interval(sensor_sub_fd, 1000)。對(duì)于我們的程序,在下面的這一行(大約第55行)下面添加該行即可:/* subscribe to sensor_bined topic */int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_bined))?,F(xiàn)在控制臺(tái)就會(huì)以1Hz的速率輸出傳感器信息。步驟七:發(fā)布信息要使用計(jì)算后的輸出,下一步就是發(fā)布結(jié)果。如果我們使用一個(gè)已知mavlink程序會(huì)將其傳遞到地面站軟件的的topic,我們甚至可以在地面站中查看結(jié)果。為達(dá)到此目的,讓我們攔截attitude(姿態(tài))topic。接口很簡(jiǎn)單:初始化將要發(fā)布的topic結(jié)構(gòu)體,并通告它。include uORB/topics//* advertise attitude topic */struct vehicle_attitude_s att。memset(amp。att, 0, sizeof(att))。int att_pub_fd = orb_advertise(ORB_ID(vehicle_attitude), amp。att)。在主循環(huán)中,當(dāng)信息準(zhǔn)備好后發(fā)布它:orb_publish(ORB_ID(vehicle_attitude), att_pub_fd, amp。att)。修改后的完整程序如下:運(yùn)行最終的程序,這次需要先啟動(dòng)一些別的程序:uorb startsh /etc/mavlink start d /dev/ttyS1 b 115200px4_simple_app amp。如果你啟動(dòng)地面站軟件QGroundControl或者M(jìn)ission Planner,你可以實(shí)時(shí)觀測(cè)傳感器信息的曲線圖(Main Menu:Main Widget Realtime Plot),這些信息正是你的程序發(fā)布的。本章節(jié)包含了用戶自定義PX4飛控程序的所有要點(diǎn)。注意飛控中所有topic的列表鏈接如下:你也可以在工程中“/src/modules/uORB/topics”目錄下找到一系列頭文件,這些頭文件就包含了所有的topic。創(chuàng)建Daemon程序(后臺(tái)程序)參考鏈接:在Unix和其他多任務(wù)操作系統(tǒng)中,daemon(/?de?m?n/ or /?di?m?n/)程序是指作為一個(gè)后臺(tái)進(jìn)程運(yùn)行的計(jì)算機(jī)程序,而不是由用戶直接控制的程序。daemon概念的好處是它不需被用戶或者shell發(fā)送到后臺(tái)就能被啟動(dòng),并且當(dāng)它在運(yùn)行時(shí)可以通過(guò)shell查詢它的狀態(tài),它也可以被終止。步驟一:創(chuàng)建一個(gè)小的普通程序__EXPORT int px4_daemon_app_main(int argc, char *argv[])。int px4_daemon_app_main(int argc, char *argv[]){ while (true) { warnx(Hello Daemon!\n)。 sleep(1)。 } return 0。}這個(gè)程序的問(wèn)題很明顯:如果啟動(dòng)它時(shí)沒(méi)有加“amp?!?,它會(huì)阻塞shell(Nuttx不會(huì)阻塞,支持Ctrl + Z /fg /bg)。為了規(guī)避這個(gè)問(wèn)題,下面的部分會(huì)將這個(gè)程序轉(zhuǎn)換為一個(gè)daemon。步驟二:創(chuàng)建一個(gè)Daemon控制函數(shù)主函數(shù)現(xiàn)在由一個(gè)daemon控制函數(shù)代替,主函數(shù)中的原來(lái)的部分現(xiàn)在有一個(gè)后臺(tái)任務(wù)(task)/線程(thread)來(lái)代替。include systemlib/..__EXPORT int px4_daemon_app_main(int argc, char *argv[])。..int mavlink_thread_main(int argc, char *argv[])。..int mavlink_thread_main(int argc, char *argv[]){ while (true) { warnx(Hello Daemon!\n)。 sleep(1)。 if (thread_should_exit) break。 } return 0。}..int px4_daemon_app_main(int argc, char *argv[]){ if (argc 1) usage(missing mand)。 if (!strcmp(argv[1], start)) { if (thread_running) { warnx(daemon already running\n)。 /* this is not an error */ exit(0)。 } thread_should_exit = false。 daemon_task = task_spawn_cmd(daemon, SCHED_RR, SCHED_PRIORITY_DEFAULT, 4096, px4_daemon_thread_main, (argv) ? (const char **)amp。argv[2] : (const char **)NULL)。 thread_running = true。 exit(0)。 } usage(unrecognized mand)。 exit(1)。}這個(gè)會(huì)啟動(dòng)一個(gè)擁有4096個(gè)字節(jié)的棧,并將非daemon特殊指令行選項(xiàng)傳遞給后臺(tái)主函數(shù)。一個(gè)典型的調(diào)用如下:px4_daemon_app start上述代碼并不報(bào)告一個(gè)狀態(tài),并且無(wú)法防止程序被多次啟動(dòng)。步驟三:添加終止/狀態(tài)命令和安全措施如下程序添加了終止和狀態(tài)命令以及安全措施:/** * @file * daemon application example for PX4 autopilot * * @author Example User mail@ */160
點(diǎn)擊復(fù)制文檔內(nèi)容
數(shù)學(xué)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1