91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

基于RDK X3的“校史通”機(jī)器人:SLAM導(dǎo)航+智能交互,讓校史館活起來(lái)!

地瓜機(jī)器人 ? 2025-04-04 16:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

智慧校園:校史館也瘋狂

在科技狂飆的今天,連校史館都卷起來(lái)了!我們給校史館配了個(gè)“社牛”機(jī)器人

  • 主動(dòng)迎賓:機(jī)器人通過(guò)視覺(jué)識(shí)別,主動(dòng)上前打招呼,告別“自助式”參觀。
  • 語(yǔ)音互動(dòng):邊帶路邊講解,校史知識(shí)隨問(wèn)隨答,參觀體驗(yàn)更生動(dòng)。
  • 智能導(dǎo)航:運(yùn)用SLAM技術(shù)靈活避障,規(guī)劃最佳路線,確保游客不錯(cuò)過(guò)任何亮點(diǎn)。

這一創(chuàng)新讓校史館從靜態(tài)展覽變身智能互動(dòng)空間,有望能提升參觀體驗(yàn)——跑得賊穩(wěn)團(tuán)隊(duì)

一、特色與創(chuàng)新

本項(xiàng)目通過(guò)前沿技術(shù)融合,打造了一款智能校史館向?qū)C(jī)器人,具備以下核心創(chuàng)新點(diǎn):

1.1 會(huì)聊天的歷史通

  • 聽(tīng)得清:采用六路環(huán)形麥克風(fēng)+R818降噪板,在嘈雜環(huán)境中也能精準(zhǔn)捕捉提問(wèn),像朋友聊天一樣自然。
  • 答得妙:接入語(yǔ)音模塊和大語(yǔ)言模型,不僅能指路,還能化身"校史百事通",隨時(shí)解答"學(xué)校第一任校長(zhǎng)是誰(shuí)?"這類(lèi)刁鉆問(wèn)題。
  • 主動(dòng)撩:告別傳統(tǒng)屏幕"你問(wèn)我答"模式,機(jī)器人會(huì)主動(dòng)迎賓,邊走邊講解,讓參觀像逛博物館有私人導(dǎo)覽。

1.2 自帶導(dǎo)航老司機(jī)

  • 認(rèn)路準(zhǔn):通過(guò)激光雷達(dá)+深度相機(jī)融合SLAM技術(shù),5分鐘就能"摸清"整個(gè)校史館布局,自動(dòng)生成最佳參觀路線。
  • 躲人穩(wěn):遇到突然出現(xiàn)的參觀人群,能像老司機(jī)般靈活繞行,絕不會(huì)"撞車(chē)"尬場(chǎng)。
  • 解說(shuō)忙:帶路時(shí)還會(huì)貼心地提醒:"左側(cè)展柜是1958年建校文物,要停下來(lái)看看嗎?"

1.3 高定版鋼鐵俠戰(zhàn)衣

  • 為場(chǎng)景而生:自主設(shè)計(jì)的車(chē)體兼顧靈活性與穩(wěn)定性,能在狹窄展區(qū)間自如轉(zhuǎn)身,底盤(pán)防撞設(shè)計(jì)避免磕碰文物。
  • 模塊化升級(jí):像樂(lè)高一樣可快速更換電池、傳感器等模塊,適應(yīng)未來(lái)功能擴(kuò)展需求。

二、功能設(shè)計(jì)

2.1 總體設(shè)計(jì)

為提升校史館的智能化服務(wù),本項(xiàng)目設(shè)計(jì)了"小莫"智能導(dǎo)覽機(jī)器人,采用模塊化架構(gòu),實(shí)現(xiàn)精準(zhǔn)交互與自主導(dǎo)航。

核心設(shè)計(jì)思路:

  • 用戶友好交互:訪客通過(guò)語(yǔ)音或觸摸屏與機(jī)器人互動(dòng),指令傳遞至中央控制系統(tǒng)。
  • 智能決策中樞:控制模塊整合SLAM定位、AI語(yǔ)音識(shí)別、環(huán)境感知數(shù)據(jù),實(shí)時(shí)生成最優(yōu)導(dǎo)覽方案。
  • 精準(zhǔn)執(zhí)行反饋:導(dǎo)航模塊驅(qū)動(dòng)機(jī)器人移動(dòng),語(yǔ)音系統(tǒng)同步講解,形成"問(wèn)-答-導(dǎo)"閉環(huán)體驗(yàn)。

技術(shù)亮點(diǎn):

? 聽(tīng)得懂:抗噪麥克風(fēng)+AI語(yǔ)音模型,準(zhǔn)確識(shí)別訪客需求

? 找得準(zhǔn):激光雷達(dá)SLAM實(shí)時(shí)建圖,動(dòng)態(tài)規(guī)劃避障路徑

? 講得活:大語(yǔ)言模型賦能,校史講解媲美專(zhuān)業(yè)導(dǎo)游

https://horizonrobotics.feishu.cn/space/api/box/stream/download/asynccode/?code=ZjkzNWE5MDgyYWMxYmQ1MGFiZjY0ZjliN2VkMTUxODlfUlp3eUxmaUljemg4S1NmRHFqWU9OWGVBcHFKeGZCa1dfVG9rZW46Vm9OTWJtdHVWb1FkMTN4RThzdGNkU0hMbkhlXzE3NDM3NTQ1Mjg6MTc0Mzc1ODEyOF9WNA

2.2功能設(shè)計(jì)

2.21硬件升級(jí):打造更靈敏的機(jī)器人

原廠配置的語(yǔ)音和視覺(jué)模塊存在明顯不足:

  • 原有問(wèn)題:麥克風(fēng)拾音模糊、攝像頭成像質(zhì)量差,僅支持4個(gè)基礎(chǔ)指令
  • 改進(jìn)方案
    • 聽(tīng)覺(jué)系統(tǒng):采用6路環(huán)形麥克風(fēng)陣列配合R818專(zhuān)業(yè)降噪板,實(shí)現(xiàn)會(huì)議級(jí)降噪效果
    • 視覺(jué)系統(tǒng):升級(jí)為索尼IMX219傳感器,配備120°廣角鏡頭,支持高清拍攝

2.22模塊化系統(tǒng)架構(gòu)

功能模塊

核心組件

主要功能

性能參數(shù)

感知系統(tǒng)

激光雷達(dá)+深度相機(jī)

環(huán)境探測(cè)與識(shí)別

10米探測(cè)范圍,±2cm精度

控制系統(tǒng)

Jetson Nano+RDK X3

數(shù)據(jù)處理與決策

支持實(shí)時(shí)建圖與導(dǎo)航

驅(qū)動(dòng)系統(tǒng)

精密伺服電機(jī)

運(yùn)動(dòng)控制

0.8m/s移動(dòng)速度

交互系統(tǒng)

語(yǔ)音處理引擎

語(yǔ)音識(shí)別與合成

200ms響應(yīng)時(shí)間

2.24智能工作流程

  1. 環(huán)境感知:通過(guò)多傳感器采集周?chē)h(huán)境數(shù)據(jù)
  2. 數(shù)據(jù)處理:Jetson Nano處理導(dǎo)航數(shù)據(jù),RDK X3運(yùn)行交互模型
  3. 任務(wù)執(zhí)行:根據(jù)分析結(jié)果執(zhí)行導(dǎo)覽或解答任務(wù)

2.25 系統(tǒng)接口設(shè)計(jì)

  • 硬件連接:采用高速USB3.0接口傳輸傳感器數(shù)據(jù)
  • 軟件通信:基于ROS框架實(shí)現(xiàn)模塊間高效協(xié)作

三、系統(tǒng)實(shí)現(xiàn)

3.1硬件實(shí)現(xiàn)

首先對(duì)語(yǔ)音模塊進(jìn)行集成,通過(guò)PLA外殼和螺柱螺栓實(shí)現(xiàn)了穩(wěn)固的固定。然后使用USB連接麥克風(fēng)和免驅(qū)聲卡。

3.2軟件實(shí)現(xiàn)

3.2.1環(huán)境感知

機(jī)器人的環(huán)境感知傳感器為雷達(dá)與深度相機(jī),下面介紹如何基于這兩個(gè)傳感器實(shí)現(xiàn)環(huán)境感知的。

傳感器包括雷達(dá)和深度相機(jī)。首先,關(guān)于雷達(dá)部分,可以通過(guò)克隆GitHub上的官方雷達(dá)ydlidar_ros_driver包來(lái)實(shí)現(xiàn):

(git clone

https://github.com/YDLIDAR/ydlidar_ros_driver.git/ydlidar_ws/src/ydlidar_ros_driver)

接著cd到所在的目錄下,通過(guò)catkin_make構(gòu)建ydlidar_ros_driver包,下一步配置包環(huán)境,使用如下指令添加永久工作區(qū)環(huán)境變量:

($echo

"source ~/ydlidar_ws/devel/setup.bash" >> ~/.bashrc)

($source ~/.bashrc)

最后,如圖4.1將lidar_view.launch文件中的lidar.launch改為X2.launch小莫使用的雷達(dá)型號(hào)為X2就完成配置了。

https://horizonrobotics.feishu.cn/space/api/box/stream/download/asynccode/?code=MGRkM2UyNWVhMzdkZTdjMmExNjJkZmU3ZmZlY2UwODJfUm94NHgzNFBhTkh5U0JlOHk4WlZKdjhyTjVZWnRJYU9fVG9rZW46VXE3aWJZTlFNb0JDY294TFZldGNjSWpIblVlXzE3NDM3NTQ1Mjg6MTc0Mzc1ODEyOF9WNA

隨后打開(kāi)rviz工具,查看雷達(dá)掃描效果,命令如下:

(roslaunch limo_bringup

lidar_rviz launch)

默認(rèn)情況下,雷達(dá)的掃描范圍是360度,但可以根據(jù)需要在launch文件中修改參數(shù)以改變雷達(dá)的掃描范圍。對(duì)于小莫使用的X2雷達(dá),在ROS內(nèi)遵循右手定則,角度范圍為[-180, 180]。

https://horizonrobotics.feishu.cn/space/api/box/stream/download/asynccode/?code=NjFjMmYyZjBmYThiODk5YWE3MjJjMmQ5ZGY2YTJjNWNfaENrSkRLUnVHWmpFU1NzTks3NWN1aVk4N0w2RTl4MXRfVG9rZW46U1ExY2JSWFA0b2g5OWF4U0Z5c2NmOUVxbjVxXzE3NDM3NTQ1Mjg6MTc0Mzc1ODEyOF9WNA

https://horizonrobotics.feishu.cn/space/api/box/stream/download/asynccode/?code=MDE1ZGYwNTQ0OTY5YzMwZmVjMjNkYTU5MDA1ZTZiNWRfanhYYzdhNzJFTzNvTkE5U0dLdDQ5TlhDbWpWSUNPQkhfVG9rZW46SEJGWGJoUDdkb2lTQVd4cDhJY2NJM3FObk9kXzE3NDM3NTQ1Mjg6MTc0Mzc1ODEyOF9WNA

至此,機(jī)器人已經(jīng)完成了對(duì)兩個(gè)環(huán)境感知傳感器的適配,這意味著它現(xiàn)在能夠全面感知并理解周?chē)h(huán)境的情況。

3.2.2底盤(pán)驅(qū)動(dòng)

在實(shí)現(xiàn)環(huán)境感知模塊之后,系統(tǒng)需要將感知到的環(huán)境信息用于實(shí)際的運(yùn)動(dòng)控制,因此底盤(pán)驅(qū)動(dòng)模塊的設(shè)計(jì)與實(shí)現(xiàn)顯得尤為重要。接下來(lái),我們將介紹底盤(pán)驅(qū)動(dòng)模塊的具體實(shí)現(xiàn)方法。

移動(dòng)底盤(pán)需要通過(guò)程序驅(qū)動(dòng)才能實(shí)現(xiàn)移動(dòng)機(jī)器人的運(yùn)動(dòng),移動(dòng)機(jī)器人的底盤(pán)驅(qū)動(dòng)程序分為兩個(gè)版本,分別為C++版本和Python版本,兩個(gè)版本都可以控制移動(dòng)機(jī)器人運(yùn)動(dòng)。

Python版本的代碼僅有三個(gè)?件組成驅(qū)動(dòng)程序,init.py的作?為申明需要使用的?件limomsg.py的作?為驅(qū)動(dòng)成所需要的消息,limo.py是主程序,它的作用是驅(qū)動(dòng)移動(dòng)機(jī)器人。

(函數(shù)名稱)()

(函數(shù)作)(?)()

(EnableCommand())

(控制使能)()

(SetMotionCommand())

(設(shè)置移動(dòng)命令)()

(GetLinearVelocity())

(獲取線速度)()

(GetAngularVelocity())

(獲取)(?)(速度)()

(GetSteeringAngle())

(獲取內(nèi)轉(zhuǎn))(??)(度)()

(GetLateralVelocity())

(獲取橫移速度)()

(GetControlMode())

(獲取控制模式)()

(GetBatteryVoltage())

(獲取電池電量)()

(GetErrorCode())

(獲取錯(cuò)誤代碼)()

(GetRightWheelOdem())

(獲取左輪)(?)(程計(jì))()

(GetLeftWheelOdem())

(獲取右輪)(?)(程計(jì))()

(GetIMUAccelData())

(獲取)(IMU)(的加速度)()

(GetIMUGyroData())

(獲取陀螺儀的數(shù)據(jù))()

(GetIMUYawData())

(獲取)(IMU)(的航向)(?)()

(GetIMUPichData())

(獲取俯仰)(?)()

(GetIMURollData())

(獲取橫滾)(?)()

3.2.3動(dòng)態(tài)避障

底盤(pán)驅(qū)動(dòng)為車(chē)輛提供了動(dòng)力,而避障則是確保車(chē)輛在運(yùn)動(dòng)過(guò)程中能夠安全地避開(kāi)障礙物,兩者需要密切合作,因此該機(jī)器人使用了兩種動(dòng)態(tài)避障算法進(jìn)行雷達(dá)避障。

首先用到的庫(kù)是teb_local_planner,由move_base包進(jìn)行調(diào)用

(sudo

apt-get install ros-kinetic-teb-local-planner)

(sudo

apt-get install ros-kinetic-teb-local-planner-tutorials)

https://horizonrobotics.feishu.cn/space/api/box/stream/download/asynccode/?code=MDkzYTRkMDgyNzBhYzg3NjFiMTgyNjczNjgwMTkxMjlfZmROR0gyNFJFZ1J4Y0lYZHN0bGdnY0JFZEQxYTBqRWVfVG9rZW46T082cWJXR1B4b1dER3B4ZUVRcGNvVHBLbktkXzE3NDM3NTQ1Mjg6MTc0Mzc1ODEyOF9WNA

在實(shí)際使用中,避障能力受到參數(shù)調(diào)整的影響極大,稍有不慎便可能導(dǎo)致撞上障礙物。為此,我們總結(jié)了一套僅適用于小莫的TEB調(diào)參方法及適配于室內(nèi)避障的范圍。

我們定義避障效果的好壞是通過(guò)同等障礙物距離下LIMO響應(yīng)的快慢來(lái)直觀感受的,參數(shù)是在rqt_reconfigure界面里調(diào)整的。經(jīng)過(guò)測(cè)試發(fā)現(xiàn),關(guān)閉多路徑并行規(guī)劃和使用Costmap Converter可以顯著提升避障效果。降低迭代次數(shù)no_inner/outer_iterations和減小局部成本地圖的大小也能顯著改善性能。相較之下,降低max_lookahead_distance的效果較為一般,而增大規(guī)劃周期和控制周期則會(huì)影響整體效果。使用單點(diǎn)footprint并結(jié)合最小障礙物距離約束,對(duì)效果的提升不太顯著,并且可能影響整體性能。

https://horizonrobotics.feishu.cn/space/api/box/stream/download/asynccode/?code=N2NkZTAwYzNjNjlkYTFjZTY4NGYyNzExMDlkMDNlZmNfbHNMNGZaVE5JR3hHeU9YNDlQbExlQmlzNGNqOTgyQXZfVG9rZW46S0FncGJqd3ZibzVXb3J4cGVXS2Nrd2NFbnpjXzE3NDM3NTQ1Mjg6MTc0Mzc1ODEyOF9WNA

至此,TEB算法的配置已經(jīng)完成,但由于TEB算法容易陷入局部最優(yōu)問(wèn)題,且在處理密集障礙物或狹窄空間時(shí)可能會(huì)產(chǎn)生不穩(wěn)定的路徑規(guī)劃結(jié)果,因此需要引入第二個(gè)算法——DWA(動(dòng)態(tài)窗口法)算法進(jìn)行補(bǔ)充。通過(guò)這種方法,DWA算法能夠動(dòng)態(tài)調(diào)整機(jī)器人的路徑規(guī)劃,避免局部最優(yōu)問(wèn)題,并在密集障礙物或狹窄空間中提供更穩(wěn)定的路徑規(guī)劃結(jié)果,從而補(bǔ)足了TEB算法的不足。

https://horizonrobotics.feishu.cn/space/api/box/stream/download/asynccode/?code=YjA4MTdlMTNlNjUwMTQ3NjZiNzUyMjQ1ODhiZmNlMDlfSDFUVnZMaEoyNXFYVmlvQjZvNVVCc1pOd0hMWk41R21fVG9rZW46VXkwbWJzSnFyb3U0djB4ZnJ1S2N4Sk1nbkplXzE3NDM3NTQ1Mjg6MTc0Mzc1ODEyOF9WNA

3.2.4 地圖構(gòu)建

在車(chē)輛在復(fù)雜環(huán)境中執(zhí)行動(dòng)態(tài)避障的過(guò)程中,實(shí)時(shí)感知到的障礙物信息不僅為安全行駛提供了保障,接下來(lái)就是建圖步驟。

SLAM建圖是小莫機(jī)器人進(jìn)行地圖構(gòu)建的核心原理,指的是即時(shí)定位和建圖,SLAM建圖主要是有以下三個(gè)過(guò)程:

一是預(yù)處理,對(duì)雷達(dá)點(diǎn)云數(shù)據(jù)進(jìn)行處理,包括清除異常值,以確保數(shù)據(jù)質(zhì)量。這個(gè)過(guò)程有助于提高雷達(dá)測(cè)量的準(zhǔn)確性和可靠性。簡(jiǎn)而言之,點(diǎn)云數(shù)據(jù)的優(yōu)化是確保雷達(dá)捕獲的環(huán)境信息準(zhǔn)確無(wú)誤的關(guān)鍵步驟。以激光作為信號(hào)源,由激光器發(fā)射出的脈沖激光,打到周?chē)系K物上,引起散射。

一部分光波會(huì)反射到激光雷達(dá)的接收器上,再根據(jù)激光測(cè)距原理計(jì)算,就可以得到從激光雷達(dá)到目標(biāo)點(diǎn)的距離。關(guān)于點(diǎn)云:通俗來(lái)說(shuō),激光雷達(dá)獲取的周?chē)h(huán)境信息,被稱為點(diǎn)云。它是能反映機(jī)器人所在環(huán)境中“眼睛”能看到的一個(gè)部分。雷達(dá)點(diǎn)云數(shù)據(jù)呈現(xiàn)了物體的精確位置,包括角度和距離,形成了分布式的空間信息集合。這些數(shù)據(jù)為機(jī)器人或系統(tǒng)提供了關(guān)于其周?chē)h(huán)境的詳細(xì)三維視圖。

二是匹配,在當(dāng)前環(huán)境中,將點(diǎn)云數(shù)據(jù)與已有地圖進(jìn)行對(duì)照,以定位相應(yīng)位置。激光SLAM系統(tǒng)通過(guò)比較不同時(shí)間點(diǎn)的點(diǎn)云數(shù)據(jù),來(lái)計(jì)算激光雷達(dá)的移動(dòng)距離和方向變化,實(shí)現(xiàn)機(jī)器人的自我定位。

三是地圖更新,新一輪激光雷達(dá)數(shù)據(jù)會(huì)被整合進(jìn)原始地圖,以此更新地圖。

SLAM的過(guò)程已經(jīng)詳細(xì)闡釋?zhuān)旅鎸⑼ㄟ^(guò)三種算法實(shí)現(xiàn)SLAM建圖:

一是gmapping,通過(guò)以下命令將gmapping安裝在小莫上,創(chuàng)建相關(guān)launch文件即可使用。

sudo apt-get install ros-melodic-gmapping

sudo apt-get install ros-melodic-teleop_twist_keyboard

sudo apt install ros-melodic-map-server

在gmapping功能包中,slam_gmapping節(jié)點(diǎn)扮演著核心角色,它處理多種話題和服務(wù)來(lái)實(shí)現(xiàn)SLAM。具體來(lái)說(shuō),它訂閱tf話題以獲取雷達(dá)和里程計(jì)之間的坐標(biāo)轉(zhuǎn)換信息,以及/scan話題來(lái)接收雷達(dá)掃描數(shù)據(jù)。此外,它發(fā)布map_metadata和map話題,分別提供地圖的元數(shù)據(jù)和柵格數(shù)據(jù),這些數(shù)據(jù)通常在rviz中可視化展示。節(jié)點(diǎn)還發(fā)布~entropy話題,用于估計(jì)機(jī)器人姿態(tài)的不確定性。同時(shí),它提供dynamic_map服務(wù),以供請(qǐng)求地圖數(shù)據(jù)之用。

二是Cartographer,通過(guò)以下命令將Cartographe安裝在小莫上,創(chuàng)建相關(guān)launch文件即可使用:

sudo apt install ros-foxy-cartographer

sudo apt install ros-foxy-cartographer-ros

在Cartographer調(diào)參測(cè)試發(fā)現(xiàn),概率通過(guò)公式離散化的uint8數(shù)值小于127時(shí),空閑概率更大;數(shù)值大于127時(shí),占用概率更大。

我們看到,層數(shù)越高,圖像變得越來(lái)越粗糙,黑色部分明顯膨脹,因此,我們選定滑動(dòng)窗口為width=1作為參數(shù)。

同時(shí),我們也為小莫的四種運(yùn)動(dòng)模態(tài)創(chuàng)建了兩個(gè)建圖launch文件,其中履帶模式、麥克拉姆輪模式都可以與差速模式共用一個(gè)launch文件。

至此,兩種建圖算法已經(jīng)成功配置實(shí)現(xiàn),除cartographer選定參數(shù)width=1外,其余參數(shù)經(jīng)測(cè)試發(fā)現(xiàn)適用于小莫機(jī)器人,故均選用默認(rèn)參數(shù)使用。

3.2.5自主導(dǎo)航

實(shí)時(shí)感知到的障礙物信息為安全行駛提供了保障,同時(shí)地圖構(gòu)建也提供了重要的環(huán)境數(shù)據(jù),為后續(xù)路徑規(guī)劃和導(dǎo)航奠定了堅(jiān)實(shí)的基礎(chǔ)。

路徑規(guī)劃的前提是定位,定位功能是用來(lái)計(jì)算機(jī)器人在全局地圖上的具體位置。雖然SLAM技術(shù)包含了定位算法,但它主要用于在導(dǎo)航開(kāi)始前構(gòu)建全局地圖,而實(shí)時(shí)定位則是在導(dǎo)航過(guò)程中使用,我們選用的是AMCL蒙特卡洛定位系統(tǒng),這一系統(tǒng)專(zhuān)門(mén)用于導(dǎo)航時(shí)的機(jī)器人定位,定位方法算法流程如下:

https://horizonrobotics.feishu.cn/space/api/box/stream/download/asynccode/?code=OGNiYTVhOGI5NThlN2Q0OGU1ODZlNWQ4M2RjMTIyOTJfdW5tUWI1Y0J5NnVBb3VPTXFRMXU4WmVVbm1XdUxwSmdfVG9rZW46UDJ3RGJUR2dWb3Q4RHR4THd6VGNrMlpBbmFmXzE3NDM3NTQ1Mjg6MTc0Mzc1ODEyOF9WNA

在小莫中,AMCL定位輸入以下命令安裝,配置如圖4.11的launch文件即可備用:

([1]) https://wiki.ros.org/move_base

([1]) amcl - ROS Wiki

sudo apt-get install ros-melodic-navigation

AMCL需要訂閱的服務(wù)是/scan激光雷達(dá)數(shù)據(jù)和/tf坐標(biāo)變換消息,它發(fā)布的話題中,最重要的是/amcl_pose,這是機(jī)器人在地圖中的位姿估計(jì)。

https://horizonrobotics.feishu.cn/space/api/box/stream/download/asynccode/?code=NmE2MDlkZTAwYTZhOWZjNTc5ZjI2YWJkOTU2YTNkOTdfTzJiMzd0Um82bU9DOUh5eWhRWEhteE5TR21MRzF6T1NfVG9rZW46R2ZsNGJIVzNhb3dPVHV4V2dWOWNCdFJobkxjXzE3NDM3NTQ1Mjg6MTc0Mzc1ODEyOF9WNA

AMCL則負(fù)責(zé)機(jī)器人在環(huán)境中的定位,在導(dǎo)航過(guò)程中還需要能實(shí)現(xiàn)路徑規(guī)劃和避障的“地圖”,即代價(jià)地圖(Cost Map),它通過(guò)為地圖中的每個(gè)柵格分配一個(gè)“代價(jià)”值,來(lái)表示機(jī)器人在該位置的移動(dòng)難度或風(fēng)險(xiǎn)。

Costmap2D 類(lèi)維護(hù)了每個(gè)柵格的代價(jià)值。Layer 類(lèi)是虛基類(lèi),它統(tǒng)一了各插件costmap層的接口。其中最主要的接口函數(shù)有:

initialize函數(shù),它調(diào)用onInitialize函數(shù),分別對(duì)各costmap 層進(jìn)行初始化;matchSize函數(shù),在StaticLayer 類(lèi)和ObstacleLayer 類(lèi)中,該函數(shù)調(diào)用了CostmapLayer類(lèi)matchSize 函數(shù),初始化各costmap 層的size,分辨率,原點(diǎn)和默認(rèn)代價(jià)值,并保持與layered_costmap 一致。對(duì)于inflationLayer 類(lèi),根據(jù)膨脹半徑計(jì)算了隨距離變化的cost 表。后面就可以用距離來(lái)查詢膨脹柵格的cost 值。同時(shí)定義了seen_數(shù)組,該數(shù)組用于標(biāo)記柵格是否已經(jīng)被遍歷過(guò)。對(duì)于VoxelLayer 類(lèi),則初始化了體素方格的size;

updateBounds 函數(shù),調(diào)整當(dāng)前costmap 層需要更新的大小范圍。對(duì)于StaticLayer類(lèi),確定costmap 的更新范圍為靜態(tài)地圖的大小,注意:靜態(tài)層一般只用在全局costmap中。對(duì)于ObstacleLayer 類(lèi),遍歷clearing_observations 中的傳感器數(shù)據(jù)確定障礙物的邊界。

其中initialize 函數(shù)和matchSize 函數(shù)分別只執(zhí)行一次。updateBounds 函數(shù)和updateCosts 函數(shù)則會(huì)周期執(zhí)行,其執(zhí)行頻率由map_update_frequency 決定。

CostmapLayer 類(lèi)同時(shí)繼承了Layer 類(lèi)和Costmap2D 類(lèi),并提供了幾個(gè)更新cost 值的操作方法。StaticLayer 類(lèi)和ObstacleLayer 類(lèi)需要保存實(shí)例化costmap 層的cost 值,所以都繼承了CostmapLayer 類(lèi)。StaticLayer 類(lèi)使用靜態(tài)柵格地圖數(shù)據(jù)更新自己的costmap。ObstacleLayer 類(lèi)使用傳感器數(shù)據(jù)更新自己的costmap 。VoxelLayer 類(lèi)相對(duì)于ObstacleLayer 類(lèi)則多考慮了z軸的數(shù)據(jù)。效果的區(qū)別主要體現(xiàn)在障礙物的清除方面。一個(gè)是二維層面的清除,一個(gè)是三維里的清除。

代價(jià)地圖已經(jīng)內(nèi)嵌到下文提及的move_base的功能包中,無(wú)需單獨(dú)配置。

至此,萬(wàn)事具備,導(dǎo)航準(zhǔn)備工作已經(jīng)完成,已經(jīng)可以開(kāi)始在小莫上實(shí)現(xiàn)自主導(dǎo)航了。

move_base功能包需要使用本節(jié)前文提及的所有模塊:深度相機(jī)提供的畫(huà)面會(huì)集成在導(dǎo)航操作界面中,供用戶實(shí)時(shí)了解機(jī)器人的位置和環(huán)境;雷達(dá)數(shù)據(jù)不僅用于避障,還參與SLAM建圖,為導(dǎo)航提供可靠的地圖信息和障礙物檢測(cè);雷達(dá)避障的兩個(gè)局部規(guī)劃器分別負(fù)責(zé)不同的避障任務(wù),與move_base中的全局規(guī)劃器配合,共同實(shí)現(xiàn)整體路徑規(guī)劃的優(yōu)化和調(diào)整;AMCL包則持續(xù)反饋機(jī)器人在地圖中的位姿信息,確保導(dǎo)航時(shí)能夠依賴代價(jià)地圖(Cost Map)進(jìn)行實(shí)時(shí)路徑規(guī)劃和調(diào)整。通過(guò)這些模塊的協(xié)同工作,小莫機(jī)器人能夠在復(fù)雜環(huán)境中實(shí)現(xiàn)精準(zhǔn)的自主導(dǎo)航,確保安全和高效的路徑規(guī)劃。

通過(guò)以下指令便可以安裝move_base包:

sudo apt-get install ros-melodic-navigation

同時(shí),我們也為小莫的四種運(yùn)動(dòng)模態(tài)創(chuàng)建了兩個(gè)導(dǎo)航launch文件,履帶模式、麥克拉姆輪模式都可以與差速模式共用一個(gè)launch文件。

至此,自主導(dǎo)航功能已經(jīng)全部實(shí)現(xiàn),為語(yǔ)音導(dǎo)航,自主建圖打下了基礎(chǔ)。

3.2.6語(yǔ)音交互

右鍵單擊“此電腦”點(diǎn)擊“管理”,在設(shè)備管理器中找到“CH340”字樣,獲取麥克風(fēng)的端口號(hào)。

在串口選擇區(qū)選擇麥克風(fēng)的串口,我們是連接的是COM3串口。

點(diǎn)擊串口選擇區(qū)的“打開(kāi)串口”,看到如下所示頁(yè)面,即成功與PC建立連接。

在命令輸入?yún)^(qū)輸入“{"type":"version"}”,點(diǎn)擊“Send Raw”即可在顯示區(qū)看到麥克風(fēng)的版本信息。

在命令輸入?yún)^(qū)輸入“{"type":"wakeup_keywords", "content":{"keyword": "xiao3 huan4 xiao3 huan4", "threshold": "900"}}”點(diǎn)擊“Send Raw”即可在顯示區(qū)看到麥克風(fēng)的通信信息。(“content:”表示喚醒內(nèi)容,“keyword:{}”表示關(guān)鍵字,xiao3為小的拼音+聲調(diào),huan4為幻的拼音+聲調(diào))。

在語(yǔ)音開(kāi)放平臺(tái)申請(qǐng)kpi后將該文件導(dǎo)入,修改了appid后,添加啟動(dòng)時(shí)也啟動(dòng)hw_speaker文件。

3.2.7語(yǔ)言大模型

我們用大模型KIMI智能助手。KIMI API兼容Openai的接口規(guī)范,使用 openai 提供的 Python或NodeJS SDK 來(lái)調(diào)用和使用 Kimi 大模型,那么只需要將 base_url 和 api_key 替換成 Kimi 大模型的配置。

https://horizonrobotics.feishu.cn/space/api/box/stream/download/asynccode/?code=MTFmYmEzODVlOTc5ZjNkOTU4YWI5ZDI0NTMzMTk1ZGRfcUxUNXY5WDFTeUR6bFI0ZjZXdjNXQ2RpODdhMWNmTXBfVG9rZW46VnNKUWJKUUhPb1BlVFZ4WUhhYWNtQXBrbks1XzE3NDM3NTQ1Mjg6MTc0Mzc1ODEyOF9WNA

3.2.8目標(biāo)檢測(cè)

RDK X3提供了基于MIPI攝像頭推理的Python代碼,實(shí)現(xiàn)了加載FCOS 圖像目標(biāo)檢測(cè)算法模型基于COCO數(shù)據(jù)集訓(xùn)練的80個(gè)類(lèi)別的目標(biāo)檢測(cè),包括且不限于人、狗、貓等生活中常見(jiàn)的類(lèi)、從MIPI攝像頭讀取視頻圖像,并進(jìn)行推理、解析模型輸出并將結(jié)果渲染到原始視頻流、通過(guò)HDMI接口輸出渲染后的視頻流。

選用fcos作為推理模型是因?yàn)镕COS算法的設(shè)計(jì)復(fù)雜度,易于理解和操作;性能優(yōu)于YOLO、SSD等檢測(cè)網(wǎng)絡(luò);可以充分利用CPU,減少進(jìn)程切換導(dǎo)致的資源浪費(fèi)。

3.3各模塊協(xié)同實(shí)現(xiàn)

各個(gè)模塊實(shí)現(xiàn)后,需要通過(guò)集成手段實(shí)現(xiàn)各個(gè)模塊的協(xié)同配合,實(shí)現(xiàn)的詳細(xì)介紹如下。

用戶通過(guò)語(yǔ)音或界面喚醒麥克風(fēng),麥克風(fēng)拾音之后對(duì)語(yǔ)音進(jìn)行分析來(lái)判斷用戶是進(jìn)行運(yùn)動(dòng)控制、下達(dá)指令還是進(jìn)行提問(wèn)從而進(jìn)行下一步動(dòng)作。若是對(duì)運(yùn)動(dòng)控制,則將信息發(fā)送到Jetson nano中進(jìn)行解析執(zhí)行;若是進(jìn)行提問(wèn),則將內(nèi)容送到大模型中,等待返回結(jié)果后進(jìn)行文字轉(zhuǎn)語(yǔ)音,再播放語(yǔ)音。

3.3.1用戶界面實(shí)現(xiàn)

小莫的集成特性是本設(shè)計(jì)的創(chuàng)新點(diǎn)之一,各模塊協(xié)同配合的一種紐帶是靠PyQt所構(gòu)建的菜單界面,如圖4.27所示,窗口由歡迎窗口、主界面窗口和各個(gè)子窗口構(gòu)成。歡迎窗口可鍵入主窗口,主窗口點(diǎn)擊各功能按鈕進(jìn)入子窗口。

啟動(dòng)主窗口的同時(shí)也啟動(dòng) dabai_u3.launch攝像頭節(jié)點(diǎn)和limo_start.launch底盤(pán)節(jié)點(diǎn),如圖4.28所示,各個(gè)功能模塊的啟動(dòng)與關(guān)閉匯總在主窗口中,點(diǎn)擊即可分別開(kāi)啟各個(gè)launch文件啟動(dòng)節(jié)點(diǎn),同時(shí)彈出提示框提示是否打開(kāi)成功。

啟動(dòng)建圖節(jié)點(diǎn):使用subprocess.Popen數(shù)啟動(dòng)了一個(gè)新的進(jìn)程來(lái)運(yùn)行建圖節(jié)點(diǎn)的launch文件,具體是limo_bringup limo_rtabmap_orbbec.launch,同時(shí)設(shè)置了localization:=true參數(shù)。這個(gè)參數(shù)表示要啟動(dòng)定位功能,這在建圖的過(guò)程中很重要,因?yàn)槎ㄎ豢梢宰寵C(jī)器人知道自己在地圖中的位置。

隨機(jī)移動(dòng)建圖的邏輯:定義了一個(gè)random_move函數(shù),其中包含了一個(gè)while循環(huán),在循環(huán)中機(jī)器人會(huì)以隨機(jī)的方式移動(dòng),模擬在環(huán)境中探索的過(guò)程。

在循環(huán)中,首先會(huì)生成一個(gè)隨機(jī)的目標(biāo)點(diǎn),然后調(diào)用movebase_client函數(shù)來(lái)讓機(jī)器人移動(dòng)到這個(gè)目標(biāo)點(diǎn)。

同時(shí)還會(huì)生成一個(gè)隨機(jī)的方向,以便機(jī)器人移動(dòng)時(shí)有一定的旋轉(zhuǎn),增加探索的多樣性。

建圖過(guò)程的等待和結(jié)束:在識(shí)別到“自主建圖”命令后,會(huì)啟動(dòng)隨機(jī)移動(dòng),并且等待一段時(shí)間,這段時(shí)間是模擬機(jī)器人在環(huán)境中探索的過(guò)程。

在等待時(shí)間結(jié)束后,會(huì)停止隨機(jī)移動(dòng),并且結(jié)束建圖節(jié)點(diǎn)的運(yùn)行,同時(shí)播放“mapping_complete”提示音,表示建圖完成。

3.3.2語(yǔ)音控制實(shí)現(xiàn)

語(yǔ)音控制是小莫的創(chuàng)新點(diǎn),機(jī)器人可以通過(guò)語(yǔ)音控制各個(gè)模塊,并實(shí)現(xiàn)功能。

錄音調(diào)用控制器:用于實(shí)現(xiàn)語(yǔ)音識(shí)別并控制相關(guān)設(shè)備。主要功能包括接收來(lái)自喚醒標(biāo)志的信息,調(diào)用離線語(yǔ)音識(shí)別服務(wù),處理識(shí)別結(jié)果并根據(jù)情況執(zhí)行相應(yīng)操作。該操作首先初始化ROS節(jié)點(diǎn),并創(chuàng)建必要的節(jié)點(diǎn)句柄、服務(wù)客戶端和話題訂閱者。然后,在一個(gè)循環(huán)中,不斷地獲取離線語(yǔ)音識(shí)別的結(jié)果,并根據(jù)識(shí)別結(jié)果進(jìn)行相應(yīng)的處理。在識(shí)別結(jié)果的處理過(guò)程中,該操作首先判斷喚醒狀態(tài),如果處于喚醒狀態(tài),則調(diào)用離線語(yǔ)音識(shí)別服務(wù)獲取識(shí)別結(jié)果。根據(jù)識(shí)別結(jié)果的不同,可能執(zhí)行以下操作:如果識(shí)別結(jié)果為“休眠”,則將喚醒標(biāo)志置為0,使系統(tǒng)進(jìn)入休眠狀態(tài)。如果識(shí)別結(jié)果為“ok”,表示識(shí)別成功,根據(jù)具體識(shí)別到的語(yǔ)音內(nèi)容,執(zhí)行相應(yīng)操作,并將喚醒標(biāo)志置為0,進(jìn)入休眠狀態(tài)。如果識(shí)別結(jié)果為“fail”,表示識(shí)別失敗,記錄失敗次數(shù),并根據(jù)失敗次數(shù)的不同,可能發(fā)出相應(yīng)的警告信息,并在連續(xù)失敗達(dá)到一定次數(shù)后,將系統(tǒng)置為休眠狀態(tài)。如果調(diào)用離線語(yǔ)音識(shí)別服務(wù)失敗,則記錄錯(cuò)誤信息并繼續(xù)下一次循環(huán)。通過(guò)以上邏輯,該操作實(shí)現(xiàn)了對(duì)語(yǔ)音指令的識(shí)別和處理,并可以根據(jù)識(shí)別結(jié)果執(zhí)行相應(yīng)的控制操作,從而實(shí)現(xiàn)了語(yǔ)音控制相關(guān)設(shè)備的功能。

離線語(yǔ)音識(shí)別服務(wù)識(shí)別聲音指令:頭文件引入和全局變量聲明:包括一些頭文件的引入以及全局變量的聲明,其中包括用于發(fā)布聲音識(shí)別結(jié)果的ROS發(fā)布者、離線識(shí)別開(kāi)關(guān)、一些參數(shù)設(shè)置和一些外部聲明的變量。輔助函數(shù)定義:包括將字符串轉(zhuǎn)換為寬字符和將寬字符轉(zhuǎn)換為字符串的輔助函數(shù),以及播放聲音的函數(shù)。業(yè)務(wù)數(shù)據(jù)處理函數(shù)(business_data):用于處理錄音數(shù)據(jù),并將數(shù)據(jù)傳入語(yǔ)音識(shí)別引擎進(jìn)行識(shí)別。顯示離線識(shí)別結(jié)果函數(shù)(show_result):用于解析離線識(shí)別結(jié)果字符串,提取有效關(guān)鍵字和置信度。獲取離線識(shí)別結(jié)果服務(wù)回調(diào)函數(shù)(Get_Offline_Recognise_Result):用于接收離線識(shí)別結(jié)果請(qǐng)求,并調(diào)用相應(yīng)的處理函數(shù)進(jìn)行離線識(shí)別,并返回識(shí)別結(jié)果。主函數(shù)(main):包括ROS節(jié)點(diǎn)初始化、參數(shù)設(shè)置、服務(wù)、發(fā)布者的創(chuàng)建和一些初始化操作,然后進(jìn)入循環(huán)中不斷檢測(cè)初始化是否成功和是否完成錄音,并根據(jù)情況調(diào)用離線識(shí)別服務(wù)進(jìn)行識(shí)別。

設(shè)置麥克風(fēng)類(lèi)型和喚醒詞并喚醒語(yǔ)音控制:實(shí)現(xiàn)了一個(gè)可以與環(huán)形麥克風(fēng)陣列交互的 ROS 節(jié)點(diǎn),可以通過(guò) ROS 服務(wù)設(shè)置麥克風(fēng)類(lèi)型和喚醒詞,并通過(guò) ROS 發(fā)布者發(fā)布喚醒標(biāo)志和喚醒角度,主要功能包括:CircleMic 類(lèi):這個(gè)類(lèi)實(shí)現(xiàn)了與環(huán)形麥克風(fēng)陣列通信的方法。它包括了初始化串口、切換麥克風(fēng)類(lèi)型、獲取版本信息、設(shè)置喚醒詞等功能。AwakeNode 類(lèi):這個(gè)類(lèi)是一個(gè)ROS節(jié)點(diǎn),通過(guò)串口與環(huán)形麥克風(fēng)陣列通信,提供了三個(gè) ROS 服務(wù):設(shè)置麥克風(fēng)類(lèi)型、獲取設(shè)置信息、設(shè)置喚醒詞。它還創(chuàng)建了兩個(gè) ROS 發(fā)布者,用于發(fā)布喚醒標(biāo)志和喚醒角度。主函數(shù):在主函數(shù)中,首先初始化了 ROS 節(jié)點(diǎn),然后根據(jù)參數(shù)設(shè)置了環(huán)形麥克風(fēng)的類(lèi)型、串口和喚醒詞。接著創(chuàng)建了一個(gè)AwakeNode 對(duì)象,初始化了 ROS 服務(wù)和發(fā)布者,并調(diào)用了環(huán)形麥克風(fēng)的方法來(lái)獲取喚醒結(jié)果。

通過(guò)識(shí)別語(yǔ)音指令執(zhí)行相應(yīng)操作:它通過(guò)結(jié)合語(yǔ)音識(shí)別和導(dǎo)航功能,實(shí)現(xiàn)了對(duì)小車(chē)的語(yǔ)音指令控制,包括控制小車(chē)的移動(dòng)、執(zhí)行特定任務(wù)以及與用戶進(jìn)行交互的功能。首先,操作中建立了與ROS通信的發(fā)布者和訂閱者。這些發(fā)布者和訂閱者用于與其他ROS節(jié)點(diǎn)進(jìn)行數(shù)據(jù)交換,以便小車(chē)能夠接收語(yǔ)音指令并執(zhí)行相應(yīng)的動(dòng)作。其次,該操作定義了多個(gè)函數(shù)來(lái)實(shí)現(xiàn)不同的功能。其中,amcl_pose_callback函數(shù)用于接收小車(chē)當(dāng)前位置信息,這對(duì)于后續(xù)的導(dǎo)航任務(wù)至關(guān)重要;play函數(shù)用于播放特定名稱的語(yǔ)音提示,以便與用戶進(jìn)行交互;pub_cmd_msg函數(shù)用于發(fā)布控制小車(chē)移動(dòng)的指令,并可以設(shè)置持續(xù)時(shí)間,以實(shí)現(xiàn)精確的控制;movebase_client函數(shù)則用于向move_base節(jié)點(diǎn)發(fā)送導(dǎo)航目標(biāo)點(diǎn),并等待導(dǎo)航完成;add_mark_point函數(shù)用于向數(shù)據(jù)庫(kù)添加標(biāo)記點(diǎn)信息,以便小車(chē)能夠在地圖中定位和導(dǎo)航;random_move函數(shù)實(shí)現(xiàn)了小車(chē)的隨機(jī)移動(dòng)功能,這對(duì)于自主建圖過(guò)程中的地圖探索至關(guān)重要。在主循環(huán)中,該操作通過(guò)訂閱語(yǔ)音識(shí)別節(jié)點(diǎn)的話題來(lái)監(jiān)聽(tīng)語(yǔ)音指令。一旦接收到特定的指令,就會(huì)調(diào)用相應(yīng)的處理函數(shù)執(zhí)行相應(yīng)的動(dòng)作或任務(wù)。例如,當(dāng)接收到前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)等移動(dòng)指令時(shí),該操作會(huì)調(diào)用相關(guān)的移動(dòng)函數(shù)控制小車(chē)的運(yùn)動(dòng);當(dāng)接收到導(dǎo)航到特定地點(diǎn)的指令時(shí),該操作會(huì)調(diào)用導(dǎo)航函數(shù)執(zhí)行相應(yīng)的任務(wù)。此外,該操作還實(shí)現(xiàn)了喚醒與休眠處理功能。當(dāng)接收到喚醒指令時(shí),該操作會(huì)播放喚醒成功提示,并根據(jù)當(dāng)前小車(chē)的角度進(jìn)行旋轉(zhuǎn)以調(diào)整朝向;當(dāng)接收到休眠指令時(shí),該操作會(huì)播放休眠提示,并暫停監(jiān)聽(tīng)語(yǔ)音指令,以節(jié)省系統(tǒng)資源。

接著詳細(xì)展開(kāi)說(shuō)明代碼中的關(guān)鍵函數(shù):

首先是amcl_pose_callback(msg)函數(shù)。這個(gè)函數(shù)用于接收小車(chē)當(dāng)前位置信息,并將其存儲(chǔ)在全局變量中供其他部分代碼使用。它訂閱了ROS話題/amcl_pose,該話題發(fā)布的消息包含小車(chē)在地圖中的位置信息。每當(dāng)有新的位置信息到達(dá)時(shí),該函數(shù)就會(huì)被調(diào)用,并將當(dāng)前位置信息存儲(chǔ)在全局變量中。

接著是play(name)函數(shù)。這個(gè)函數(shù)用于播放特定名稱的語(yǔ)音提示,以便與用戶進(jìn)行交互。它使用了一個(gè)名為voice_play的模塊,通過(guò)調(diào)用其中的函數(shù)實(shí)現(xiàn)語(yǔ)音播放功能。調(diào)用該函數(shù)時(shí),將所需的語(yǔ)音提示的名稱作為參數(shù)傳遞給該函數(shù),然后它會(huì)根據(jù)名稱播放相應(yīng)的語(yǔ)音。

下一個(gè)函數(shù)是pub_cmd_msg(msg, duration)。這個(gè)函數(shù)用于發(fā)布控制小車(chē)移動(dòng)的指令,并可以設(shè)置持續(xù)時(shí)間。它接受兩個(gè)參數(shù):msg表示要發(fā)布的控制指令,duration表示指令持續(xù)的時(shí)間。在函數(shù)內(nèi)部,它通過(guò)ROS發(fā)布者向話題/cmd_vel發(fā)布指令消息,控制小車(chē)的運(yùn)動(dòng)。同時(shí),通過(guò)設(shè)置定時(shí)器,可以確保指令在指定的持續(xù)時(shí)間內(nèi)持續(xù)執(zhí)行,然后停止。

接下來(lái)是movebase_client(x, y, orientation)函數(shù)。這個(gè)函數(shù)用于向move_base節(jié)點(diǎn)發(fā)送導(dǎo)航目標(biāo)點(diǎn),并等待導(dǎo)航完成。它使用了ROS的行為庫(kù)中的SimpleActionClient來(lái)實(shí)現(xiàn)與move_base節(jié)點(diǎn)的通信。在函數(shù)內(nèi)部,首先創(chuàng)建一個(gè)MoveBaseGoal對(duì)象,設(shè)置目標(biāo)位置和姿態(tài),然后向move_base節(jié)點(diǎn)發(fā)送這個(gè)目標(biāo),并等待導(dǎo)航任務(wù)完成。

然后是add_mark_point(name, x, y, orientation)函數(shù)。這個(gè)函數(shù)用于向數(shù)據(jù)庫(kù)添加標(biāo)記點(diǎn)信息。它接受標(biāo)記點(diǎn)的名稱、位置坐標(biāo)和姿態(tài)作為參數(shù),并將這些信息插入到SQLite數(shù)據(jù)庫(kù)中。在函數(shù)內(nèi)部,它使用了SQLite數(shù)據(jù)庫(kù)連接和游標(biāo)對(duì)象來(lái)執(zhí)行插入操作,確保標(biāo)記點(diǎn)信息被正確存儲(chǔ)。

最后是random_move()函數(shù)。這個(gè)函數(shù)實(shí)現(xiàn)了小車(chē)的隨機(jī)移動(dòng)功能。它使用了Python的random模塊來(lái)生成隨機(jī)目標(biāo)點(diǎn)和隨機(jī)方向。在函數(shù)內(nèi)部,它周期性地生成隨機(jī)目標(biāo)點(diǎn),并調(diào)用movebase_client函數(shù)來(lái)讓小車(chē)移動(dòng)到這些目標(biāo)點(diǎn),從而實(shí)現(xiàn)隨機(jī)移動(dòng)和地圖探索。

指令處理函數(shù) words_callback(msg) 在這個(gè)代碼中扮演著至關(guān)重要的角色。它是通過(guò)訂閱語(yǔ)音識(shí)別節(jié)點(diǎn)發(fā)布的話題/call_recognition/voice_words來(lái)監(jiān)聽(tīng)語(yǔ)音指令的。一旦接收到語(yǔ)音指令,該函數(shù)將被觸發(fā),開(kāi)始執(zhí)行指令處理流程。

首先,函數(shù)會(huì)解析接收到的消息,將語(yǔ)音指令提取出來(lái)。這通常涉及將消息內(nèi)容進(jìn)行解碼,以確保正確地識(shí)別和理解用戶的指令。解析語(yǔ)音指令可能包括文本分詞、語(yǔ)義分析等步驟,以便準(zhǔn)確識(shí)別用戶的意圖和要求。

接著,根據(jù)解析得到的指令內(nèi)容,函數(shù)會(huì)進(jìn)入相應(yīng)的處理分支。這些分支通常是一系列的條件語(yǔ)句或者是使用字典等數(shù)據(jù)結(jié)構(gòu)進(jìn)行指令匹配的邏輯判斷。每個(gè)分支對(duì)應(yīng)著一種或多種可能的指令,以及執(zhí)行相應(yīng)操作的代碼。

在處理指令的過(guò)程中,函數(shù)可能會(huì)調(diào)用其他函數(shù)來(lái)實(shí)現(xiàn)具體的操作。例如,如果接收到的是控制小車(chē)移動(dòng)的指令,函數(shù)會(huì)調(diào)用控制小車(chē)移動(dòng)的函數(shù);如果接收到的是導(dǎo)航到特定地點(diǎn)的指令,函數(shù)會(huì)調(diào)用導(dǎo)航函數(shù)執(zhí)行相應(yīng)的導(dǎo)航任務(wù)。

除了執(zhí)行相應(yīng)操作外,指令處理函數(shù)還可能會(huì)向用戶提供反饋信息。這可以通過(guò)語(yǔ)音提示、控制臺(tái)輸出、圖形界面等形式來(lái)實(shí)現(xiàn),以便用戶了解指令的執(zhí)行情況和結(jié)果。

在處理完指令后,函數(shù)可能會(huì)繼續(xù)等待并監(jiān)聽(tīng)下一個(gè)語(yǔ)音指令,以保持對(duì)用戶的持續(xù)響應(yīng)。整個(gè)指令處理函數(shù)的設(shè)計(jì)目的是使系統(tǒng)能夠?qū)崿F(xiàn)對(duì)用戶語(yǔ)音指令的準(zhǔn)確理解和及時(shí)響應(yīng),從而提高系統(tǒng)的交互性和用戶體驗(yàn)。

以下是對(duì)每個(gè)分支進(jìn)行詳細(xì)描述:

自主建圖指令分支:如果接收到的語(yǔ)音指令是"自主建圖",系統(tǒng)將啟動(dòng)建圖功能。首先,系統(tǒng)會(huì)播放開(kāi)始建圖的語(yǔ)音提示,然后啟動(dòng)建圖節(jié)點(diǎn)和導(dǎo)航節(jié)點(diǎn),讓小車(chē)開(kāi)始在環(huán)境中進(jìn)行地圖構(gòu)建。在建圖過(guò)程中,系統(tǒng)可能會(huì)調(diào)用隨機(jī)移動(dòng)函數(shù),使小車(chē)在環(huán)境中探索,以獲取更多的地圖信息。建圖完成后,系統(tǒng)會(huì)播放建圖完成的語(yǔ)音提示,并關(guān)閉建圖節(jié)點(diǎn),以便后續(xù)的導(dǎo)航任務(wù)。

移動(dòng)控制指令分支:如果接收到的語(yǔ)音指令是移動(dòng)控制指令,比如"前進(jìn)"、"后退"、"向左轉(zhuǎn)"、"向右轉(zhuǎn)"等,系統(tǒng)會(huì)根據(jù)指令調(diào)整小車(chē)的移動(dòng)方向和速度,以執(zhí)行相應(yīng)的動(dòng)作。例如,如果接收到"前進(jìn)"指令,系統(tǒng)會(huì)使小車(chē)向前移動(dòng);如果接收到"向左轉(zhuǎn)"指令,系統(tǒng)會(huì)使小車(chē)向左轉(zhuǎn)動(dòng)。

導(dǎo)航指令分支:如果接收到的語(yǔ)音指令是導(dǎo)航指令,比如"導(dǎo)航到前臺(tái)"、"去王老師辦公室"等,系統(tǒng)會(huì)調(diào)用相應(yīng)的導(dǎo)航函數(shù),使小車(chē)導(dǎo)航到指定的目標(biāo)位置。這些導(dǎo)航函數(shù)會(huì)計(jì)算小車(chē)到目標(biāo)位置的路徑,并發(fā)送導(dǎo)航指令給導(dǎo)航節(jié)點(diǎn),以實(shí)現(xiàn)自主導(dǎo)航功能。

標(biāo)記點(diǎn)操作分支:如果接收到的語(yǔ)音指令是標(biāo)記點(diǎn)操作指令,比如"設(shè)置A點(diǎn)",系統(tǒng)會(huì)獲取當(dāng)前小車(chē)的位置信息,并將其作為一個(gè)標(biāo)記點(diǎn)保存到數(shù)據(jù)庫(kù)中。這些標(biāo)記點(diǎn)可以在后續(xù)的導(dǎo)航任務(wù)中使用,以便小車(chē)能夠到達(dá)預(yù)先設(shè)置的目標(biāo)位置。

其他指令分支:如果接收到的語(yǔ)音指令不屬于以上任何一種情況,系統(tǒng)可能會(huì)播放無(wú)法識(shí)別的語(yǔ)音指令提示,或者不做任何響應(yīng)。這種情況下,系統(tǒng)會(huì)保持等待狀態(tài),繼續(xù)監(jiān)聽(tīng)新的語(yǔ)音指令。


([1]) ydlidar_ros_driver/details.md at master · YDLIDAR/ydlidar_ros_driver · GitHub

([2]) https://vcp.developer.orbbec.com.cn/documentation

([3]) teb_local_planner - ROS Wiki

([4]) teb_local_planner - ROS Wiki

([5]) teb_local_planner - ROS Wiki

([6]) dwa_local_planner - ROS Wiki

([8]) gmapping - ROS Wiki

([9]) cartographer - ROS Wiki

([10]) https://wiki.ros.org/move_base

([11]) amcl - ROS Wiki

([12]) amcl - ROS Wiki

([13]) move_base - ROS Wiki

聲明:本文內(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)投訴
  • 機(jī)器人
    +關(guān)注

    關(guān)注

    213

    文章

    31109

    瀏覽量

    222398
  • 人工智能
    +關(guān)注

    關(guān)注

    1817

    文章

    50115

    瀏覽量

    265576
  • RDK
    RDK
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    9398
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    半年參與3萬(wàn)輛寶馬X3生產(chǎn),人形機(jī)器人“進(jìn)廠打工”真成了

    了其人形機(jī)器人“進(jìn)廠打工”的最新成果。 ? Figure 02:半年參與3萬(wàn)輛寶馬X3生產(chǎn),進(jìn)入退役階段 ? 根據(jù)Figure AI的說(shuō)法,在過(guò)去的六個(gè)月內(nèi),其第二代人形機(jī)器人Figu
    的頭像 發(fā)表于 11-24 08:25 ?8020次閱讀
    半年參與<b class='flag-5'>3</b>萬(wàn)輛寶馬<b class='flag-5'>X3</b>生產(chǎn),人形<b class='flag-5'>機(jī)器人</b>“進(jìn)廠打工”真成了

    RK3576機(jī)器人核心:三屏異顯+八路攝像頭,重塑機(jī)器人交互與感知

    ?RK3576的強(qiáng)大并非偶然,其架構(gòu)設(shè)計(jì)完美契合了現(xiàn)代機(jī)器人的核心需求:· 強(qiáng)大的異構(gòu)計(jì)算與AI能力:內(nèi)置的NPU為機(jī)器人的視覺(jué)AI算法(如SLAM、行為識(shí)別、手勢(shì)交互)提供了強(qiáng)勁的算
    發(fā)表于 10-29 16:41

    RDK × 腿臂機(jī)器人:這只 “機(jī)械汪” 竟會(huì)說(shuō)人話、走花路!

    開(kāi)源:Github:https://github.com/Hello-XSJ/RDK\_vlm\_demo.git-本項(xiàng)目聚焦腿臂機(jī)器人在多模態(tài)環(huán)境感知、自然語(yǔ)言交互和自主行為控制方面的技術(shù)瓶頸
    的頭像 發(fā)表于 07-01 20:27 ?1277次閱讀
    <b class='flag-5'>RDK</b> × 腿臂<b class='flag-5'>機(jī)器人</b>:這只 “機(jī)械汪” 竟會(huì)說(shuō)人話、走花路!

    算控一體新物種發(fā)布!百TOPS算力,地瓜為具身機(jī)器人量產(chǎn)“夯地基”

    此前發(fā)布的RDK X3平臺(tái)(5TOPS)和RDK X5(10TOPS)形成互補(bǔ),進(jìn)一步豐富地瓜機(jī)器人在不同應(yīng)用場(chǎng)景下的開(kāi)發(fā)支持能力,滿足從入
    的頭像 發(fā)表于 06-18 09:09 ?1.8w次閱讀
    算控一體新物種發(fā)布!百TOPS算力,地瓜為具身<b class='flag-5'>機(jī)器人</b>量產(chǎn)“夯地基”

    盤(pán)點(diǎn)#機(jī)器人開(kāi)發(fā)平臺(tái)

    地瓜機(jī)器人RDK X5開(kāi)發(fā)套件地瓜機(jī)器人RDK X5開(kāi)發(fā)套件產(chǎn)品介紹 旭日5芯片10TOPs算力
    發(fā)表于 05-13 15:02

    詳細(xì)介紹機(jī)場(chǎng)智能指路機(jī)器人的工作原理

    機(jī)場(chǎng)智能指路機(jī)器人主要依靠感知系統(tǒng)、定位系統(tǒng)、導(dǎo)航系統(tǒng)、智能交互系統(tǒng)和運(yùn)動(dòng)系統(tǒng)協(xié)同工作,來(lái)實(shí)現(xiàn)為旅客準(zhǔn)確指路和提供服務(wù)的功能,以下是其詳細(xì)工
    發(fā)表于 05-10 18:26

    RDK X3 帶飛的智能護(hù)理系統(tǒng):機(jī)器人秒變貼心小棉襖

    濟(jì)往開(kāi)來(lái)團(tuán)隊(duì)帶著超燃黑科技來(lái)了!基于 RDK X3 開(kāi)發(fā)的老年智能監(jiān)控系統(tǒng),跌倒秒報(bào)警、手勢(shì)一鍵呼叫、還能陪嘮嗑!最絕的是 開(kāi)源代碼直接甩鏈接 ,技術(shù)黨狂喜!
    的頭像 發(fā)表于 05-09 21:53 ?772次閱讀
    <b class='flag-5'>RDK</b> <b class='flag-5'>X3</b> 帶飛的<b class='flag-5'>智能</b>護(hù)理系統(tǒng):<b class='flag-5'>讓</b><b class='flag-5'>機(jī)器人</b>秒變貼心小棉襖

    【「# ROS 2智能機(jī)器人開(kāi)發(fā)實(shí)踐」閱讀體驗(yàn)】視覺(jué)實(shí)現(xiàn)的基礎(chǔ)算法的應(yīng)用

    與地圖構(gòu)建:機(jī)器人理解環(huán)境 第8章聚焦SLAM(同步定位與地圖構(gòu)建)技術(shù),介紹了SLAM Toolbox和Cartographer兩大主流框架。我的學(xué)習(xí)體會(huì)如下:
    發(fā)表于 05-03 19:41

    【「# ROS 2智能機(jī)器人開(kāi)發(fā)實(shí)踐」閱讀體驗(yàn)】機(jī)器人入門(mén)的引路書(shū)

    的非常好的,特別是一些流程圖,很清晰的闡釋了概念 很適合作為初學(xué)者入門(mén)的引路書(shū) 還能了解很多技術(shù)和框架,破除初學(xué)者的自負(fù)困境,初學(xué)者知道功能是由很多開(kāi)發(fā)者維護(hù)的,前人已經(jīng)為各種產(chǎn)品搭建了完善的框架。避免陷入得一個(gè)單打獨(dú)斗的錯(cuò)覺(jué) 一直蠢蠢欲動(dòng)ros2和
    發(fā)表于 04-30 01:05

    【「# ROS 2智能機(jī)器人開(kāi)發(fā)實(shí)踐」閱讀體驗(yàn)】+ROS2應(yīng)用案例

    的知識(shí),還需要對(duì)ROS 2的節(jié)點(diǎn)通信和數(shù)據(jù)處理有一定的了解。通過(guò)實(shí)踐這一部分內(nèi)容,我掌握了如何在ROS 2中實(shí)現(xiàn)二維碼識(shí)別,這對(duì)于提高機(jī)器人智能性和交互性具有重要意義。 地圖構(gòu)建:SLAM
    發(fā)表于 04-27 11:42

    【「# ROS 2智能機(jī)器人開(kāi)發(fā)實(shí)踐」閱讀體驗(yàn)】+內(nèi)容初識(shí)

    機(jī)器人技術(shù)的飛速發(fā)展,ROS 2 作為其核心工具之一,為開(kāi)發(fā)者提供了強(qiáng)大的支持。與傳統(tǒng)的理論書(shū)籍不同,本書(shū)深入淺出地講解了 ROS 2 的架構(gòu)、開(kāi)發(fā)流程以及在智能機(jī)器人項(xiàng)目中的應(yīng)用,以代碼作為切入口,
    發(fā)表于 04-27 11:24

    RDK X3新玩法:超沉浸下棋機(jī)器人開(kāi)發(fā)日記

    一、項(xiàng)目介紹產(chǎn)品中文名:超沉浸式智能移動(dòng)下棋機(jī)器人產(chǎn)品英文名:Hackathon-TTT產(chǎn)品概念:本項(xiàng)目研發(fā)的下棋機(jī)器人,是一款能自主移動(dòng)、具備語(yǔ)音交互并能和玩家在真實(shí)的棋盤(pán)上進(jìn)行“人
    的頭像 發(fā)表于 04-25 18:18 ?1442次閱讀
    <b class='flag-5'>RDK</b> <b class='flag-5'>X3</b>新玩法:超沉浸下棋<b class='flag-5'>機(jī)器人</b>開(kāi)發(fā)日記

    地瓜機(jī)器人RDK X5 規(guī)格書(shū)與地瓜機(jī)器人RDK X5原理圖

    、割草機(jī)等細(xì)分場(chǎng)景下與全球超過(guò) 200+中小創(chuàng)客、50,000+個(gè)人開(kāi)發(fā)者開(kāi)展深度合作,創(chuàng)造了超過(guò) 50+品類(lèi)的智能機(jī)器人。 旭日智能計(jì)算芯片相關(guān)資料下載鏈接: 地瓜機(jī)器人
    的頭像 發(fā)表于 04-21 19:01 ?3420次閱讀
    地瓜<b class='flag-5'>機(jī)器人</b><b class='flag-5'>RDK</b> <b class='flag-5'>X</b>5 規(guī)格書(shū)與地瓜<b class='flag-5'>機(jī)器人</b><b class='flag-5'>RDK</b> <b class='flag-5'>X</b>5原理圖

    復(fù)合機(jī)器人是通過(guò)什么導(dǎo)航方式?

    智能制造浪潮中,復(fù)合機(jī)器人是通過(guò)什么導(dǎo)航方式實(shí)現(xiàn)高精度、強(qiáng)適應(yīng)性的自主作業(yè)?這一問(wèn)題的答案,不僅關(guān)乎技術(shù)路徑的選擇,更決定了工業(yè)柔性化的未來(lái)高度。作為行業(yè)領(lǐng)軍者,富唯智能以“激光
    的頭像 發(fā)表于 04-21 16:24 ?805次閱讀

    當(dāng) RDK X3 遇上倉(cāng)儲(chǔ)機(jī)器人,智鏈團(tuán)隊(duì)效率原地起飛

    !我們帶著倉(cāng)儲(chǔ)界的"六邊形戰(zhàn)士"來(lái)救場(chǎng)了!這臺(tái)智能倉(cāng)儲(chǔ)機(jī)器人,堪稱倉(cāng)儲(chǔ)界的"瑞士軍刀"。無(wú)人叉車(chē)自帶"聰明大腦",能讀手勢(shì)、懂指令,溝通毫無(wú)障礙;差速舵輪+四輪全向移動(dòng)的設(shè)計(jì),它在狹窄空間里像跳探戈一
    的頭像 發(fā)表于 04-21 01:18 ?890次閱讀
    當(dāng) <b class='flag-5'>RDK</b> <b class='flag-5'>X3</b> 遇上倉(cāng)儲(chǔ)<b class='flag-5'>機(jī)器人</b>,智鏈團(tuán)隊(duì)<b class='flag-5'>讓</b>效率原地起飛