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

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

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

一款通過智能小車來實時視頻遠程看房的創(chuàng)新項目

BYXG_shengwang ? 來源:未知 ? 作者:李倩 ? 2018-07-26 17:03 ? 次閱讀

本文的三位作者正陽、海洋、阿力,是來自不同公司工程師,將 Agora SDK 與智能小車結(jié)合,開發(fā)了一款通過智能小車來實時視頻遠程看房的創(chuàng)新項目。本文將從方案設(shè)計到具體實現(xiàn),詳實分享他們的開發(fā)經(jīng)驗。三人也憑借該項目,在7月1日結(jié)束的 Agora RTC Hack 上海站編程馬拉松獲得大獎。

創(chuàng)意與構(gòu)思

此前聽到多很多次“黑客馬拉松”這樣的活動,一群來自不同地方的人聚在一起,組隊、構(gòu)思、開發(fā),在48小時內(nèi)做出產(chǎn)品雛形。我們?nèi)吮еヂ犅爠e人的創(chuàng)意,重在參與的想法參加了這次比賽。對于想要做的東西,在比賽前也只是有一個大概的方向:

構(gòu)思的方向依據(jù)我們擅長的部分來組合拼接,這就得說到我的兩位給力隊友海洋、阿力;海洋是嵌入式軟件工程師,汽車電子方向,寫個驅(qū)動做個小車手到擒來。阿力是后端工程師,具備處理服務(wù)器端和前端頁面的能力。

于是隊伍有了嵌入式和云端兩部分的能力,技術(shù)構(gòu)思的方向是云端為嵌入式賦能。希望有一個小車,小車可以傳遞回視頻圖像,視頻圖像可以實時傳給多個用戶,用戶在得到授權(quán)之后,實現(xiàn)遠程對小車的操控。

方案設(shè)計與分工

出于這樣的構(gòu)思,實現(xiàn)架構(gòu)如上圖所示?,F(xiàn)在有了一個基本架構(gòu),也清楚了我們要實現(xiàn)的功能,接下來就是分工了??紤]到我們各有所長,分工如下:

o4YBAFtZjp2AT2KHAADIu0deBCM248.png

o4YBAFtZjp2ASGzqAAAnqVClPZo189.png

硬件開發(fā)開始

小車采用了是4輪伺服電機驅(qū)動,搭配有視頻采集模塊、伺服電機驅(qū)動模塊、STM32控制模塊和攝像頭云臺模塊,安裝后整體效果圖如下:

o4YBAFtZjp6APv-WAABmAbKZyJY446.png

圖:效果圖

用戶在遠程操控小車各種動作之前,需要小車通過wifi連接到互聯(lián)網(wǎng)。用戶可以通過上位機Android App 或網(wǎng)頁前端)控制小車前后左右移動或控制云臺調(diào)整攝像頭方向。

視頻采集模塊包含有 Wi-Fi 模塊,可以連接到wifi熱點為視頻傳輸提供網(wǎng)絡(luò)基礎(chǔ)。也提供 HDMI 接口與顯示器連接,方便用戶調(diào)試。攝像頭通過 USB 的方式與視頻采集模塊連接,我們采用免驅(qū)動的天敏6602型號攝像頭,分辨率可以達到640*480,并能夠自動調(diào)焦。

STM32控制模塊采用 Arduino 接口與伺服電機驅(qū)動模塊連接,STM32模塊負責(zé)控制電機、云臺信號的產(chǎn)生,并由伺服電機驅(qū)動模塊直接驅(qū)動電機工作。伺服電機輸入電壓為6~12V,直流驅(qū)動。

工作原理

小車上的視頻采集模塊采用了定制的 Android 系統(tǒng),提供網(wǎng)絡(luò)連接、指令轉(zhuǎn)發(fā)和視頻流采集、傳輸功能。當上位機通過遠程服務(wù)連接到小車后,上位機可以請求到當前小車攝像頭上的視頻信息;同時,視頻采集模塊也將上位機上傳來的控制信號解析為指定格式和功能的協(xié)議數(shù)據(jù),并通過串口發(fā)送到 STM32控制模塊。

小車上的 STM32控制模塊在接收到相關(guān)控制信號后,調(diào)整輸出脈沖信號的占空比,由驅(qū)動板轉(zhuǎn)換輸出電平后直接控制伺服電機或云臺模塊做出相應(yīng)的動作,從而完成上位機用戶想要的操控功能。

控制信號協(xié)議

對于只需要實現(xiàn)簡單的小車控制的話,我們只需要實現(xiàn)通過串口向 STM32控制模塊發(fā)送控制信號即可,簡單的控制信號協(xié)議如下:

o4YBAFtZjp6Ae8S8AABmDGPWEy0662.png

Android SDK 的定制

開發(fā)工具

為了實現(xiàn)我們想要的實時視頻與小車的遠程控制功能,我們需要采用聲網(wǎng)的視頻通話SDK,并運行在 Android 開發(fā)板上。開發(fā)板,我們選用了 Firefly的 RK3128平臺,采用 Cortex-A7 架構(gòu)四核1.3GHz 處理器、Mali-400MP2 GPU,板載千兆以太網(wǎng)口、2.4GHz Wi-Fi 和藍牙4.0,支持 Android 與 Ubuntu 雙系統(tǒng)。

o4YBAFtZjp-AHX0FAAHAtYx1ja0738.png

定制串口驅(qū)動

為了實現(xiàn) RK3128 對小車的控制,我們需要實現(xiàn) RK3128 通過 USB 轉(zhuǎn)串口模塊與 STM32控制模塊通信。因此我們首先要重新配置 RK3128 內(nèi)核,使得RK3128支持 USB 轉(zhuǎn)串口驅(qū)動程序。

首先下載完 RK3128 Android SDK 并先驗證文件 MD5值:

md5sum/path/to/fireprime_android5.1_git_20180510.tar.gzfce0e6d65549939167923260142b2c1efireprime_android5.1_git_20180510.tar.gz

確認無誤后解壓:

mkdir-p~/proj/fireprimecd~/proj/fireprimetarxvf/path/to/fireprime_android5.1_git_20180510.tar.gzgitreset--hardgitremoteaddbitbuckethttps://bitbucket.org/T-Firefly/firenow-lollipop.gitgitpullbitbucketfireprime:fireprime

配置并編譯內(nèi)核:

cd~/proj/fireprime/kernelmakerk3128-fireprime_defconfigmakemenuconfigmake-j8rk3128-fireprime.img

其中make menuconfig這一步需要勾選上Device Drivers —> USB support —> USB Serial Converyer support —> USB Serial Console device support / USB Generic Serial Driver,并勾選上 CP210x / CH341 / FTDI / PL2303 等常用串口工具設(shè)備。

o4YBAFtZjqCAclMZAAEuWiGq27A412.png

編譯 Android 系統(tǒng):

cd~/proj/fireprime.build.shmake-j8./mkimage.sh

最后編譯完成后燒錄分區(qū)鏡像,并插入USB轉(zhuǎn)串口工具查看系統(tǒng)dmesg是否出現(xiàn)以下log信息:

[2213.003173]usb1-1.3:newfull-speedUSBdevicenumber6usingrockchip_ehct[2213.113759]usb1-1.3:NewUSBdevicefound,idVendor=10c4,idProduct=ea60[2213.113839]usb1-1.3:NewUSBdevicestrings:Mfr=1,Product=2,SerialNumbe3[2213.113883]usb1-1.3:Product:CP2102USBtoUARTBridgeController[2213.113921]usb1-1.3:Manufacturer:SiliconLabs[2213.113956]usb1-1.3:SerialNumber:0001[2213.120813]cp210x1-1.3:1.0:cp210xconverterdetected[2213.209852]usb1-1.3:resetfull-speedUSBdevicenumber6usingrockchip_et[2213.320161]usb1-1.3:cp210xconverternowattachedtottyUSB0

出現(xiàn)串口設(shè)備附著到 ttyUSBx,即說明定制串口驅(qū)動成功。

以上為全編譯Android SDK的方法,需要編譯 Android 系統(tǒng),相較于僅編譯內(nèi)核而言比較費時。我們可以在上述make menuconfig時將需要的串口驅(qū)動程序勾選為 M,通過make modules的方法,將驅(qū)動編譯成.ko文件,然后在 Android系統(tǒng)開機時自動加載驅(qū)動程序:

首先將.ko驅(qū)動程序文件復(fù)制到 Android 文件系統(tǒng)內(nèi)

adbshellsumount-oremount,rw/mkdir/moduleschmod777/moduleschown-Rnobody:nobody/modulesexitexitadbpush./xxxx.ko/modules

編寫啟動運行腳本/data/serial.sh

#!/system/bin/shinsmod/modules/xxxx.komknod/dev/ttyUSBc2400

修改init.rc并添加運行自己的腳本

serviceserial/system/bin/sh/data/serial.shuserrootoneshot

在 App 端實現(xiàn)視頻傳輸

視頻傳輸和信令傳輸?shù)牟糠?,我們通過聲網(wǎng) Agora SDK 來實現(xiàn)。由于涉及到與嵌入式開發(fā)板的結(jié)合,我們主要參考的是聲網(wǎng)在 Github 提供的各種案例中的抓娃娃機 demo。示例代碼中的結(jié)構(gòu)圖如下:

示例代碼有視頻傳輸?shù)牟糠郑刂菩帕钚枰獏⒖悸暰W(wǎng)信令文檔自己完成。

o4YBAFtZjqCAdefPAABCb_AkC7c733.png

聲網(wǎng) SDK 的集成

1. 首先申請AppID

o4YBAFtZjqCAS2jXAABnZAsGj6g500.png

Android APP 中在 res/values/strings_config.xml加入如下內(nèi)容,將agora_app_id進行配置

1a486ee31a30xxxxxxxxxx

2. 將.jar文件拷貝到libs/中

因為用到信令和視頻傳輸兩部分,需要兩個.jar 文件分別為 agora-rtc-sdk.jar和 agora-sig-sdk.jar

3. 在 src/main/jniLibs 加入 armeabi-v7a 與其中的.so文件

o4YBAFtZjqCAOb24AAAVc-6aeFM619.jpg

并在 build.gradle 中確定擁有如下描述:

dependencies{compilefileTree(dir:'libs',include:['*.jar'])testCompile'junit:junit:4.12'compile'com.android.support:appcompat-v7:23.4.0'}

就此,使用示例代碼可以順利開啟視頻傳輸功能。

用信令讓 App 控制小車

信令的實現(xiàn)

信令的具體使用方法見聲網(wǎng)官網(wǎng)文檔中心的參考,這里就不進行詳盡描述了。主要使用的函數(shù)如下:

//初始化信令SDKm_agoraAPI=AgoraAPIOnlySignal.getInstance(context,appID);//登錄Agora信令系統(tǒng)m_agoraAPI.login2(appId,account,token,uid,deviceID,retry_time_in_s,retry_count)//////////////點對點測試///////////////發(fā)送點對點消息m_agoraAPI.messageInstantSend(account,uid,msg,msgID)//設(shè)置對端收到消息回調(diào)(m_agoraAPI.onMessageInstantReceive(account,uid,msg){//codethere}/////////////頻道測試/////////////////加入頻道m(xù)_agoraAPI.channelJoin(channelName)//發(fā)送頻道消息m_agoraAPI.messageChannelSend(channelName,msg,msgID)//設(shè)置對端接收到頻道消息回調(diào)m_agoraAPI.onMessageChannelReceive(channelID,account,uid,msg){//codethere}////////////////////////////////////退出Agora信令系統(tǒng)m_agoraAPI.logout()

Android App 操作串口

對于小車端的 Android App 得到信令之后需要串口發(fā)送數(shù)據(jù)。因此如何實現(xiàn) Android App 操作串口。這里簡述兩種方案:

采用 Android 系統(tǒng)給出的架構(gòu)進行處理, Android 帶有串口demo代碼,名稱為 SerialPort。這里注意兩點,此處的代碼依賴于 JNI 工具和 NDK,如果沒有完整安裝在使用項目代碼的時候會出現(xiàn)問題。另外,串口操作不方便使用 Android 模擬器進行測試,對于沒有串口的設(shè)備,在開啟串口的動作時,會報錯并可能導(dǎo)致程序退出崩潰。

選擇使用 Android 代碼發(fā)送 shell 命令的方式,直接模擬 Linux 的 shell 控制代碼,示例 echo ‘a(chǎn)a’ > /dev/ttyUSB0 將aa發(fā)送到串口ttyUSB0,這樣做的好處時代碼本身簡單,串口直接調(diào)用底層。

對于短時間實現(xiàn)功能來說,方案2是更容易實現(xiàn)的方法,這里需要非常注意的一點,需要重新編譯 Android 的 framework 層給 App 賦予 root 權(quán)限

當信令解析完成,串口調(diào)試通過,就可以實現(xiàn)遠程控制小車的行進了。

最后:服務(wù)器端的部署

為了實現(xiàn)用戶可以方便通過手機或者電腦在線實時看房,我們需要通過 Web 端連接小車的 Android App 端,獲取實時傳輸過來的視頻內(nèi)容。在我們的設(shè)想中,用戶可以通過遠程控制小車,這樣可以方便用戶了解房屋各個方面的情況。綜上所述,我們需要實現(xiàn)如下兩個功能:

具有視頻連接功能

具有遠程遙控功能

幸運的是,通過聲網(wǎng)提供的服務(wù),我們可以很便捷的搭建這兩個服務(wù)。在本項目中,我們使用聲網(wǎng)的視頻 SDK 實現(xiàn)網(wǎng)頁端和小車 App 端的視頻連接,通過信令 SDK 發(fā)送消息,去控制小車的前后左右行走和攝像頭上下左右擺動。

羅列一下我們使用到的工具:

聲網(wǎng)視頻通話Web SDK 及文檔,用來實現(xiàn)遠程的視頻交互功能;

聲網(wǎng)信令 SDK 及文檔,用來實現(xiàn)遠程遙控智能小車;

服務(wù)器,用于部署靜態(tài)頁面;

實現(xiàn)視頻連接和發(fā)送消息

先在頁面上引入視頻和信令的 SDK。然后我們先來實現(xiàn)視頻連接。

//創(chuàng)建AgoraRTC實例并加入頻道constclient=AgoraRTC.CreateClient({mode:"interop"})client.init(appId,function(){console.log("AgoraRTCclientinitialized");client.join(channel_key,CHANNEL_NAME,null,function(uid){console.log("User"+uid+"joinchannelsuccessfully")console.log(newDate().toLocaleTimeString())//dosomething}}

訂閱遠端的視頻流并播放。

letstream=AgoraRTC.creatStream(merge(defaultConfig.config))localStream.init(()=>{client.on('stream-added',function(evt){varstream=evt.stream;console.log("Newstreamadded:"+stream.getId());console.log("Subscribe",stream);client.subscribe(stream,function(err){console.log("Subscribestreamfailed",err);});});client.on('stream-subscribed',function(evt){varstream=evt.stream;console.log("Subscriberemotestreamsuccessfully:"+stream.getId());if($('div#video#agora_remote'+stream.getId()).length===0){$('div#video').append('');}stream.play('agora_remote'+stream.getId());});})

通過下述方法來實現(xiàn)發(fā)送信息。

//創(chuàng)建信令的對象constsignal=Signal(appId)//在實驗條件下,不設(shè)置tokenconsttoken='_no_need_token'//登錄constsession=signal.login(account,token)session.onLoginSuccess=(uid)=>{//發(fā)送消息給指定的賬號signal.sendMessage(reciveAcount,message)}

完成上述的步驟之后,與小車端設(shè)置相同的appId和token(如有必要),設(shè)定好對應(yīng)的參數(shù),我們就可以遠程控制小車并獲取視頻了

o4YBAFtZjqGASU-6AAEedjC90dI836.jpg

圖:現(xiàn)場演示

o4YBAFtZjqKAASaJAAHm10UsI-4556.jpg

圖:48小時改裝的小車

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

    關(guān)注

    6

    文章

    1926

    瀏覽量

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

    關(guān)注

    86

    文章

    548

    瀏覽量

    81568

原文標題:一起跳出思維定勢吧,RTC 技術(shù)還可以這樣玩

文章出處:【微信號:shengwang-agora,微信公眾號:聲網(wǎng)Agora】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    開源項目!設(shè)計一款智能手語翻譯眼鏡

    這個項目一款創(chuàng)新智能手語翻譯眼鏡,它能夠實時地將手語轉(zhuǎn)換為聽得見的語音。這款眼鏡采用了VIAM平臺和樹莓派Zero 2 W,能夠幫助聾
    發(fā)表于 05-20 15:59

    跪求項電子系創(chuàng)新項目~~~~~

    大家好 我是名大二的學(xué)生 學(xué)電子的 現(xiàn)在我想?yún)⒓訉W(xué)校電子系創(chuàng)新項目 學(xué)校又沒提供項目可選 我又不太懂要報什么項目 所以請大家給我提個寶貴的意見吧 拜托大家了 謝謝 好人有好報的
    發(fā)表于 03-24 17:47

    創(chuàng)新項目點子

    我是在校大學(xué)生,想做個作品,參加學(xué)校的創(chuàng)新項目的,不過沒有點子,那位大神可以給個點子?謝謝!
    發(fā)表于 09-11 22:14

    大學(xué)生創(chuàng)新項目

    有什么好的大學(xué)生創(chuàng)新項目,用單片機做,推薦下。。。
    發(fā)表于 09-18 21:20

    [原創(chuàng)]智能小車PCB項目資料

    定要是GERBER文件啊,別做出來板子再冤枉廠家做的不對,呵呵鉆孔圖NC文件。。。再貼幾張實物圖:大家都對智能小車比較感興趣,再來個視頻看看功能吧:這是
    發(fā)表于 12-20 15:12

    科技創(chuàng)新項目

    電氣專業(yè)想申報個科技創(chuàng)新項目做什么好,直沒靈感啊
    發(fā)表于 04-07 00:46

    【Aworks申請】智能手持遠程視頻,語音通訊終端

    申請理由:公司需要開發(fā)一款用于遠程通訊的設(shè)備,實現(xiàn)遠程視頻和語音等功能。考慮采用一款ARM9芯片的方案,希望能夠申請成功,用于方案的前期驗證
    發(fā)表于 07-18 16:40

    一款用于視頻圖像傳輸?shù)氖瞻l(fā)模塊

    ` 本帖最后由 雨山 于 2016-2-16 15:55 編輯 一款用于視頻圖像傳輸?shù)氖瞻l(fā)模塊可搭配于智能小車,四軸航拍,可視門鈴,倒車監(jiān)控等應(yīng)用場景。無需wifi,性能可靠,可電
    發(fā)表于 12-03 10:14

    STM32芯片的一款智能臺燈項目分享 包含代碼哦

    一款智能臺燈,特分享出來供大家學(xué)習(xí)。智能臺燈側(cè)面圖智能臺燈整體圖智能臺燈俯視圖 作品簡介:隨著時代的進步人們對燈的要求也越來越多,臺燈是普遍
    發(fā)表于 07-27 11:42

    智能小車項目案例演示分享!

    、API借口,以及它的優(yōu)勢和限制,同時,還需要有較強的動手能力。3.智能小車系統(tǒng)功能說明本項目,主要實現(xiàn)如下功能:● 對超聲波傳感器的現(xiàn)場數(shù)據(jù)實時采集并
    發(fā)表于 09-17 22:55

    【HarmonyOS IPC 試用連載 】家用智能監(jiān)控

    在家的情況,現(xiàn)目前市面上的監(jiān)控視頻只能固定安放在某位置,存在盲區(qū)?,F(xiàn)想做一款可移動的監(jiān)控機器人,能遠程通過手機app實現(xiàn)操控
    發(fā)表于 12-18 10:20

    分享一款不錯的優(yōu)化遠程及遙測應(yīng)用的視頻SERDES電路

    分享一款不錯的優(yōu)化遠程及遙測應(yīng)用的視頻SERDES電路
    發(fā)表于 06-03 06:31

    一款簡易的自平衡小車設(shè)計

    和安全隱患,本次課題主要通過在實驗室制作一款簡易的自平衡小車,通過手機藍牙控制,以此模擬真實的使用者駕駛體驗,在模擬實驗中提升平衡車的穩(wěn)定性,解決可能出現(xiàn)的實...
    發(fā)表于 08-06 08:59

    健身智能鏡子:一款健身引流的黑科技產(chǎn)品

    動作時,魔鏡會通過顏色和數(shù)字告訴我們健身動作的標準度和熟練度和完成度。 南京健身智能鏡子除了在健身方面給人們的驚喜以外,它還能連接網(wǎng)絡(luò)變成個手機或電腦,你想聽歌或者是
    發(fā)表于 05-22 15:52 ?558次閱讀

    如何設(shè)計一款四輪智能小車

    如何設(shè)計一款四輪智能小車 此部分共分為五個小節(jié),通過這個 Part 的學(xué)習(xí),我們將了解機器人的概念和組成,對機器人的整體設(shè)計有個明確的思路
    的頭像 發(fā)表于 03-26 10:58 ?642次閱讀
    如何設(shè)計<b class='flag-5'>一款</b>四輪<b class='flag-5'>智能</b><b class='flag-5'>小車</b>