实验设计 | 绑定串口

[2020/11/18更新]

说明:对于新配置的ubuntu16.04,为了使用TDT 2020 ICRA代码,针对串口部分需要做以下工作:

  1. 绑定串口
  2. 修改serial代码
1. 参照大疆文档配置端口

根据硬件接口(串口,USB或者ACM)来配置/etc/udev/rules.d中的udev文件,分别实现STM32设备虚拟串口和激光雷达的设备绑定:
首先连 接激光雷达 和 STM32设备的虚拟串口,lsusb可以查看Vendor和Product的ID,然后创建并配置/etc/udev/rules.d/roborts.rules文件

  1. 查看 lsusb可以查看Vendor和Product的ID
    在这里插入图片描述
tdt@tdt:~$ lsusb 
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 8087:0a2b Intel Corp. 
Bus 001 Device 007: ID 15d1:0000  	//-- 雷达设备  idVendor:15d1   idProduct:0000
Bus 001 Device 008: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter		//!! stm32设备
Bus 001 Device 005: ID 05a3:9230 ARC International	//!! 单目相机
Bus 001 Device 006: ID 046d:c534 Logitech, Inc. Unifying Receiver
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  1. 创建并配置/etc/udev/rules.d/robort.rules文件
cd /etc/udev/rules.d/
sudo touch roborts.rules
sudo gedit roborts.rules
//-- 添加如下内容:
KERNEL=="ttyACM*",ATTRS{idVendor}=="15d1",ATTRS{idProduct}=="0000",MODE:="0777",SYMLINK+="myhokuyo"
KERNEL=="ttyUSB*",ATTRS{idVendor}=="1a86",ATTRS{idProduct}=="7523",MODE:="0777",SYMLINK+="myusb"
/*
	myhokuyo 、myusb为自己定义的,为了避免麻烦此处最好与我定义的名字相同。
	下文说明原因,若你非要做自己 不跟我一样 也可以  我欣赏你!!!  
*/
  1. 重新加载并启动udev服务,可能需要重新插拔设备后生效
sudo service udev reload
sudo service udev restart
  1. 查看,如下图显示配置的设备名,则配置成功。
    在这里插入图片描述
2.修改serial功能包

如果在绑定串口时,stm32定义的名字不是 myusb需要对代码进行修改。若定义的名字相同,以下内容就不用修改。做自己的同学,接着跟我往下走…
在serial功能包中需要修改以下两个文件:

2.1 /home/tdt/catkin_ws/src/RoboRTS/serial/include/usart.h

在这里插入图片描述
2.2 /home/tdt/catkin_ws/src/RoboRTS/serial/src/main.cpp
在这里插入图片描述
以上两处,统一为你的命名即可。 没有亲自尝试,可能会存在问题,遇到问题不要慌 耐心排查 总会柳暗花明 祝君好运

/** ** ** ** ** ** ** ** ** ** [分割线] ** ** ** ** ** ** ** ** ** **/

说明: 以下内容是逸晨学长版本的串口绑定方法,若nuc的系统没有重新安装,当串口出现问题时可以参考下文重新配置。

1.绑定串口

串口绑定的原因:来回拔插串口线或者插多个串口线时总是出现串口号ttyUSB*不固定的问题, 给应用程序带来不少麻烦。inux中设备号一般按先后顺序依次向后增大,udev规则文件可以解决这个蛋疼的问题。udev是一种Linux2.6内核采用的/dev 目录的管理系统(可以把它认为是windows中的设备管理器),它通过从sysfs获得的信息,可以提供对特定设备的固定的设备名。sysfs是linux 2.6内核的一种新型文件系统,它提供了当前设备的基本信息。
udev的重要功能就是为为设备提供固定的设备名, 根据Wirting udev rules的详细介绍, udev有如下功能:
1.Rename a device node from the default name to something else
2.Provide an alternative/persistent name for a device node by creating a symbolic link to the default device node
3.Name a device node based on the output of a program
4.Change permissions and ownership of a device node
5.Launch a script when a device node is created or deleted (typically when a device is attached or unplugged)
6.Rename network interfaces

step【1】:编写usb文件

//-- 进入/etc/udev
cd /etc/udev/
//-- 创建usb.rules文件
sudo gedit usb.rules
//--在打开的文件中添加以下内容:
KERNEL=="ttyUSB*",KERNELS=="1-3",ATTRS{idVendor}=="1a86",ATTRS{idProduct}=="7523",MODE:="0777",SYMLINK+="myusb"
//-- 保存 退出

意思就是匹配sys中内核名为ttyUSB*的设备,属性匹配依据生产商编号idVendor和产品号idProduct, 设定读写权限为0777, 符号链接名为myusb,自己定义;具体的值如下方式查看:

1.查看KERNELS

ls -l /sys/class/tty/

//-- <! 结果如下图 !>
在这里插入图片描述
2.查看idVendor和idProduct

lsusb

//-- <! 结果如下图 ! >
在这里插入图片描述
将usb.rules文件里具体的数值,改为自己对应的 值即可。
step【2】:初始化

sudo /etc/init.d/udev restart

step【3】:赋权

sudo chmod 777 /dev/ttyUSB0/

step【4】:查看

ls /dev  //-- 查看是否有你设置的名字(myusb)若没有话  多次初始化 赋权 插拔usb

2.测试

step【1】:执行

roslaunch robots_bringup roborts_winner.launch

出现以下错误:雷达未连接
在这里插入图片描述
解决方法:给雷达串口赋权
在这里插入图片描述

sudo chmod 777 /dev/ttyACM0

参考blog:
[1] 解决ubuntu16.04中ttyUSB设备节点不固定问题
[2] 大疆官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值