五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

OriginBot源碼學(xué)習(xí)—底盤(pán)驅(qū)動(dòng)

2023-03-27 16:11 作者:古月居GYH  | 我要投稿

從拿到OriginBot到現(xiàn)在也玩了好一段時(shí)間了,打算基于它做一些自定義的開(kāi)發(fā),不可避免的會(huì)接觸到源碼,所以打算用“OriginBot源碼學(xué)習(xí)”這個(gè)系列來(lái)記錄和分享我的學(xué)習(xí)過(guò)程。

我是一名機(jī)器人小白,只有Python的基礎(chǔ),所以這個(gè)系列的文章會(huì)更適合新手看。

先體驗(yàn)功能

這是我第一次看硬件類開(kāi)源項(xiàng)目的源碼,但是我覺(jué)得應(yīng)該和看軟件開(kāi)源項(xiàng)目是差不多的。


在真正開(kāi)始學(xué)習(xí)源代碼之前,一定要先好好玩一玩OriginBot,把它的功能基本都熟悉之后才能比較容易地理解代碼。


我也是在玩了兩個(gè)月的小車,基本把所有的功能都玩了一遍之后有了一些自定義開(kāi)發(fā)的想法之后才開(kāi)始學(xué)習(xí)源代碼的。

源碼學(xué)習(xí)計(jì)劃

我會(huì)按照官網(wǎng)的功能清單去閱讀,如下圖


所以這個(gè)系列的內(nèi)容會(huì)參照快速上手?、基礎(chǔ)使用和應(yīng)用功能來(lái)寫(xiě),但是不會(huì)是囊括里面的所有內(nèi)容,只會(huì)包含我所需要的部分。

快速上手代碼解析

功能解釋

快速上手部分是向我們展示怎么樣讓小車能運(yùn)動(dòng)起來(lái),比如前進(jìn)、后退和拐彎這些,可以讓我們對(duì)小車有一個(gè)直觀的體驗(yàn)。

具體參考:?https://www.originbot.org/guide/easy_start/(老實(shí)說(shuō),第一次組裝好小車并且讓它動(dòng)起來(lái)還是很開(kāi)心的)

這一部分代碼不是很復(fù)雜,并且在后面幾乎所有功能中需要使用到,所以我覺(jué)得這是我學(xué)習(xí)源碼的一個(gè)很好的切入點(diǎn)。

鍵盤(pán)控制節(jié)點(diǎn)分析

官網(wǎng)的教程讓我們先啟動(dòng)機(jī)器人底盤(pán),再啟動(dòng)鍵盤(pán)控制節(jié)點(diǎn),也就是分別先后運(yùn)行一下兩行命令:'''sh

啟動(dòng)機(jī)器人人底盤(pán)

ROS2 發(fā)布o(jì)riginbot_bringup originbot.launch.py

啟動(dòng)鍵盤(pán)控制節(jié)點(diǎn)

但是這里要先說(shuō)鍵盤(pán)控制節(jié)點(diǎn)。

以下內(nèi)容需要一點(diǎn)ros2的基礎(chǔ)知識(shí),如果完全不懂ros2的話建議先去學(xué)一下[ros2 21講](https://book.guyuehome.com/)**?

teleop_twist_keyboard 是ros2自帶的一個(gè)功能,并不是OriginBot自己的代碼。(我一開(kāi)始以為這是OriginBot的代碼,找了很久都沒(méi)有找到源碼)

大家可以在一臺(tái)安裝好ros2的ubuntu運(yùn)行'ros2 topic list', 會(huì)發(fā)現(xiàn)只有兩個(gè)ros2自帶的topic,輸出如下,'''sh$ ros2 topic list/parameter_events/rosout

這個(gè)時(shí)候啟動(dòng)另一個(gè)命令行session,運(yùn)行ros2 run teleop_twist_keyboard teleop_twist_keyboard,如下,

此時(shí)在先前的命令行session中再次運(yùn)行ros2 topic list,如下:

可以發(fā)現(xiàn)多了一個(gè)cmd_vel

然后在當(dāng)前命令行執(zhí)行 ros2 topic echo /cmd_vel (這個(gè)命令用于打印來(lái)自于cmd_vel這個(gè)topic的message), 并在先前的teleop_twist_keyboard 命令行session中按一次i鍵,會(huì)觀察到ros2 topic echo /cmd_vel 會(huì)有如下輸出:

可以看到我們收到了一組linear(線速度)和angular(角速度)

作用就是把上面的線速度和角速度以合適的形式發(fā)送給STM32,然后STM32就會(huì)對(duì)小車的速度按照接收的數(shù)據(jù)進(jìn)行調(diào)整。

底盤(pán)控制節(jié)點(diǎn)解析

前文提到過(guò),通過(guò)執(zhí)行ros2 launch originbot_bringup originbot.launch.py 可以啟動(dòng)機(jī)器人底盤(pán),這個(gè)命令背后實(shí)際運(yùn)行的代碼是 originbot.launch.py, 為了方便解釋代碼,我把代碼原文貼在下面,以注釋的形式記錄。

代碼中三個(gè)launch.actions.IncludeLaunchDescription部分調(diào)用分別調(diào)用了底盤(pán)驅(qū)動(dòng)節(jié)點(diǎn)、雷達(dá)節(jié)點(diǎn)和攝像頭節(jié)點(diǎn)。

而其中的第一個(gè)調(diào)用了底盤(pán)驅(qū)動(dòng)節(jié)點(diǎn),實(shí)際上就是調(diào)用了originbot_base功能包中的launch文件,路徑是:originbot/originbot_base/launch/robot.launch.py

代碼如下:

originbot_base.cpp 里面設(shè)計(jì)到很多跟STM32交互的代碼,我在這里只嘗試解釋跟運(yùn)動(dòng)相關(guān)的部分的代碼。

首先,會(huì)進(jìn)過(guò)下面這行代碼,

這行代碼代碼是創(chuàng)建了一個(gè)訂閱者來(lái)訂閱Twist消息,也就是前面提到的ros2 run teleop_twist_keyboard teleop_twist_keyboard?命令發(fā)出來(lái)的消息,實(shí)際上是一個(gè)線速度和角速度的集合。

接收到到消息之后,再調(diào)用cmd_vel_callback函數(shù),這個(gè)函數(shù)的作用就是解析消息的內(nèi)容,并以合適的格式發(fā)送給STM32。

以下是cmd_vel_callback的代碼

通信協(xié)議如下圖所示:

自定義拓展—用Python實(shí)現(xiàn)

上面是對(duì)于OriginBot底盤(pán)驅(qū)動(dòng)的代碼閱讀和理解,為了加深印象,我用Python把其中的訂閱器重寫(xiě)了一下, 步驟如下:

創(chuàng)建功能包

按照先后順序執(zhí)行以下命令

到這里就有一個(gè)python格式的originbot_base功能包了

編寫(xiě)訂閱器代碼

在上面的功能包的originbot_base路徑創(chuàng)建originbot_base.py, 內(nèi)容如下:

代碼其實(shí)很簡(jiǎn)單,只寫(xiě)了怎么通過(guò)訂閱者獲取到速度信息,并通過(guò)差分模型計(jì)算出兩個(gè)輪子的速度,后面還應(yīng)該按照通信協(xié)議進(jìn)行封裝并通過(guò)串口通信發(fā)送給STM32,不過(guò)工業(yè)上這一部分還是C++用的多,就不再用Python寫(xiě)了。

編譯

代碼寫(xiě)完了還需要編譯才能運(yùn)行,并以也很簡(jiǎn)單,在originbot_py路徑下執(zhí)行?colcon build?就可以了

運(yùn)行和校驗(yàn)

編譯正常的話,就可以運(yùn)行了,先在另外一個(gè)命令行窗口中運(yùn)行ros2 run teleop_twist_keyboard teleop_twist_keyboard?來(lái)啟動(dòng)鍵盤(pán)控制節(jié)點(diǎn),再執(zhí)行如下命令,

此時(shí)在鍵盤(pán)控制節(jié)點(diǎn)的命令行中給出一些指令,我們用Python寫(xiě)的代碼就可以獲取到對(duì)應(yīng)的信息了,日志如下:

到這里我們的代碼就正常運(yùn)行了。

OriginBot源碼學(xué)習(xí)—底盤(pán)驅(qū)動(dòng)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
梁山县| 广州市| 三门县| 许昌县| 宜春市| 咸丰县| 绥宁县| 安阳市| 衡东县| 靖安县| 湘潭市| 太和县| 弋阳县| 湘阴县| 黑龙江省| 望江县| 宁强县| 山东省| 雷波县| 湖口县| 松溪县| 静安区| 新巴尔虎左旗| 长汀县| 繁昌县| 嵊州市| 依兰县| 兴和县| 阳东县| 泊头市| 株洲县| 夏邑县| 石台县| 封丘县| 毕节市| 科技| 铜山县| 阳信县| 无极县| 永济市| 宁南县|