Jetson TX2 与下位机连接问题(串口通讯,开机启动,摄像头动态打开)

串口通讯

问题描述

TX2上深度学习算法布置好了,但是却无法与下位机进行串口通讯。使用J17口,始终不能打开串口;使用J21上的串口,由于其作为Console接口用于调试,会向下位机传输很多调试信息,并且读取串口信息存在问题。

解决办法
  • 官方论坛讨论。经过论坛的解释,原来是官方系统默认没有打开J17的串口通讯(J17同时还兼任板载相机接口的通讯),虽然给出了补丁文件,可是并不知道怎么使用(主要是文件路径找不到啊,欢迎大神指导)。打开patch文件后发现与linuxdev大神给出的回答更改内容一致,于是抱着试一试的态度,参照他给出的具体内容进行操作,最后还真地出现了J17对应的串口号ttyTHS2。下面给出具体的步骤(大部分搬运大神的作品):
  1. 通过sudo apt-get install device-tree-compiler命令安装DTC;
  2. 然后是:
sudo -s
cd /tmp
dtc -I dtb -O dts -o extracted.dts /boot/tegra186-quill-p3310-1000-c03-00-base.dtb
# Search for "serial@c280000" where it is a block of code and not just a single line...
# Change status = "disabled" to status = "okay";
# Build a modified version:
dtc -I dts -o dtb /boot/modified_tegra186-quill-p3310-1000-c03-00-base.dtb extracted.dts
cd /boot/extlinux
# edit extlinux.conf...add this line between MENU LABEL line and LINUX line:
FDT /boot/modified_tegra186-quill-p3310-1000-c03-00-base.dtb

注意:1.部分命令与大神有所不同,大概就是dtc的参数设置,如果报错的话,可以采用man dtc查看命令详情。
2./tmp在重启之后会自动删除文件,可以考虑放到其他盘里面去。

这种做法的大致思路是,将设备树文件(相当于二进制文件?)反编译为源代码,然后更改其某种属性,然后再编译为其二进制文件,最后在开机的时候加载。这样在重启之后通过ls /dev就可以看到ttyTHS2了。

可是在转换到J17之后,各方面表现正常,但是无论是DJI给的串口通讯C语言接口,以及在网上找的C语言接口(同样的代码在笔记本上运行可以和下位机完美通讯),都无法接收数据。为了寻找错误的来源,使用pythonpyserial库进行串口的读写操作,发现能够完美通讯。而且,更为神奇的是,在使用python打开串口之后再使用同样的C程序时,竟然可以实现完美通讯。不得不感叹,这简直是玄学啊!(其实是自己太菜,对于底层了解太少。大神请指导)。所以,最后的解决办法是,开机之后首先运行如下的python脚本:

import serial

ser = serial.Serial('/dev/ttyTHS2')
ser.close()

然后再执行深度学习相关命令。

开机运行

摄像头动态打开

为了减少程序执行对摄像头打开的要求,可以通过一个循环不断地尝试打开摄像头,然后检测摄像头是否打开成功,如果成功则跳出循环。,本来很好的逻辑,但是在Linux(至少是Jetson板载的L4T和笔记本的Ubuntu 14.04)下,使用的视频流处理库V4L(Video for linux)在程序内部不能动态地更新设备,必须要结束程序后才能更新。基于此点,运用如下思路动态打开摄像头:使用一个 runpython.py脚本使用os.system('python camtest.py')命令来不断地调用camtest.py,并根据其返回结果决定是否跳出循环;而camtest.py只需要尝试打开摄像头,并根据摄像头是否打开成功使用exit(number)来返回不同的程序结束状态。注意,使用exit()而不是return

代码如下:
runpython.py

import os
import time

count = 0
while True:
    print count
    if os.system("python camtest.py") == 0:
        print "Open Successfully!"
        break
    else: 
        print "Cam open failed!\n\n"
    count += 1
    time.sleep(1)

camtest.py

import cv2
import time


count = 0
cam = cv2.VideoCapture(1)
if not cam.isOpened():
    exit(1)

# while(True):
    # # Capture frame-by-frame
    # ret, frame = cam.read()
    # gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # # Display the resulting frame
    # cv2.imshow('frame',gray)
    # if cv2.waitKey(1) & 0xFF == ord('q'):
    #    break
exit(0)

总结

将检测摄像头中的runpython.py的代码放到开机执行的pytest.py中,这样在开机之后将先执行串口初始化和摄像头动态打开的任务,即在执行深度算法之前确保所有的基础条件已经具备。这样将条件准备和算法执行分开,具有模块化的一些优点。另外,还可以考虑在无显示器的状态下通过GPIO(Python有对应的库)操作LED或者使用USB扬声器通过语音的方式来报告程序内部执行状态,这样可以增强与人的交互,可以起到缓解紧张的作用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,386评论 25 707
  • 树莓派的串口默认为串口终端调试使用,如要正常使用串口则需要修改树莓派设置。关闭串口终端调试功能后则不能再通过串口登...
    coolwriter阅读 6,251评论 2 6
  • 前言 Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打...
    依依玖玥阅读 3,562评论 6 37
  • 一、遇到的问题 iOS编译报错:linker command failed with exit code 1 (u...
    行者_IT阅读 1,534评论 0 0
  • 《爱的管教》100天分享之29 正确的爱如何表达?让孩子感受到爱?爱是通过表达传递给对方的,良好的沟通才能正确的把...
    化化0422阅读 191评论 0 3