当然,我可以帮助您启动并运行它。
从 StackOverflow 帖子中,您似乎正在将堆栈检出到 /opt/ros/diamondback。这不好,因为它是系统路径。您需要安装到本地路径。存储库上“只读”的原因是您无权更改代码 - 它仍然可以在您的本地计算机上正常工作。我在这里花了很多时间展示如何使用这个包(至少是 python 版本):
http://www.ros.org/wiki/hrl_rfid
我将尝试快速安装它.... 运行以下命令:
cd
mkdir sandbox
cd sandbox/
svn checkout http://gt-ros-pkg.googlecode.com/svn/trunk/hrl/hrl_rfid hrl_rfid (double-check that this checkout works OK!)
将以下行添加到 bashrc 的底部,告诉 ROS 在哪里可以找到新包。(你可以使用“gedit ~/.bashrc”)
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$HOME/sandbox/hrl_rfid
现在执行以下命令:
roscd hrl_rfid (did you end up in the correct directory?)
rosmake hrl_rfid (did it make without errors?)
roscd hrl_rfid/src/hrl_rfid
至此,一切实际上都已正确安装。默认情况下,ros_M5e.py 假定阅读器位于“/dev/robot/RFIDreader”。除非您已经更改了 udev 规则,否则您的机器上不会出现这种情况。我建议运行代码:
http://www.ros.org/wiki/hrl_rfid
使用 iPython(一个命令行 python 提示符,可让您一次执行一个 python 命令)以确保一切正常(将 /dev/ttyUSB0 替换为您的 RFID 阅读器连接的任何设备):
import lib_M5e as M5e
r = M5e.M5e( '/dev/ttyUSB0', readPwr = 3000 )
r.ChangeAntennaPorts( 1, 1 )
r.QueryEnvironment()
r.TrackSingleTag( 'test_tag_id_' )
r.ChangeTagID( 'test_tag_id_' )
r.QueryEnvironment()
r.TrackSingleTag( 'test_tag_id_' )
r.ChangeAntennaPorts( 2, 2 )
r.QueryEnvironment()
这意味着底层库工作得很好。接下来,测试 ROS(确保“roscore”正在运行!),将其放入 python 文件并执行:
import lib_M5e as M5e
def P1(r):
r.ChangeAntennaPorts(1,1)
return 'AntPort1'
def P2(r):
r.ChangeAntennaPorts(2,2)
return 'AntPort2'
def PrintDatum(data):
ant, ids, rssi = data
print data
r = M5e.M5e( '/dev/ttyUSB0', readPwr = 3000 )
q = M5e.M5e_Poller(r, antfuncs=[P1, P2], callbacks=[PrintDatum])
q.query_mode()
t0 = time.time()
while time.time() - t0 < 3.0:
time.sleep( 0.1 )
q.track_mode( 'test_tag_id_' )
t0 = time.time()
while time.time() - t0 < 3.0:
time.sleep( 0.1 )
q.stop()
好的,现在一切正常。您可以根据自己的设置创建自己的节点:
#!/usr/bin/python
import ros_M5e as rm
def P1(r):
r.ChangeAntennaPorts(1,1)
return 'AntPort1'
def P2(r):
r.ChangeAntennaPorts(2,2)
return 'AntPort2'
ros_rfid = rm.ROS_M5e( name = 'my_rfid_server',
readPwr = 3000,
portStr = '/dev/ttyUSB0',
antFuncs = [P1, P2],
callbacks = [] )
rospy.spin()
ros_rfid.stop()
或者,回复我,我可以调整 ros_M5e.py 以获取可选的“portStr”——尽管我建议您自己制作,以便您可以合理地命名天线。此外,我强烈建议设置 udev 规则以确保 RFID 阅读器始终分配给同一设备: http ://www.hsi.gatech.edu/hrl-wiki/index.php/Linux_Tools#udev_for_persistent_device_naming
BUS=="usb", KERNEL=="ttyUSB*", SYSFS{idVendor}=="0403", SYSFS{idProduct}=="6001", SYSFS{serial}=="ftDXR6FS", SYMLINK+="robot/RFIDreader"
如果您不这样做... 无法保证阅读器将始终在 /dev/ttyUSBx 中枚举。
如果您还有其他问题,请告诉我。
~Travis Deyle ( Hizook.com )
PS——你是否将 ros_M5e.py 修改为“from hrl.hrl_rfid.msg import RFIDread”?在 repo 中,它是“从 hrl_rfid.msg 导入 RFIDread”。后者是正确的。只要您正确定义了 ROS_PACKAGE_PATH,并且在包上运行了 rosmake,那么 import 语句应该可以正常工作。另外,我不建议将与 ROS 相关的问题发布到 StackOverflow。这里很少有人会熟悉 ROS 生态系统(非常复杂)。请在此处发布问题:
http://answers.ros.org/
http://code.google.com/p/gt-ros-pkg/issues/list