作者: Sam (甄峰) sam_code@hotmail.com
在dashgo_bringup/startup目录内,有以下几个文件:
create_rplidar_udev.sh
create_dashgo_udev.sh
echo 'KERNEL=="ttyACM*", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0042", MODE:="0666", GROUP:="dialout", SYMLINK+="dashgo"' >/etc/udev/rules.d/dashgo.rules
有/dev/ttyACMx设备,pid=0042, vid=2341时,则创建它的软连接为:dashgo, 使用权限为666.
如此,则/dev/rplidar, /dev/dashgo就非常明确的对应雷达和底盘了。
VID,PID可以使用lsusb得到。
roscd dashgo_bringup/startup sudo sh create_dashgo_udev.sh sudo sh create_rplidar_udev_new.sh
EAI发布Dashgo底盘和F4雷达之后,软硬件均有升级变化。
Sam手头F4雷达原先使用rplidar_ros驱动,后采用flashgo作驱动。现将手头版本所需处理工作记录下来。
Sam是在两个平台工作:
A. NV TK1 平台,ARM架构,Ubuntu14.04+ROS
indigo。
B: X86平台,Ubuntu14.04 + ROS indigo平台。
1.文件准备:
1.1:把底盘程序dashgo copy到catkin_ws/src 目录。
1.2:把雷达程序 flashgo
copy到catkin_ws/src目录。
1.3:下载move_base:
$cd catkin_ws/src
$git clone ://github.com/ros-planning/navigation.git
$cd navigation
$git checkout indigo-devel
2. 编译:
cd ~/catkin_ws
catkin_make
3.
创建底盘Dashgo和F4雷达的别名:
这个意义有以下几点:
A:设备区分:
F4雷达和Dashgo底盘都是通过USB转Serial连接到主机。我们知道,此类设备通常被命名为/dev/ttyUSBx(x:0~64)或/dev/ttyACMx(x:0~64).
但应用程序并不知道哪个设备对应那个Node。比如有多个USB2Serial设备,名为:/dev/ttyUSB0,
/dev/ttyUSB1, /dev/ttyUSB2, /dev/ACM0,
/dev/ACM1.则完全不知道哪个Node对应的雷达和底盘。
所以写udev
rules脚本让其名字可辨识。
B:
处理权限:
通常/dev/ttyUSBx
, /dev/ttyACMx, 权限设置为:660。但ROS程序并非ROOT权限或和此Node
同group.所以需要处理。使之可以被ROS设备读写。
EAI的做法与大多数ROS程序员做法类似,利用UDev来提高辨识度。注明VendorID,
ProductID。
在dashgo_bringup/startup目录内,有以下几个文件:
create_rplidar_udev.sh
主要内容为:
echo 'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4",
ATTRS{idProduct}=="ea60", MODE:="0666", GROUP:="dialout",
SYMLINK+="rplidar"' >/etc/udev/rules.d/rplidar.rules
讲解:有/dev/ttyUSBx设备,vid=10c4, pid=ea60时,则创建它的软连接为:rplidar, 使用权限为666.
讲解:有/dev/ttyUSBx设备,vid=10c4, pid=ea60时,则创建它的软连接为:rplidar, 使用权限为666.
但之后Sam手头的雷达有了变化,它插入后,并不是/dev/ttyUSBx, 而是/dev/ttyACMx,
且Vid,Pid也变化了。所以Sam将其修改为:
create_rplidar_udev_new.sh
echo 'KERNEL=="ttyACM*", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", MODE:="0666", GROUP:="dialout", SYMLINK+="rplidar"' >/etc/udev/rules.d/rplidar.rules
有/dev/ttyACMx设备,vid=0483, pid=5740时,则创建它的软连接为:rplidar, 使用权限为666.
create_rplidar_udev_new.sh
echo 'KERNEL=="ttyACM*", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", MODE:="0666", GROUP:="dialout", SYMLINK+="rplidar"' >/etc/udev/rules.d/rplidar.rules
有/dev/ttyACMx设备,vid=0483, pid=5740时,则创建它的软连接为:rplidar, 使用权限为666.
create_dashgo_udev.sh
echo 'KERNEL=="ttyACM*", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0042", MODE:="0666", GROUP:="dialout", SYMLINK+="dashgo"' >/etc/udev/rules.d/dashgo.rules
有/dev/ttyACMx设备,pid=0042, vid=2341时,则创建它的软连接为:dashgo, 使用权限为666.
如此,则/dev/rplidar, /dev/dashgo就非常明确的对应雷达和底盘了。
这个方法非常好,值得学习。
VID,PID可以使用lsusb得到。
roscd dashgo_bringup/startup sudo sh create_dashgo_udev.sh sudo sh create_rplidar_udev_new.sh