Ubuntu设置USB设备别名
- 硬件连接
 - 软件设置
 - 更新电平转换芯片的serial
 - 创建设备别名
 - 使用设备别名
 
硬件连接

ROS主控通过usb线连接到一个TTL电平转换芯片,再由这个电平转换芯片连接STM32芯片
电平转换芯片可以通过PCB设计在STM32芯片的电路板上,也可以使用一个USB转TTL的模块。
 
 
为什么两个控制器之间需要电平转换芯片?
 因为两个控制器之间通信层次逻辑是不同的,所有需要电平转换芯片。相当于两个主控是两种不同语言的人,电平转换芯片相当于一个翻译。
电平转换芯片可以是:
- cp2102
 - ch340
 - PL2303
 - FT232RL
 
软件设置
硬件连接上之后,需要一个软件设置
需要软件设置原因:
 ROS主控可能接入多个USB设备,或者接入两个型号一样的电平转换芯片。
 不同USB设备占用的ROS主控的端口号在每次上电时可能会不一致,这样需要手动修改代码中的配置参数,比较麻烦,也无法做到自启动。
 如果存在多个USB设备,但是每种USB设备的电平转换芯片不一样,那么我们可以根据芯片名称来知道端口 号,但是如果有两个芯片一样的电平转换芯片,则无法区分,这时候想做自启动那么必须要进行下面步骤的软件设置
软件设置分为两步
 第一步是更改电平转换芯片的serial,
 第二步是创建设备别名
更新电平转换芯片的serial
首先在win环境下安装更改芯片serial的软件
 CP21xx Customization Utility.exe
这个软件在网上下载就可以
 这里提供一个百度网盘的链接:链接: http://pan.baidu.com/s/1bni1WtT 密码: 75bs
 
 打开这个软件,然后将芯片连接电脑的USB
 
 然后将圆圈位置改为0002
然后点击Program Device
 
 点完之后要等下,在Status Logging窗口中出现下面信息,才说明修改好了
 
创建设备别名
需要创建设备别名原因:
 在运行一个ros程序的时候需要提供一个端口名,这个端口名一般是ttyUSBx,设备每次插拔对应的这个端口名它都会不一样,需要创建一个设备别名,就是要将这个端口名来给它固定住。
 
 重新插拔 USB1端口的设备后,变为:
 
 可以看到变成了/dev/ttyUSB2
 端口号发生了变化
创建设备别名需要写一个脚本文件,如下:
echo  'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60",ATTRS{serial}=="0002", MODE:="0777", GROUP:="dialout", SYMLINK+="stm32_controller"' >/etc/udev/rules.d/stm32_controller.rules
echo  'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60",ATTRS{serial}=="0001", MODE:="0777", GROUP:="dialout", SYMLINK+="2d_lidar"' >/etc/udev/rules.d/2d_lidar.rules
service udev reload
sleep 2
service udev restart
 
解释下上面的代码
 KERNEL=="ttyUSB* 不管是USB几的设备都进行判断
 ATTRS{idVendor}==“10c4” 这里的idVendor ,在前面win上修改 serial的时候出现过,就是10c4

 ATTRS{idProduct}==“ea60” 这里的idProduct,在前面win上修改 serial的时候出现过,就是ea60

 ATTRS{serial}==“0002” 这里的serial,就是前面我们改过的,这里就根据这个值的不同,定义不同的设备别名
 MODE:=“0777” 就是端口的权限
 SYMLINK+=“stm32_controller” 这里的stm32_controller,就是取的设备别名。
所有上面第一行代码的功能就是,将满足这些条件的端口的设备名称改为定义的设备别名。
脚本的文件名称,取名为change_udev.sh。在执行前需要给这个脚本文件赋予权限。
sudo chmod 777 change_udev.sh
 
赋予权限后,再运行这个脚本
sudo ./change_udev.sh
 
这样就运行了设备别名的设置,之后不管怎么插拔这两个USB设备,系统都将会自动的将这两个设备去给它赋予设置的设备别名。
使用设备别名
在上面,设置了设备别名,下面来看如何使用我们的设备别名。
例如我们将雷达的USB的设备别名改为了2d_lidar
雷达的roslaunch启动文件则可以写成如下:
<launch>
  <node name="rplidarNode"          pkg="rplidar_ros"  type="rplidarNode" output="screen">
    <param name="serial_port"         type="string" value="/dev/2d_lidar"/>
    <param name="serial_baudrate"     type="int"    value="115200"/><!--A1/A2 -->
    <!-- <param name="serial_baudrate"     type="int"    value="256000"/> --><!--A3 -->
    <!-- <param name="serial_baudrate"     type="int"    value="1000000"/> --><!--S2 -->
    <param name="frame_id"            type="string" value="laser"/>
    <param name="inverted"            type="bool"   value="false"/>
    <param name="angle_compensate"    type="bool"   value="true"/>    
  </node>
</launch>
 
上面的代码中,
 < param name=“serial_port” type=“string” value=“/dev/2d_lidar”/ >
 这里,我们就将系统的设备别名/dev/2d_lidar,设置到了参数serial_port中
![2022-12-29 [整理]flex弹性布局](https://img-blog.csdnimg.cn/8298c8d279fa4e6790f3693dc064d942.png#pic_center)

![[年终总结]满意但不满足](https://img-blog.csdnimg.cn/0197bbc7def241d9bf419e34f8402a3a.jpeg#pic_center)
















