树莓派3B开启串口并运行ROS的串口节点所遇问题
运行平台是树莓派3B,系统为ubuntu16.04 mate
一、树莓派3B串口配置问题:
(一)树莓派3B的板载蓝牙和串口互相冲突,两者只能用其一,使用串口就必须关掉蓝牙,将硬件串口恢复给GPIO的串口。恢复硬件串口的方法如下:
1、下载 pi3-miniuart-bt-overlay 文件,解压出pi3-miniuart-bt-overlay.dtb文件,并将dtb文件拷贝到/boot/overlays/目录下。
2、编辑/boot目录下的config.txt文件
sudo nano /boot/config.txt
在文件末尾添加以下两行:
dtoverlay=pi3-miniuart-bt-overlay force_turbo=1
3、编辑/boot目录下的cmdline.txt文件
sudo nano /boot/cmdline.txt
修改为如下内容:
dwc_otg.lpm_enable=0 console=serial1,115200 console=tty1 root=/dev/mmcblk0p2 kgdboc=serial1,115200 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
保存并退出。
(二)关闭板载蓝牙方法:
1、输入下面命令关闭hciuart:
sudo systemctl disable hciuart
2、编辑/lib/systemd/system/hciuart.server 将 “ttyAMA0”(或者serial0)修改为“ttyS0”
保存并退出。
3、更新并重启
sudo apt-get update sudo apt-get upgrade sudo reboot
(三)关闭串口登录树莓派的通道并使能串口
打开设置:
sudo raspi-config
依次选择Interfacing Options->serial->NO->YES
设置结果:
二、开启ROS串口节点所遇问题
运行ROS节点却发现打不开串口,原因一般为以下两种:
(一)串口号对不上问题
解决方法:
1、查看一下树莓派的串口号是否正确,查看指令如下:
ls -l /dev |grep ttyUSB
结果如下:
ROS节点程序中用的是”/dev/ttyUSB0”串口端口号,因此端口号能够对应起来,否则的话需要修改程序中的端口号,使得程序中的端口号和设备的端口号相对应。
(二)串口开启权限问题
串口的开启需要root权限,节点运行成功却打不开串口,可能是用户没开启root权限,解决方法如下:
增加udev规则
创建文件/etc/udev/rules.d/70-ttyusb.rules:
sudo vim /etc/udev/rules.d/70-ttyusb.rules
在文件内添加:
KERNEL==”ttyUSB[0-9]*”, MODE=”0666”
重新插入串口设备,普通用户就拥有开启串口的权限了