我正在使用OS X Yosemite并尝试使用pip和python 2.7设置pymavlink键入sudo pip install pymavlink并安装得很漂亮试图将其与

from pymavlink import mavlinkv10 as mavlink

解释器抛出这个错误:
文件“/library/python/2.7/site packages/pymavlink/mavlinkv10.py”,第10行,在
从…generator.mavcrc导入x25crc
值错误:试图在顶级包之外进行相对导入
我想我理解这个错误,可以通过将包的隐式导入“…generator”更改为显式的“pymavlink.generator”来手动“修复”。我的问题是,使用pip安装和导入这个包的正确方法是什么我不可能是第一个遇到这个问题的人:)

最佳答案

看起来没有人会用教科书上的答案来指责这一点,所以我将继续发布我是如何在树莓pi上拼凑出一个布什联盟python mavlink安装的,希望将来有人会发布一个合法的解决方案,来说明如何正确使用pip。欢迎任何评论/修正!
键入“sudo pip install pymavlink”安装pymavlink。这将把pymavlink模块(以及需要修改的mavlinkv10.py文件)安装到pi“/usr/local/lib/python2.7/dist packages/pymavlink/”上的以下目录中。
导入pymavlink模块,在python代码的开头使用以下行“from pymavlink import mavlinkv10 as mavlink”
从pymavlink存储库运行pymavlink示例代码时,解释器将首先抛出以下错误:

File "/Library/Python/2.7/site-packages/pymavlink/mavlinkv10.py"
in from ...generator.mavcrc import x25crc
ValueError: Attempted relative import beyond toplevel package

看起来mavlinkv10.py试图从3个父目录“up”(我认为?)。由于“generator”目录实际上是mavlinkv10.py所在的子目录,因此我在mavlinkv10.py中更改了以下内容:
changed this:  from ...generator.mavcrc import x25crc
to this:       from generator.mavcrc import x25crc

接下来,当您运行python mavlink代码试图创建(编码)新的mavlink消息时,解释器将抛出以下错误:
File "/usr/local/lib/python2.7/dist-packages/pymavlink/mavlinkv10.py", line 1053, in pack
return MAVLink_message.pack(self, mav, 137, struct.pack('<QI', self.time_unix_usec, self.time_boot_ms))
File "/usr/local/lib/python2.7/dist-packages/pymavlink/mavlinkv10.py", line 110, in pack
crc.accumulate(chr(crc_extra))
File "/usr/local/lib/python2.7/dist packages/pymavlink/generator/mavcrc.py", line 18, in accumulate
tmp = b ^ (accum & 0xff)
TypeError: unsupported operand type(s) for ^: 'str' and 'int'

似乎mavlinkv10在pack()函数中的额外crc计算失败。您可以通过关闭mavlinkv10的pack()函数中额外的crc函数来“修复”这个错误。在mavlinkv10.py中注释掉这两行:
#if True: # using CRC extra
#    crc.accumulate(chr(crc_extra))

最后一件事您还需要禁用mavlinkv10.py中decode()函数中的crc2计算在mavlinkv10.py中注释掉这些行:
#if True: # using CRC extra
#    crc2.accumulate(chr(crc_extra))
#if crc != crc2.crc:
#    raise MAVError('invalid MAVLink CRC in msgID

此时,您应该能够运行pymavlink示例代码,尽管我不清楚禁用“额外crc”计算将如何影响mavlink的可靠性(可能不是正面的)。

09-10 18:25