我有一个 Arduino Mega 2560 发送数据,我的环境是 Ubuntu 14.04,它是一个 python ROS 节点。
问题是,当我使用 Arduino IDE 中的串行监视器或绘图仪查看数据时,它运行良好,但是当我运行我的 python 脚本时,它出错了,这是我的 python 脚本:
import serial
import roslib; roslib.load_manifest('robot_skin')
import rospy
from robot_skin.msg import FloatArray
def setup_serial(dev_name, baudrate):
try:
serial_dev = serial.Serial(dev_name, timeout=1)
if(serial_dev == None):
raise RuntimeError("robotis_servo: Serial port not found!\n")
serial_dev.setBaudrate(baudrate)
serial_dev.setParity('N')
serial_dev.setStopbits(1)
serial_dev.open()
serial_dev.flushOutput()
serial_dev.flushInput()
return serial_dev
except (serial.serialutil.SerialException), e:
raise RuntimeError("robotis_servo: Serial port not found!\n")
def get_adc_data(serial_dev, num_adc_inputs):
ln = serial_dev.readline()
l = map(int, ln.split(','))
if len(l) != num_adc_inputs:
rospy.logwarn('Something fishy with the serial port.')
serial_dev.flush()
l = get_adc_data(serial_dev, num_adc_inputs)
return l
if __name__ == '__main__':
dev_name = '/dev/ttyACM0'
baudrate = 115200
serial_dev = setup_serial(dev_name, baudrate)
pub = rospy.Publisher('/arduino/ADC', FloatArray)
rospy.init_node('adc_publisher_node')
for i in range(10):
ln = serial_dev.readline()
rospy.loginfo('Started publishing ADC data')
while not rospy.is_shutdown():
fa = FloatArray()
fa.header.stamp = rospy.Time.now()
fa.data = get_adc_data(serial_dev, 6)
pub.publish(fa)
serial_dev.close()
当我运行这个时,它会转到 serial_dev == NONE,出现错误。
我用 Google 搜索了很长时间来解决这个问题,我做了两处更改,但仍然不起作用:
我使用 Arduino IDE 中的串行监视器和绘图仪进行以下操作:
sudo chmod a+rw /dev/ttyACM0
我将自己添加到了拨号组使用
sudo adduser $USER dialout
但仍然有同样的错误......
谢谢。