Scripts Python não podem encontrar a porta serial ttyACM0

0

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:

  1. Eu usei e depois o Serial Monitor e o Plotter no meu Arduino IDE funciona depois disso: sudo chmod a+rw /dev/ttyACM0

  2. Eu adicionei-me ao grupo de discagem usando sudo adduser $USER dialout

Mas ainda tem o mesmo erro ......

Obrigado.

    
por Shawn 30.03.2018 / 15:55

0 respostas