您的位置:首页 > 产品设计 > UI/UE

ros_arduino_bridge功能包集的使用错误及解决方法总结

2016-06-09 16:30 387 查看
在使用该功能包遇到了很多问题,下面是我遇到的问题及其解决办法。这篇文章是我的博文:ros_arduino_bridge功能包的使用的续文,如有不足之处,欢迎您的来信,我的email:chaoyanglius@outlook.com.

欢迎广大网友批评指正,如需转载请注明出处。

未能启动arduino_node节点

在你使用
roslaunch ros_arduino_python arduino.launch
启动该节点之后,可能会遇到下面的错误:

ERROR: cannot launch node of type [ros_arduino_python/arduino_node.py]: can’t locate node [arduino_node.py] in package [ros_arduino_python].

产生这个错误的主要原因有两种:

你的电脑并未连接Arduino板,或者没有连接好,这时你就需要检查一下连接了;

如果连接完好,那么很可能就是你对文件arduino_node.py没有可执行的权限,所以只要使用命令
chomd a+x arduino_node.py
给它加上可执行权限就行了.

未能确定Arduino的波特率

你也许遇到过这样的错误:

Connecting to Arduino on port /dev/ttyACM0 …

Failed to determine baud rate of Arduino so aborting!

这个问题其实比较棘手。其实在启动之前你应该使用串口监视器对这个Arduino sketch进行测试的,如果没有问题的话在进行下一步的配置。笔者曾使用默认的baud rate(57600),但是并不能从串口监视器读出正确的值,甚至什么也输不出来。我曾今尝试过修改代码中默认的波特率,但是代码的原作者却坚持认为不应该修改它,但是我将其修改成9600却成功地从串口监视器得到了预期的值。

可是我再次运行这个节点的时候,还是会出现这样的错误。最后该功能包的原作者给了我一个这样的答案:你用的那个分支(master)还在开发中,可能会存在问题,你可以尝试使用indigo-devel。其实这个答案让我很难接受,他并没有告诉我具体什么原因导致的这样的问题,而是以这样的一个理由来搪塞我。更好况,在github的惯例中,master分支应该是一个随时可以使用的稳定版,仓库管理者应该即时合并分支。不过,我也只好按照它的建议使用了另一个分支。果然,换了一个分支之后就不会出现这样的错误了。

所以我这样总结这个问题的解决方法:

首先测试Arduino sketch(即功能包里的ros_arduino_firmware文件夹里的代码)是否运行正常;

如果仍然出现这样的错误,那么就请检查你是用的那个分支是否与你的板子或电脑兼容.

之后我会继续研究到底是什么原因导致的这个错误。

命令执行错误

Connecting to Arduino on port /dev/ttyACM0 …

Serial Exception:

(<\class ‘serial.serialutil.SerialException’>, SerialException(), <\traceback object at 0x7fbc064c7c20)>

Traceback follows:

Traceback (most recent call last):

File “/home/bird/catkin_ws/src/ros_ab_indigo/ros_arduino_python/src/ros_arduino_python/arduino_driver.py”, line 75, in connect

raise SerialException

SerialException

Cannot connect to Arduino!

[arduino-1] process has died [pid 2849, exit code 1, cmd /home/bird/catkin_ws/src/ros_ab_indigo/ros_arduino_python/nodes/arduino_node.py __name:=arduino __log:=/home/bird/.ros/log/3945ca82-2e1e-11e6-abd3-00e04c7df3a3/arduino-1.log].

log file: /home/bird/.ros/log/3945ca82-2e1e-11e6-abd3-00e04c7df3a3/arduino-1*.log

all processes on machine have died, roslaunch will exit

shutting down processing monitor…

… shutting down processing monitor complete

done

如果你得到这样的错误,很可能就是因为从serial获取的输出结果有问题。你在python脚本文件的相应位置输出获取的结果,你就会发现结果是错误的。但是究竟是什么原因导致这样的问题呢?直接原因就是串口的实际波特率与你所设置的波特率大小不一致。

这时你就需要检查一下你给arduino所设置的波特率是否和你的配置文件(my_arduino_params.yaml)中的波特率一致。笔者曾近犯过这样一个愚蠢的错误:arduino板已经被其他人用过,而我忘记了重新向arduino上传ros_arduino_firmware中的代码,结果就出现了上面的错误。

另外还有一个比较隐晦的原因,就是你同时启动了Arduino IDE的串口监视器,导致它和这个节点争夺serial,于是就造成了错误或者不完整的信息。当然,类似多个程序使用同一个串口的原因也会导致这样的错误。

参考资料

https://github.com/hbrobotics/ros_arduino_bridge/issues/27




本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  arduino python ros