澳门新葡亰赌995577ROS—-ROSSerial的使用

澳门新葡亰赌995577 10

1.  python 工具

OS: ubuntu 16.04

#coding = utf-8

import pty
import os
import select

def mkpty():
    master1, slave = pty.openpty()
    slaveName1 = os.ttyname(slave)
    master2, slave = pty.openpty()
    slaveName2 = os.ttyname(slave)
    print '\nslave device names: ', slaveName1, slaveName2
    return master1, master2

if __name__ == "__main__":
    master1, master2 = mkpty()
    while True:
        rl, wl, el = select.select([master1, master2], [], [], 1)
        for master in rl:
            data = os.read(master, 128)
            print "read %d data." %len(data)
            if master == master1:
                os.write(master2, data)
            else:
                os.write(master1, data)

ROS:kinetic

使用方法:

1.安装arduino  sudo apt-get install arduino

  启动:在终端里运行“python
mkptych.py&”,这样就可以生成一个基于pty(伪终端)的虚拟端口对,两个设备名会显示在终端里。然后就可以利用这两个设备名在本机上进行虚拟串口之类的调试。

2.安装ros包  sudo apt-get install ros-kinetic-rosserial-arduino

  关闭:使用完后用ps查看这个python进程的pid号,然后kill掉即可。

sudo apt-get install
ros-kinetic-rosserial

澳门新葡亰赌995577 1

3.设置arduino的SketchBook,将ros_lib弄进去,关于SketchBook的文件目录,在File->Preferences

 

澳门新葡亰赌995577 2

2.  Ubuntu下 cutecom
图像界面串口调试工具(参考:https://blog.csdn.net/zhaoqi2617/article/details/72238546)

也可以自己定义该目录.

  (1)终端下载命令:sudo apt-get install cutecom 

cd <sketchbook>/libraries 如果没有libraries目录,自己创建这个目录就可以啦,如果里面已经包含ros_lib目录,请使用rm -rf ros_lib ,防止发生冲突.

rosrun rosserial_arduino make_libraries.py .   用来生成ros_lib库,(注意使用.,当前目录)

  (2)通过终端打开软件:sudo
cutecom (需要root权限,否则无法打开串口)

澳门新葡亰赌995577 3

  (3)在 Device 中填写上边生成的虚拟串口号  /dev/pts/24   和 
 /dev/pts/25,  Input  中输入文字 ,点击回车发送测试

 

澳门新葡亰赌995577 4

 由于ubuntu下截图不怎么好用,就用了官网的图,道理是一样的。可以依据这些demo来制作ardunio下的节点,和服务。

 

关于arduino IDE的串口链接,在 Tools->Serial
Port下,选材/dev/ttyACM×(× 可能是0,1,2,3…)

3.  python 编写测试程序

关于brltty和Arduino之间冲突,但在unbuntu
16.04下没什么影响,在Tools->Serial Port
依然可以看到/dev/ttyACM*,并且成功烧入。

  (参考 https://blog.csdn.net/itas109/article/details/78874165 
https://blog.csdn.net/jiangchao3392/article/details/75107330)

并不是一定要卸载brltty,这个我觉得要实际试过才可以这么说.

  (1)1.安装pyserial(安装 serial module)

rosrun rosserial_python serial_node.py /dev/ttyACM* 用来启动rosserial节点。

跑的时候,如果arduino 串口监听,rosserial一起启动,经常导致串口异常,导致串口插拔,才可以重新使用。
这个问题,比较不好理解,linux串口非独占的。目前还在解决中。

由于linux串口的跳动,必须固定串口。

     这里区分python2和 python3:

澳门新葡亰赌995577 5

    

 

1 sudo apt install python-pip //python2
2 sudo apt install python3-pip    //python3
lsusb 可以查看当前的usb口。

当然也可以用dmesg

  (2)然后通过:

澳门新葡亰赌995577 6

1 pip install pyserial    //python2
2 pip3 install pyserial   //python3

可以查看具体的设备。我觉得用arduino 的serial port看起来更合理点。

  (3)测试程序

如果当前arduino的串口好是/dev/ttyACM0,

 1 import serial
 2 from time import sleep
 3 
 4 def recv(serial):
 5     while True:
 6         data = serial.read_all()
 7         if data == '':
 8             continue
 9         else:
10             break
11         sleep(0.02)
12     return data
13 
14 if __name__ == '__main__':
15     serial = serial.Serial('COM5', 9600, timeout=0.5)  #/dev/ttyUSB0
16     if serial.isOpen() :
17         print("open success")
18     else :
19         print("open failed")
20 
21     while True:
22         data =recv(serial)
23         if data != b'' :
24             print("receive : ",data)
25             serial.write(data) #数据写回

使用udevadm info /dev/ttyACM0 查看串口的具体信息。

 

澳门新葡亰赌995577 7

  

这中方式查看我觉得不是很好,就使用lsusb -vv

  

可以看得更清楚

 

澳门新葡亰赌995577 8

参考文章:  https://blog.csdn.net/a844651990/article/details/80624019

可以清楚的看到 idVendor 和idpProduct,这两个是自定义串口的重要参数。

       https://blog.csdn.net/haifengid/article/details/51996613

 

       https://blog.csdn.net/itas109/article/details/78874165

根据这些信息重写串口设备命名规则,采用Linux的udev来自定义规则来管理设备名称

 

(1)https://unix.stackexchange.com/questions/66901/how-to-bind-usb-device-under-a-static-name?noredirect=1&lq=1

注:解决 ImportError: No module named ‘serial’ 问题

  https://blog.csdn.net/jiangchao3392/article/details/75107330

具体步骤如下。

/etc/udev/rules.d/10-local.rules

修改这个文件,我发现不存在这个文件(ubuntu 16.04),那么我 touch
10-local.rules
(其实这个文件名可以随便定义,但是毕竟不是太了解,所以按照Q&A来做,防止无法复现)

接着 根据查询的idVendor 和idpProduct

ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="MyAruduino"添加到10-local.rules文件中
`udevadm info -a -p $(udevadm info -q path -n /dev/ttyACM0) `

然后重启电脑。

澳门新葡亰赌995577 9

但发现Arduino
IDE中显示的还是/dev/ttyACM0,所以我觉得直接使用cutecom串口调试工具来使用.

cutecom -> sudo apt-get install cutecom(安装)

澳门新葡亰赌995577 10

Device:直接写/dev/MyArduino ,下拉是无法选择的,