※ [本文转录自 Electronics 看板 #1Wkdbk0m ]
作者: hydebeast (晴日橘子) 看板: Electronics
标题: [问题] arduino uno跟jetson nano的沟通问题
时间: Sat Jun 5 03:05:12 2021
各位先进好
小弟打算做一台简单的无人车 可以根据影像辨识的结果来做不同应对
无人车方面用的是irobot create第一代
然后利用arduino uno来控制irobot的行走 jetson nano负责做影像辨识
若是jetson辨识到特定的人 他就会传特定讯号给arduino 让arduino把车停下来
并根据辨识到的是谁来做不同反应(发出声音
首先irobot方面 小弟用arduino控制起来没什么问题 简单的行走、避障跟发出声音都OK
另外arduino跟jetson沟通的方面 因为arduino的UART逻辑输出是0V~5V
而jetson的GPIO的UART逻辑输出则是0V~3.3V 所以我有加了一个level shifter
我试过让两台互传讯息并用jetson印出内容 基本上也OK
小弟遇到问题的地方是三者一起运行的时候
首先这是arduino的程式码
https://ideone.com/L8uTXT
Jetson.Serial是对jetson通讯的串口 而face变量则是用来存jetson传过来的讯号
里面大多函式都是用来控制车子的 重点是在patrol()跟scan()两个函式
patrol()是arduino的loop 他会让车子行走0.1秒之后先判断有没有撞到东西(bump()
接着再scan()看看jetson有没有输入
https://ideone.com/fqHFyw jetson的程式码
jetson基本上就是不停的传100这个讯号 直到arduino回传OK表示收到了才停止
而arduino的scan()则是在读到东西后会先让车子停下两秒
如果读到100或200会回传OK
然后根据读到的是100或是200来发出不同的声音(现在的测试程式jetson只会送100
之所以我会让jetson在收到OK前不断送讯号 是因为我怕jetson送讯号跟arduino读讯号会不同步
前面说的测试jetson连arduino的时候 我是用while(!Serial)的方式
让arduino直到收到东西才读取
但现在因为还要让车子动 所以我是用每0.1秒读一次讯号的方式
另外因为pyserial似乎只能传送字串 但arduino的C语言判断字串是否相等很麻烦
所以我是jetson传100 然后arduino再用toInt()转成数字100之后再做判断
不过我用这个方式做测试 车子只会不停的行走
先不说收到100后发出声音
车子连有收到讯号先停下两秒这个动作都不会出现 代表scan()后根本都没进到循环
想请问各位大大 不知道问题是出在哪里呢...
小弟的问题如果很笨请见谅...本身对开发板 机器人 UART这些东西都是新手
光是arduino跟jetson互传讯息就用了好久...
再麻烦各位大大帮个忙了...