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

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

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

RT-Thread如何使用串口或者無(wú)線和ROS連接

STM32單片機(jī) ? 來(lái)源:STM32單片機(jī) ? 2020-05-29 17:05 ? 次閱讀

引言

這篇文檔主要介紹 RT-Thread 如何使用串口或者無(wú)線和 ROS 連接,會(huì)包含這么些內(nèi)容:

第一部分:ROS 環(huán)境搭建

第二部分:RT-Thread rosserial 軟件包

第二部分:RT-Thread 添加 USART2 和 PWM

第三部分:RT-Thread 使用 ESP8266 AT 固件聯(lián)網(wǎng)

這里先介紹一下什么是 ROS?為什么要和 ROS 連接?

機(jī)器人操作系統(tǒng) ROS (Robots Operating System) 最早是斯坦福大學(xué)的一個(gè)軟件框架,現(xiàn)在不管是工業(yè)機(jī)器人,還是娛樂(lè)用的機(jī)器人都運(yùn)行著 ROS。

圖片來(lái)源網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系刪除

一個(gè)機(jī)器人通常有很多個(gè)部件、傳感器,為了保證機(jī)器人不會(huì)因?yàn)槟骋粋€(gè)傳感器故障,導(dǎo)致整個(gè)系統(tǒng)癱瘓,所以采用了分布式的節(jié)點(diǎn),利用不同節(jié)點(diǎn)之間的通訊收集傳感器數(shù)據(jù)和控制指令,這篇文檔后面會(huì)使用到的通訊協(xié)議就是rosserial。 和 ROS 連接的好處在于,一方面由 ROS 管理各個(gè)機(jī)器人節(jié)點(diǎn)更穩(wěn)定,另一方面 ROS 現(xiàn)在已經(jīng)有了非常多成熟的軟件包,使用 ROS 就可以非常方便的為自己的機(jī)器人添加攝像頭圖像識(shí)別、激光雷達(dá)建圖導(dǎo)航等高級(jí)功能。 不過(guò)這篇文檔只會(huì)涉及 RT-Thread 和 ROS 建立基本的連接,實(shí)現(xiàn)小車的運(yùn)動(dòng)控制,之后可能會(huì)有后續(xù)文檔介紹如何連接激光雷達(dá)建圖,并進(jìn)行全局路徑規(guī)劃。

這篇文章假定大家都已經(jīng)會(huì)用 RT-Thread 的 env 工具下載軟件包,生成項(xiàng)目上傳固件到 stm32 上,并且熟悉 Ubuntu 的基本使用。

1 ROS 簡(jiǎn)介

這里的開(kāi)發(fā)環(huán)境搭建其實(shí)是需要搭建 2 份,一份是小車上的 ARM 開(kāi)發(fā)板 (樹(shù)莓派,NanoPi 什么的),另一個(gè)則是自己的電腦,因?yàn)槲覀兿M央娔X作為 ROS 從節(jié)點(diǎn),連接到小車上的 ROS 主節(jié)點(diǎn),不過(guò)開(kāi)發(fā)板和電腦的 ROS 安裝是一模一樣的。

既然要和 ROS 連接,那么首先就得要有一個(gè)正常運(yùn)行的 ROS。安裝 ROS 其實(shí)非常簡(jiǎn)單,這里推薦使用 Ubuntu 18 (開(kāi)發(fā)板推薦系統(tǒng)用 Armbian),因?yàn)楣俜綄?duì) Ubuntu 的支持優(yōu)先級(jí)是最高的,安裝教程也可以參照官網(wǎng):http://wiki.ros.org/melodic/Installation/Ubuntu 只需要輸入下面的 4 行命令,就在 Ubuntu 上裝好了 ROS。

1sudosh-c'echo"debhttps://mirror.tuna.tsinghua.edu.cn/ros/ubuntu$(lsb_release-sc)main">/etc/apt/sources.list.d/ros-latest.list' 2sudoapt-keyadv--keyserver'hkp://keyserver.ubuntu.com:80'--recv-keyC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 3sudoaptupdate 4sudoaptinstallros-melodic-ros-base上面我使用了清華大學(xué)的鏡像源,這樣從國(guó)內(nèi)下載 ROS 會(huì)快很多,而且我只安裝了 ROS 的基本軟件包,沒(méi)有安裝圖形化軟件包 gviz,gazebo 什么的,因?yàn)楹竺嬉矝](méi)有用到。

1.2 ROS 環(huán)境初始化

ROS 安裝好之后還需要進(jìn)行初始化,不過(guò)也是只有短短幾行命令:

1sudorosdepinit 2rosdepupdate 3 4echo"source/opt/ros/melodic/setup.bash">>~/.bashrc 5source~/.bashrc 1.3 啟動(dòng) ROS 啟動(dòng) ROS 的話我們需要確保它是常駐后臺(tái)運(yùn)行的,所以我們可以使用 tmux:1roscore

在 tmux 里啟動(dòng)了 ROS 主節(jié)點(diǎn)后,我們就可以 Ctrl + B D 退出了,而 ROS 主節(jié)點(diǎn)依舊在后臺(tái)運(yùn)行。

1.4 參考文獻(xiàn)

Armbian:https://www.armbian.com/

ROS Melodic 安裝//wiki.ros.org/melodic/Installation/Ubuntu

2 RT-Thread 串口連接 ROS

這一部分會(huì)介紹如何使用串口將運(yùn)行著 RT-Thread 的 STM32 開(kāi)發(fā)板和運(yùn)行著 ROS 的 ARM 開(kāi)發(fā)板連接,看起來(lái)差不多就是這樣。

這里說(shuō)明一下不同開(kāi)發(fā)板的分工,STM32 運(yùn)行著 RT-Thread 負(fù)責(zé)控制電機(jī),接收傳感器信息;ARM 運(yùn)行著 ROS 負(fù)責(zé)進(jìn)行全局控制,例如給小車發(fā)出前進(jìn)的指令。

2.1 RT-Thread 配置

首先我們需要打開(kāi) usart2,因?yàn)?usart1 被 msh 使用了,保留作為調(diào)試還是挺方便的。

在 CubeMX 里我打開(kāi)了 USART2,另外還打開(kāi)了 4 路 PWM,因?yàn)槲液竺媸褂昧?2 個(gè)電機(jī),每個(gè)電機(jī)需要 2 路 PWM 分別控制前進(jìn)和后退。 接下來(lái)還需要在 menuconfig 里面打開(kāi)對(duì)應(yīng)的選項(xiàng),考慮到有的開(kāi)發(fā)板默認(rèn)的 bsp 可能沒(méi)有這些選項(xiàng),可以修改 board/Kconfig 添加下面的內(nèi)容。串口的配置:

1menuconfigBSP_USING_UART 2bool"EnableUART" 3defaulty 4selectRT_USING_SERIAL 5ifBSP_USING_UART 6configBSP_USING_UART1 7bool"EnableUART1" 8defaulty 9 10configBSP_UART1_RX_USING_DMA 11bool"EnableUART1RXDMA" 12dependsonBSP_USING_UART1&&RT_SERIAL_USING_DMA 13defaultn 14 15configBSP_USING_UART2 16bool"EnableUART2" 17defaulty 18 19configBSP_UART2_RX_USING_DMA 20bool"EnableUART2RXDMA" 21dependsonBSP_USING_UART2&&RT_SERIAL_USING_DMA 22defaultn 23endifPWM 的配置:1menuconfigBSP_USING_PWM 2bool"Enablepwm" 3defaultn 4selectRT_USING_PWM 5ifBSP_USING_PWM 6menuconfigBSP_USING_PWM3 7bool"Enabletimer3outputpwm" 8defaultn 9ifBSP_USING_PWM3 10configBSP_USING_PWM3_CH1 11bool"EnablePWM3channel1" 12defaultn 13configBSP_USING_PWM3_CH2 14bool"EnablePWM3channel2" 15defaultn 16configBSP_USING_PWM3_CH3 17bool"EnablePWM3channel3" 18defaultn 19configBSP_USING_PWM3_CH4 20bool"EnablePWM3channel4" 21defaultn 22endif 23endif

這樣我們?cè)?env 下就可以看到有對(duì)應(yīng)的配置了,

除此之外,我們還需要選擇 rosserial 軟件包:

可以看到上面默認(rèn)的串口就是 USART2,這樣我們就可以生成對(duì)應(yīng)的工程了:

1pkgs--update 2scons--target=mdk5-s如果我們打開(kāi) Keil 項(xiàng)目,首先需要把 main.c 修改為 main.cpp,因?yàn)?rosserial 很多數(shù)據(jù)格式的定義都是用 C++ 寫(xiě)的,所以如果要使用 rosserial 庫(kù),我們先得把后綴改為 cpp,這樣 Keil 就會(huì)用 C++ 編譯器編譯。

下面是 main.cpp 的內(nèi)容,其實(shí)就是初始化了電機(jī),然后發(fā)布了 2 個(gè)話題 (topic),一個(gè)是 /vel_x 告訴 ROS 當(dāng)前小車的速度,一個(gè)是 /turn_bias 告訴 ROS 當(dāng)前小車的旋轉(zhuǎn)速度。同時(shí)又訂閱了一個(gè)話題 /cmd_vel,用來(lái)接收從 ROS 發(fā)出的控制指令。 代碼不是特別長(zhǎng),我也添加了一些注釋,所以這里就不一行行分析了。

1#include 2#include 3#include 4 5#include 6#include 7#include 8#include"motors.h" 9 10ros::NodeHandlenh; 11MotorControlmtr(1,2,3,4);//Motor 12 13boolmsgRecieved=false; 14floatvelX=0,turnBias=0; 15charstat_log[200]; 16 17//接收到命令時(shí)的回調(diào)函數(shù) 18voidvelCB(constgeometry_msgs::Twist&twist_msg) 19{ 20velX=twist_msg.linear.x; 21turnBias=twist_msg.angular.z; 22msgRecieved=true; 23} 24 25//Subscriber 26ros::Subscribersub("cmd_vel",velCB); 27 28//Publisher 29std_msgs::Float64velX_tmp; 30std_msgs::Float64turnBias_tmp; 31ros::Publisherxv("vel_x",&velX_tmp); 32ros::Publisherxt("turn_bias",&turnBias_tmp); 33 34staticvoidrosserial_thread_entry(void*parameter) 35{ 36//Initmotors,specif>ytherespectivemotorpins 37mtr.initMotors(); 38 39//Initnode> 40nh.initNode(); 41 42//訂閱了一個(gè)話題/cmd_vel接收控制指令 43nh.subscribe(sub); 44 45//發(fā)布了一個(gè)話題/vel_x告訴ROS小車速度 46nh.advertise(xv); 47 48//發(fā)布了一個(gè)話題/turn_bias告訴ROS小車的旋轉(zhuǎn)角速度 49nh.advertise(xt); 50 51mtr.stopMotors(); 52 53while(1) 54{ 55//如果接收到了控制指令 56if(msgRecieved) 57{ 58velX*=mtr.maxSpd; 59mtr.moveBot(velX,turnBias); 60msgRecieved=false; 61} 62 63velX_tmp.data=velX; 64turnBias_tmp.data=turnBias/mtr.turnFactor; 65 66//更新話題內(nèi)容 67xv.publish(&velX_tmp); 68xt.publish(&turnBias_tmp); 69 70nh.spinOnce(); 71} 72} 73 74intmain(void) 75{ 76//啟動(dòng)一個(gè)線程用來(lái)和ROS通信 77rt_thread_tthread=rt_thread_create("rosserial",rosserial_thread_entry,RT_NULL,2048,8,10); 78if(thread!=RT_NULL) 79{ 80rt_thread_startup(thread); 81rt_kprintf("[rosserial]Newthreadrosserial "); 82} 83else 84{ 85rt_kprintf("[rosserial]Failedtocreatethreadrosserial "); 86} 87returnRT_EOK; 88}

另外還有對(duì)應(yīng)的電機(jī)控制的代碼,不過(guò)這個(gè)大家的小車不同,驅(qū)動(dòng)應(yīng)當(dāng)也不一樣,我這里由于小車電機(jī)上沒(méi)有編碼器,所以全部是開(kāi)環(huán)控制的。

motors.h

1#include 2 3classMotorControl{ 4public: 5//Var 6rt_uint32_tmaxSpd; 7floatmoveFactor; 8floatturnFactor; 9 10MotorControl(intfl_for,intfl_back, 11intfr_for,intfr_back); 12voidinitMotors(); 13voidrotateBot(intdir,floatspd); 14voidmoveBot(floatspd,floatbias); 15voidstopMotors(); 16private: 17structrt_device_pwm*pwm_dev; 18//Thepins 19intfl_for; 20intfl_back; 21intfr_for; 22intfr_back; 23intbl_for; 24intbl_back; 25intbr_for; 26intbr_back; 27}; motors.c1#include 2#include 3#include"motors.h" 4 5#definePWM_DEV_NAME"pwm3" 6 7MotorControl::MotorControl(intfl_for,intfl_back, 8intfr_for,intfr_back) 9{ 10this->maxSpd=500000; 11this->moveFactor=1.0; 12this->turnFactor=3.0; 13 14this->fl_for=fl_for; 15this->fl_back=fl_back; 16 17this->fr_for=fr_for; 18this->fr_back=fr_back; 19} 20 21voidMotorControl::initMotors(){ 22/*查找設(shè)備*/ 23this->pwm_dev=(structrt_device_pwm*)rt_device_find(PWM_DEV_NAME); 24if(pwm_dev==RT_NULL) 25{ 26rt_kprintf("pwmsamplerunfailed!can'tfind%sdevice! ",PWM_DEV_NAME); 27} 28rt_kprintf("pwmfound%sdevice! ",PWM_DEV_NAME); 29rt_pwm_set(pwm_dev,fl_for,maxSpd,0); 30rt_pwm_enable(pwm_dev,fl_for); 31 32rt_pwm_set(pwm_dev,fl_back,maxSpd,0); 33rt_pwm_enable(pwm_dev,fl_back); 34 35rt_pwm_set(pwm_dev,fr_for,maxSpd,0); 36rt_pwm_enable(pwm_dev,fr_for); 37 38rt_pwm_set(pwm_dev,fr_back,maxSpd,0); 39rt_pwm_enable(pwm_dev,fr_back); 40} 41 42//小車運(yùn)動(dòng) 43voidMotorControl::moveBot(floatspd,floatbias){ 44floatsL=spd*maxSpd; 45floatsR=spd*maxSpd; 46intdir=(spd>0)?1:0; 47 48if(bias!=0) 49{ 50rotateBot((bias>0)?1:0,bias); 51return; 52} 53 54if(sLmoveFactor*maxSpd) 59{ 60sL=moveFactor*maxSpd; 61} 62 63if(sRmoveFactor*maxSpd) 68{ 69sR=moveFactor*maxSpd; 70} 71 72if(sL

2.2 ROS 配置

我們把上面 RT-Thread 的固件傳到板子上以后,可以用一個(gè) USB-TTL 一邊和 STM32 控制板的 USART2 連接,另一邊插到 ARM 控制板的 USB 口,接下來(lái)就可以建立連接了,在 ARM 板上輸入命令:

1$rosrunrosserial_pythonserial_node.py/dev/ttyUSB0如果看到下面的輸出,那就成功建立連接了:1tpl@nanopineoplus2:~$rosrunrosserial_pythonserial_node.py/dev/ttyUSB0 2[INFO][1567239474.258919]:ROSSerialPythonNode 3[INFO][1567239474.288435]:Connectingto/dev/ttyUSB0at57600baud 4[INFO][1567239476.425646]:Requestingtopics... 5[INFO][1567239476.464336]:Note:publishbuffersizeis512bytes 6[INFO][1567239476.471349]:Setuppublisheronvel_x[std_msgs/Float64] 7[INFO][1567239476.489881]:Setuppublisheronturn_bias[std_msgs/Float64] 8[INFO][1567239476.777573]:Note:subscribebuffersizeis512bytes 9[INFO][1567239476.785032]:Setupsubscriberoncmd_vel[geometry_msgs/Twist]

2.3 ROS 控制小車

既然已經(jīng)成功建立連接了,下一步就是寫(xiě)小車控制的代碼了。 我們先初始化一個(gè)工作區(qū)間:

1$mkdircatkin_workspace&&cdcatkin_workspace 2$catkin_init_workspace

接下來(lái)創(chuàng)建一個(gè)軟件包:

1$cdsrc 2$catkin_create_pkgmy_first_pkgrospy 這樣就會(huì)自動(dòng)在 src 目錄創(chuàng)建一個(gè) ROS 軟件包了。 我們?cè)?catkin_workspace/src/my_first_pkg/src 目錄下新建一個(gè)文件 ros_cmd_vel_pub.py:1#!/usr/bin/python 2 3importrospy 4fromgeometry_msgs.msgimportTwist 5frompynput.keyboardimportKey,Listener 6 7vel=Twist() 8vel.linear.x=0 9 10defon_press(key): 11 12try: 13if(key.char=='w'): 14print("Forward") 15vel.linear.x=0.8 16vel.angular.z=0 17 18if(key.char=='s'): 19print("Backward") 20vel.linear.x=-0.8 21vel.angular.z=0 22 23if(key.char=='a'): 24print("CounterClockwise") 25vel.linear.x=0 26vel.angular.z=-0.8 27 28if(key.char=='d'): 29print("Clockwise") 30vel.linear.x=0 31vel.angular.z=0.8 32 33returnFalse 34 35exceptAttributeError: 36print('specialkey{0}pressed'.format(key)) 37returnFalse 38 39defon_release(key): 40vel.linear.x=0 41vel.angular.z=0 42 43returnFalse 44 45#InitNode 46rospy.init_node('my_cmd_vel_publisher') 47pub=rospy.Publisher('cmd_vel',Twist,queue_size=10) 48 49#Setrate 50rate=rospy.Rate(10) 51 52listener=Listener(on_release=on_release,on_press=on_press) 53 54whilenotrospy.is_shutdown(): 55print(vel.linear.x) 56pub.publish(vel) 57vel.linear.x=0 58vel.angular.z=0 59rate.sleep() 60 61ifnotlistener.running: 62listener=Listener(on_release=on_release,on_press=on_press) 63listener.start() 這就是我們的 python 控制程序了,可以使用鍵盤(pán)的 wasd 控制小車前進(jìn)后退,順時(shí)針、逆時(shí)針旋轉(zhuǎn)。我們需要給它添加可執(zhí)行權(quán)限:1$chmodu+x./ros_cmd_vel_pub.py

這樣就可以編譯軟件包了,在 catkin_worspace 目錄下。

1$catkin_make 2$sourcedevel/setup.bash

我們終于就可以啟動(dòng)程序從電腦上控制小車運(yùn)動(dòng)了:

1rosrunmy_first_pkgros_cmd_vel_pub.py 可以看到用 ROS 實(shí)現(xiàn)小車控制其實(shí)代碼量并不算多,只需要在自己小車原有的代碼上發(fā)布一些話題,告訴 ROS 小車當(dāng)前的狀態(tài),并且訂閱一個(gè)話題接收 ROS 的控制指令就可以了。

2.4 參考文獻(xiàn)

ros-pibot:https://github.com/wuhanstudio/ros-pibot

3 RT-Thread 無(wú)線連接 ROS

3.1 rosserial 配置

其實(shí)無(wú)線連接和有線連接幾乎是一模一樣的,只不過(guò)是先用 ESP8266 使自己的控制板能連上網(wǎng),然后用 tcp 連接和 ROS 通信,關(guān)于 RT-Thread 使用 ESP8266 上網(wǎng)的教程可以參照官網(wǎng):https://www.rt-thread.org/document/site/application-note/components/at/an0014-at-client/,非常詳細(xì)了,我這里就不重復(fù)了。 確保開(kāi)發(fā)板有網(wǎng)絡(luò)連接后,我們就可以在 rosserial 里面配置為使用 tcp 連接:

我們只需要在上一部分的 main.cpp 里添加一行代碼:

1//設(shè)置ROS的IP端口號(hào) 2nh.getHardware()->setConnection("192.168.1.210",11411); 3 4//添加在節(jié)點(diǎn)初始化之前 5nh.initNode();開(kāi)發(fā)板就能通過(guò) tcp 連接和 ROS 通信了,非常方便。

3.2 ROS 配置

由于我們使用了 tcp 連接,所以 ROS 上自然也要開(kāi)啟一個(gè)服務(wù)器了,之前是使用的串口建立連接,現(xiàn)在就是使用 tcp 了:

1$rosrunrosserial_pythonserial_node.pytcp

其他的代碼完全不需要改變,這樣我們就實(shí)現(xiàn)了一個(gè) ROS 無(wú)線控制的小車了。

3.3 參考文獻(xiàn)

RT-Thread 使用 ESP8266 上網(wǎng):

https://www.rt-thread.org/document/site/application-note/components/at/an0014-at-client/

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

    關(guān)注

    14

    文章

    1555

    瀏覽量

    76558
  • 智能車
    +關(guān)注

    關(guān)注

    21

    文章

    404

    瀏覽量

    76979
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1291

    瀏覽量

    40176
  • ROS
    ROS
    +關(guān)注

    關(guān)注

    1

    文章

    278

    瀏覽量

    17019

原文標(biāo)題:RT-Thread+STM32實(shí)現(xiàn)智能車目標(biāo)識(shí)別系統(tǒng)的教程

文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread+STM32實(shí)現(xiàn)智能車目標(biāo)識(shí)別系統(tǒng)的教程

    RT-Thread+STM32實(shí)現(xiàn)智能車目標(biāo)識(shí)別系統(tǒng)的教程引言這篇文檔主要介紹 RT-Thread 如何使用串口或者無(wú)線
    發(fā)表于 05-20 16:55

    RT-Thread如何使用串口或者無(wú)線ROS連接

    這篇文檔主要介紹 RT-Thread 如何使用串口或者無(wú)線ROS 連接,會(huì)包含這么些內(nèi)容:第
    發(fā)表于 12-28 07:02

    RT-Thread+STM32實(shí)現(xiàn)智能車目標(biāo)識(shí)別系統(tǒng)的教程 精選資料推薦

    引言這篇文檔主要介紹 RT-Thread 如何使用串口或者無(wú)線ROS 連接,會(huì)包含這么些內(nèi)容
    發(fā)表于 08-23 06:47

    RT-Thread實(shí)時(shí)操作系統(tǒng)與ROS2是怎樣進(jìn)行通信的

    加工裝配之前,先在模擬環(huán)境確??梢詫?shí)現(xiàn)預(yù)期的運(yùn)動(dòng),也避免了不必要的試錯(cuò)過(guò)程。當(dāng)然,Gazebo 也可以和實(shí)際的機(jī)器人連接進(jìn)行聯(lián)合調(diào)試 :RT-ThreadROS那么問(wèn)題來(lái)了,前面提到 R
    發(fā)表于 04-01 11:38

    RT-Thread編程指南

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

    記錄——基于 RT-Thread 實(shí)現(xiàn) USB 虛擬串口

    記錄——基于 RT-Thread 實(shí)現(xiàn) USB 虛擬串口記錄一下我在正點(diǎn)原子 F429 阿波羅開(kāi)發(fā)板上實(shí)現(xiàn) USB 虛擬串口的過(guò)程,希望可以幫助到其他想要學(xué)習(xí) USB 的人。首先,我更新了一下
    發(fā)表于 12-02 17:21 ?6次下載
    記錄——基于 <b class='flag-5'>RT-Thread</b> 實(shí)現(xiàn) USB 虛擬<b class='flag-5'>串口</b>

    機(jī)器人操作系統(tǒng) (RO2) 和 RT-Thread 通信

    本文由RT-Thread官方論壇用戶@wuhanstudio發(fā)布:[鏈接],未經(jīng)授權(quán)禁止轉(zhuǎn)發(fā)MicroROS on RT-Thread最近剛好總結(jié)了一下 ROS1 和 ROS2 在
    發(fā)表于 01-25 17:39 ?2次下載
    機(jī)器人操作系統(tǒng) (RO2) 和 <b class='flag-5'>RT-Thread</b> 通信

    RT-Thread全球技術(shù)大會(huì):Kconfig在RT-Thread中的工作機(jī)制

    RT-Thread全球技術(shù)大會(huì):Kconfig在RT-Thread中的工作機(jī)制 ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 14:49 ?1545次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會(huì):Kconfig在<b class='flag-5'>RT-Thread</b>中的工作機(jī)制

    RT-Thread全球技術(shù)大會(huì):RT-Thread測(cè)試用例集合案例

    RT-Thread全球技術(shù)大會(huì):RT-Thread測(cè)試用例集合案例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:34 ?2105次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會(huì):<b class='flag-5'>RT-Thread</b>測(cè)試用例集合案例

    RT-Thread學(xué)習(xí)筆記 RT-Thread的架構(gòu)概述

    RT-Thread 簡(jiǎn)介 作為一名 RTOS 的初學(xué)者,也許你對(duì) RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會(huì)逐漸發(fā)現(xiàn) RT-Thread 的魅力和它相較于其他同類型 RTOS
    的頭像 發(fā)表于 07-09 11:27 ?4559次閱讀
    <b class='flag-5'>RT-Thread</b>學(xué)習(xí)筆記 <b class='flag-5'>RT-Thread</b>的架構(gòu)概述

    RT-Thread文檔_RT-Thread 簡(jiǎn)介

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

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發(fā)表于 02-22 18:23 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南

    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 Studio學(xué)習(xí)

    前期準(zhǔn)備:從官網(wǎng)下載 RT-Thread Studio,弄個(gè)賬號(hào)登陸,開(kāi)啟rt-thread學(xué)習(xí)之旅。
    的頭像 發(fā)表于 05-15 11:00 ?3986次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio學(xué)習(xí)

    快速上手micro rosRT-Thread

    快速上手micro ros && RT-Thread(serial和udp方式)
    的頭像 發(fā)表于 10-26 16:13 ?1175次閱讀
    快速上手micro <b class='flag-5'>ros</b>在<b class='flag-5'>RT-Thread</b>上