Eu tenho um Arduino Mega 2560 enviando dados, meu ambiente é o Ubuntu 14.04, é um nó ROS python.
O problema é que ele funciona bem quando eu uso o Serial Monitor ou o Plotter no Arduino IDE para ver os dados chegando, mas quando executo meus scripts python, deu errado, estes são meus scripts 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()
quando eu executo isso, ele vai para serial_dev == NONE, tem um erro.
Eu pesquisei por um longo tempo para resolver isso, fiz duas alterações, mas isso ainda não funciona:
Eu usei e depois o Serial Monitor e o Plotter no meu Arduino IDE funciona depois disso: sudo chmod a+rw /dev/ttyACM0
Eu adicionei-me ao grupo de discagem usando sudo adduser $USER dialout
Mas ainda tem o mesmo erro ......
Obrigado.