• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Linux的激光焊保護鏡鏡面缺陷檢測系統(tǒng)

      2018-05-23 00:45:47,
      計算機測量與控制 2018年5期
      關鍵詞:內(nèi)核鏡片嵌入式

      ,

      (天津大學 精密儀器與光電子工程學院,天津 300100)

      0 引言

      應用于現(xiàn)代焊裝過程的激光焊接技術在線作業(yè)時會頻頻產(chǎn)生熔渣飛濺。飛濺物將會隨機性地粘附在作業(yè)中的激光焊頭保護鏡片上。由于保護鏡片上粘有金屬熔濺物,激光光束的傳遞光路極有受阻的可能性,將造成焊體受熱不均勻,產(chǎn)生壞焊的現(xiàn)象[1]。國際上的汽車廠商依靠人工定期更換保護鏡片完成對保護鏡片產(chǎn)生缺陷的預防,一些國內(nèi)汽車廠商嘗試加入氣動噴嘴來預防飛濺粒子[2],但均無法滿足低成本、高利用率的要求。

      鏡面檢測本身難度較大,迄今尚無視覺檢測保護鏡片的有效方法。針對以上需求,設計了一種基于嵌入式Linux的激光焊接保護鏡片的視覺鏡面缺陷檢測系統(tǒng)。由于保護鏡片上的飛濺粒子體積小、散布隨機,所以需要高分辨率圖像作為視覺樣本;同時出于高效生產(chǎn)考慮,系統(tǒng)不能采用傳統(tǒng)的字符設備和塊設備的內(nèi)存管理方式,而是選用高效快捷、高健壯性[3]的V4L2框架。以流的方式連續(xù)將高分辨率圖像映射到Linux的用戶空間并利用核心算法進行圖像識別。如果檢測到缺陷,系統(tǒng)通過CAN總線向機器人報警并終止線上作業(yè)。該系統(tǒng)擺脫傳統(tǒng)工業(yè)現(xiàn)場的總機控制,可通過觸摸屏進行人機交互功能,具有良好的便攜性。

      1 系統(tǒng)硬件設計

      基于嵌入式Linux的激光焊接保護鏡片的視覺鏡面缺陷檢測系統(tǒng)的硬件結構框圖如圖1所示。

      圖1 系統(tǒng)硬件結構框圖

      該系統(tǒng)硬件結構以S5PV210微處理器為核心、同時包括電源、DDR2、Flash、UART接口、MT9M031傳感器、AT043TN24液晶顯示觸摸屏、SD卡插槽等。S5PV210微處理器主要負責各模塊間的控制和核心算法的運行。MT9M031傳感器通過以太網(wǎng)口將拍攝的圖像映射到Linux的用戶空間,并通過上層應用程序儲存進DDR2和插入的SD卡中。檢測系統(tǒng)與機器人通過CAN總線連接。

      1.1 S5PV210微處理器

      S5PV210是三星公司推出的一款適用于智能手機和平板電腦等多媒體設備的應用處理器,采用ARM CortexTM-A8內(nèi)核,主頻可達1 GHz并具有豐富的外圍接口。

      1.2 MT9M031傳感器

      MT9M031是由Aptina公司推出發(fā)行的一款1/3英寸高清圖像傳感器。激光焊接保護鏡片的視覺信息通過MT9M031轉化為數(shù)字圖像。由于現(xiàn)代芯片的高度集成化,MT9M031的A/D轉換器集成在芯片內(nèi)部,其外部電路設計十分簡單。

      1.3 AT043TN24液晶觸摸屏

      AT043TN24為CHIMEI INNOLUX公司推出的一款4.3英寸的液晶觸摸屏,常白顯示,通透式,分辨率為480(RGB)*272。

      1.4 CAN轉UART協(xié)議轉換模塊

      由于激光焊接的工業(yè)機器人大多使用CAN總線來進行通訊,所以該系統(tǒng)配有CAN轉UART協(xié)議轉換模塊來適應現(xiàn)場作業(yè)環(huán)境。該模塊內(nèi)部已經(jīng)集成DeviceNet從站協(xié)議棧代碼,可支持高達128字節(jié)I/O報文傳輸,適用于各種干擾強、實時性要求高的工業(yè)環(huán)境。

      2 軟件設計

      2.1 軟件開發(fā)環(huán)境

      基于以上硬件平臺,應用Linux操作系統(tǒng)作為嵌入式開發(fā)環(huán)境。Linux是一款具有高時代性、高移植性的開源操作系統(tǒng),可應用于個人PC機、服務器和嵌入式開發(fā)等[4]。較于其他應用于嵌入式開發(fā)的系統(tǒng),如:WinCE、VxWorks,具有內(nèi)核開源、強大的網(wǎng)絡協(xié)議支持、

      廣泛的硬件支持等獨有的特性。

      在嵌入式Linux開發(fā)的過程中,用戶需要對其內(nèi)核進行修改、編譯,同時增加對應硬件的驅動模塊并在設備樹中進行修改添加。主要操作如下:

      1)裁剪和移植內(nèi)核。只保留嵌入式設備需要的內(nèi)核模塊,節(jié)約空間;

      2)移植和修改驅動模塊。使得系統(tǒng)外設,如MT9MO31傳感器,可被系統(tǒng)識別并訪問;

      3)修改和編譯設備樹。設備樹文件是描述設備的屬性和設置之間的關系,并且將設備樹的配置最終通過驅動作用于實際的設備。該設計大大簡化了驅動的移植與開發(fā),當設備參數(shù)需要修改時,只需編譯設備樹文件,而不需重新編譯內(nèi)核。

      2.2 硬件驅動程序

      2.2.1 MT9M031傳感器驅動

      MT9M031驅動主要完成對相機的圖像采集和配置的功能。圖像從傳感器發(fā)出后,通過CMOS控制器的調(diào)用,完成拍照。方案如圖2所示。

      圖2 MT9M031傳感器驅動方案

      首先在內(nèi)核的設備樹文件下添加MT9M031設備信息:

      mt9m031@5d {

      compatible = "aptina,mt9m031";

      reg = <0x5d>

      port {

      mt9m031_1: endpoint {

      remote-endpoint = <&vpfe0_ep>;

      mclk-frequency = <50000000>;

      ...

      i2c的設備地址為0x5d。compatible屬性的內(nèi)容非常重要,該屬性是和驅動匹配的唯一依據(jù)," aptina" 代表廠家," mt9m031"代表CMOS傳感器型號。" remote-endpoint"代表和CMOS連接的外設," mclk-frequency "代表CMOS的輸入時鐘。

      然后修改vpfe外設側為:

      &vpfe0 {

      ...

      port {

      vpfe0_ep: endpoint {

      remote-endpoint = <&mt9m031_1>;

      if_type = <2>;

      hdpol = <0>;

      vdpol = <0>;

      bus_width = <16>;

      ...

      只需要修改VPFE遠端連接的是MT9M031這款CMOS圖像傳感器即可。其中,if_type代表圖像格式,2代表raw格式。" bus_width "代表總線寬度。" hdpol "代表行同步的極性,0表示高電平有效,下降沿觸發(fā)DMA中斷,1表示低電平有效,上升沿觸發(fā)DMA中斷。" vdpol "代表場同步的極性,0代表高電平有效,1代表低電平有效。

      然后是MT9M031驅動程序的移植。由于Linux內(nèi)核中自帶了OmniVision公司生產(chǎn)的OV2659傳感器的驅動,通過修改其驅動文件完成MT9M031傳感器的驅動移植。關鍵修改如:寄存器的讀寫函數(shù)、增加分辨率支持等。

      首先將OV2659驅動文件中所有的字符串“ov2659”全部替換為“mt9m031”。由于替換眾多,可以在vim編輯器的控制模式下使用全局命令:%s/ov2659/mt9m031/g來進行全文檔范圍內(nèi)的字符串替換。

      下一步參照MT9M031的datasheet在該驅動文件中增加MT9M031的常用寄存器地址以及常量的宏定義,如: define MT9M031_CHIP_ID_REG 0x3000等。

      由于ov2659的i2c寄存器是16位地址,8位數(shù)據(jù),而mt9m031的i2c寄存器是8位地址,16位數(shù)據(jù),需要進行修改。修改如下:

      static int mt9m031_write(struct i2c_client *client, u8 reg, u16 data){

      return i2c_smbus_write_word_swapped(client, reg, data);}

      static int mt9m031_read(struct i2c_client *client, u8 reg, u16 *val){

      u16 *p_val = val;

      *p_val = i2c_smbus_read_word_swapped(client, reg);

      return 0;}

      由于Linux啟動之后,會自動匹配外接設備和驅動。一旦設備匹配成功后,操作系統(tǒng)會自動調(diào)用外設驅動中的probe函數(shù)。probe函數(shù)將進行設備號的讀取。如果讀取到的設備號與CMOS的設備號(芯片ID)相匹配,系統(tǒng)就會根據(jù)設備樹中的配置信息對驅動設備進行初始化配置。配置結束以后,注冊設備,驅動程序獲得外接設備地址。在mt9m031_probe下的mt9m031_detect_sensor函數(shù)中添加以下內(nèi)容,進行復位CMOS芯片、關閉輸出、使能CMOS芯片和讀取CMOS芯片的版本號。該代碼段中省略掉了錯誤處理部分:

      ret = mt9m031_write(client,MT9M031_RESET,1);

      mdelay(5);

      ret = mt9m031_write(client,MT9M031_RESET,0);

      ret = reg_write(client, MT9M031_OUTPUT_CONTROL, 0);

      ret = reg_write(client, MT9M031_CHIP_ENABLE, 1);

      ret = mt9m031_read(client,0x00, &ver);

      mt9m031->id = ver;

      if (mt9m031->id MT9M031_ID)

      dev_info(&client->dev, "Found sensor,the version is %04x ",

      mt9m031->id);

      else{

      dev_err(&client->dev, "Sensor detection failed (%04X, %d) ",

      mt9m031->id, ret);

      ret = -ENODEV;}

      由于在前面設備樹文件下添加MT9M031設備信息中提到的compatilble屬性是和驅動匹配的唯一依據(jù),所以在MT9M031驅動文件中也需要添加和設備樹中compatilble屬性相同的信息。這樣才可以完成設備和驅動的匹配工作。在static const struct of_device_id ar0134_of_match[]中添加語句:{ .compatible = "aptina,mt9m031", }, 。同時在static struct i2c_driver ar0134_i2c_driver中的.driver項段中添加語句:.of_match_table = of_match_ptr(mt9

      m031_of_match), 。

      由于圖像壞點的面積微小,系統(tǒng)要求采集1024x1280的灰度圖像,為了支持這種格式的采集,需要使用分辨率為1024x640的YUYV圖像格式進行替代。而1024x640的分辨率在原有驅動中并沒有,需要在mt9m031_framesizes結構體中增加對這種分辨率的支持:

      static const struct mt9m031_framesize mt9m031_framesizes[] = {

      ...

      { /* 1024x1280 */

      .width = 640,

      .height = 1024,

      .regs = mt9m031_vga,

      ... }

      由于V4L2框架層與MT9M031驅動層之間存在著一個CCDC Driver層(VPFE接口),所以此處需要涉及到VPFE接口驅動的修改。一般的視頻采集涉及到的VPFE接口驅動是不需要修改的,針對該系統(tǒng)的視覺算法對圖像的要求只需要修改內(nèi)核源路徑下的vpfe.c文件即可。該文件所處路徑如下:

      內(nèi)核源路徑/drivers/media/platform/ti-vpfe/vpfe.c

      由于Linux內(nèi)核中自帶驅動的OV2659的像素時鐘是上升沿鎖存數(shù)據(jù),而MT9M031的像素時鐘是下降沿鎖存數(shù)據(jù),需要修改pclk的時鐘極性。注釋掉原有的VPFE配置語句:isif_write(isif, cfg, ISIF_VPFE_CONFIG); ,將參數(shù)cfg改為cfg|0x0001,即將最低位置1表示下降沿鎖存:isif_write(isif, cfg|0x0001, ISIF_VPFE_CONFIG);

      由于微處理器SDK中圖像采集默認丟棄第一行像素,而MT9M031的第一行像素是有效的,不能丟棄,所以要修改VPFE接口驅動對采集圖像第一行像素的處理。在frm_fmt ISIF_FRMFMT_INTERLACED判斷條件成立后的if語句段中注釋掉語句vert_start += 1; 。vert_start變量表示VPFE接口采集圖像的行起始標志。SDK默認第一行像素丟棄,所有vert_start標志自加1,從第二行開始實時采集圖像。注釋掉該語句,VPFE接口直接從第一行像素進行采集。

      以上各個驅動程序修改完成后,將要進行Linux內(nèi)核的重新編譯。當在Linux源碼樹的頂層輸入make menuconfig的時候,會出現(xiàn)內(nèi)核編譯的配置界面。該界面最終生成的就是依賴Kconfig文件(.config文件),將編譯的配置選項傳遞給makefile,從而控制內(nèi)核編譯的過程。編輯內(nèi)核源路徑/drivers/media/i2c/Kconfig文件,新增MT9M031的相關信息:

      config VIDEO_MT9M031

      tristate "APTINA MT9M031 sensor support"

      depends on I2C && VIDEO_V4L2

      select VIDEO_V4L2_SUBDEV_API

      ---help---

      This is a V4L2 sensor-level driver for the APTINA

      MT9M031 camera sensors.

      與此同時接收內(nèi)核編譯配置選項的makefile也需要進行一些修改。打開控制驅動文件mt9m031.c編譯的makefile文件,該文件路徑為:內(nèi)核源路徑/drivers/media/i2c/Makefile。在原ov2659驅動控制編譯語句下面添加MT9M031的驅動控制編譯語句:

      obj-(CONFIG_VIDEO_MT9M031) += mt9m031.o

      最后將剛才修改的MT9M031的驅動文件的文件名改為mt9m031.c,同時其對應的頭文件名改為mt9m031.h。在Linux源碼樹下輸入 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig。選擇Device Drivers->Multimedia support-> Encoders, decoders, sensors and other helper chips -> APTINA MT9M031 sensor support,選擇該編譯選項以后保存退出。然后開始編譯內(nèi)核,即可將MT9M031以上修改的所有驅動全部編譯移植到新的內(nèi)核鏡像文件zImage文件。將該鏡像文件和設備樹編譯后的.dtb文件通過sd卡燒進核心板,就完成了整個視頻采集系統(tǒng)的內(nèi)核移植和系統(tǒng)搭建工作。

      2.2.2 AT043TN24液晶觸摸屏驅動

      對于480x272的電阻屏的驅動,內(nèi)核已經(jīng)提供,但是刷新方式為橫屏模式。由于圖像的分辨率的關系,利用豎屏顯示的支持方案效果最佳。只需要在QT編譯的過程中,加入支持旋轉的編譯選項,將QT的庫文件更新到文件系統(tǒng)中,然后在系統(tǒng)啟動配置件中增加旋轉屏幕的參數(shù)即可。

      2.3 V4L2圖像采集程序

      V4L2框架下可以在程序中直接打開圖像設備獲取圖像設備的能力,例如是否支持內(nèi)存映射、設置圖像格式(YUYV/UYVY)等。向驅動申請幀緩沖[5],并且映射到用戶空間。將映射到用戶空間緩沖區(qū)入隊列[6],即可啟動采集。啟動采集以后,輪詢是否采集到數(shù)據(jù),當采集到以后,將幀緩沖出隊列,對圖像數(shù)據(jù)進行圖像處理或者傳輸保存。出隊列的緩沖使用完畢以后,繼續(xù)入隊列,等待下一次采集。當采集條件滿足,例如采集到設定的幀數(shù)以后,停止采集,并且關閉設備。圖像采集程序流程圖如圖3所示。

      2.4 圖像識別算法

      該系統(tǒng)的圖像識別核心算法是基于OpenCV2庫函數(shù)實現(xiàn)的。當進入圖像處理算法流程后,首先在圖像內(nèi)尋找保護鏡片。因為同軸光會經(jīng)過透射反射進入照相機,所以圖像內(nèi)的鏡片應該為亮白色。如果找到則利用霍夫變換[7]來定位鏡面區(qū)域,并判斷是否發(fā)生定位區(qū)域越界。如果發(fā)生越界則提示鏡片不存在,未發(fā)生越界則取定位區(qū)域的外接矩形為感興趣區(qū)域。在外接矩形感興趣區(qū)域內(nèi)首先進行保護鏡片以外、外接矩形以內(nèi)的區(qū)域置白,將隸屬于以上區(qū)域中的像素點的像素值全部設置為255。之后在保護鏡片內(nèi)部進行閾值設定和像素值二值化,目的是為了檢索圓形鏡片區(qū)域中的壞點輪廓。最后經(jīng)過計算檢索到的壞點像素面積以及比較其與預先人工設定的壞點面積的大小,得到最終的壞點判斷。

      圖3 圖像采集程序流程圖

      3 實驗結果分析

      3.1 實驗數(shù)據(jù)

      為了驗證該基于嵌入式Linux的激光焊接保護鏡片的視覺鏡面缺陷檢測系統(tǒng)的設計有效性,特進行了相關的實驗操作和數(shù)據(jù)分析。實驗共分為兩種:1.實驗室條件下,對帶有熔渣的缺陷保護鏡片與無缺陷保護鏡片混合檢測;2.在焊接現(xiàn)場對線上作業(yè)的保護鏡片進行檢測。實驗數(shù)據(jù)如圖4所示。

      圖4 不同條件下對帶有缺陷的保護鏡片和無缺陷的保護鏡片的混合檢測

      3.2 系統(tǒng)性能分析

      該鏡面缺陷檢測系統(tǒng)的實物設備如圖5所示。由實驗數(shù)據(jù)可知,在實驗室條件下,混合檢測的正檢率一直保持在100%,系統(tǒng)搭建的有效性和核心算法的正確性得以驗證??墒窃诠I(yè)現(xiàn)場中,熔渣的飛濺導致系統(tǒng)的照相機鏡頭上會粘附熔渣,直接影響到采圖的客觀真實性。因此隨著檢測樣本的增加,正檢率隨意性變化。

      3.3 有關照相機鏡頭除雜的補充實驗

      基于飛濺物粘附在照相機鏡頭上導致誤檢的問題,擬將一個通氣導管放置在照相機鏡頭旁側并時刻通氣流斜向吹擊照相機鏡頭。這樣成功消除了飛濺物落附在照相機鏡頭上的可能性。增添通氣除雜環(huán)節(jié)后,經(jīng)核心算法處理后的鏡片圖像如圖6所示。

      圖5 鏡面缺陷檢測系統(tǒng)的實物設備圖

      圖6 系統(tǒng)采集到的缺陷保護鏡片的信息圖像

      4 結論

      本設計是服務于現(xiàn)汽車生產(chǎn)線上激光焊接保護鏡片的缺陷檢測。首先采用了S5PV210微處理器,提高運算速度,降低采集能耗;然后選擇MT9M031圖像傳感器并將保護鏡片圖像通過DMA映射到用戶空間并使用V4L2框架以流的方式進行圖像采集,這樣可以快速高效地從相機處獲取高分辨率的圖像信息;設計CAN轉UART協(xié)議轉換模塊和液晶觸摸顯示屏AT043TN24,提高該系統(tǒng)的人機交互能力和現(xiàn)場適應度;最后基于opencv2函數(shù)庫的核心算法編寫:當檢測出壞點時,紅色線標記輪廓并報警。實驗證明了本系統(tǒng)設計的有效性和算法的正確性,補充實驗進一步完善了該系統(tǒng)對工業(yè)現(xiàn)場的適應性。

      參考文獻:

      [1] 陳 勰. 啟辰白車身激光焊接質(zhì)量影響因素研究[D].長沙:湖南大學,2011.

      [2] 唐霞輝, 朱海紅, 朱國富. 激光焊接專用氣動噴嘴的研究[J]. 激光技術, 2000, 24(2): 95-98

      [3] Michael H Schimek, Bill Dirks, Hans Verkuli. Video for Linux two API specification [EB/OL]. http://v4l2spec.bytesex.org/ v4l2spec/v4l2.pdf.2008.

      [4] 鄒自明,劉曉陽. 基于嵌入式Linux的結構化道路車道線識別系統(tǒng)的研究[J]. 計算機測量與控制,2014,22(4):1260-1263

      [5] 史 濤,裴海龍. 基于Linux的嵌入式實時視頻跟蹤系統(tǒng)[J]. 計算機測量與控制,2014,22(5):1523-1526

      [6] 徐 家, 陳 奇. 基于V4L2的視頻設備驅動開發(fā)[J]. 計算機工程與設計, 2010, 31(16):3569-3572

      [7] A. L. Fisher, P. T. Highnam. Computing the Hough transform on a scan line array processor[J], IEEE Trans. Pattern Anal. Mach. Intel, 1989, 11(3):262-265.

      猜你喜歡
      內(nèi)核鏡片嵌入式
      萬物皆可IP的時代,我們當夯實的IP內(nèi)核是什么?
      強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      基于嵌入式Linux內(nèi)核的自恢復設計
      Linux內(nèi)核mmap保護機制研究
      搭建基于Qt的嵌入式開發(fā)平臺
      防藍光鏡片那些事……
      如何驗配中老年漸進鏡片
      嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應用
      鏡片科技
      仿生鏡片讓你告別近視
      贞丰县| 类乌齐县| 兴海县| 景谷| 浦东新区| 景洪市| 从化市| 惠东县| 乌拉特后旗| 沈丘县| 临高县| 名山县| 北安市| 伊宁县| 安义县| 商城县| 皋兰县| 肥城市| 海盐县| 湖南省| 英山县| 晋州市| 古交市| 偃师市| 鹤山市| 庆云县| 察隅县| 兰坪| 三亚市| 天等县| 石泉县| 双牌县| 昂仁县| 海宁市| 遵义县| 东台市| 吉隆县| 托克逊县| 保康县| 施甸县| 天祝|