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

在使用该功能包遇到了很多问题,下面是我遇到的问题及其解决办法。这篇文章是我的博文: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,于是就造成了错误或者不完整的信息。当然,类似多个程序使用同一个串口的原因也会导致这样的错误。

参考资料

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值