USB外设驱动
在电脑上,我们最常用的接口之一,应该就是USB了,相比之前讲到的外设通信方法,USB更加复杂,速度也更快。
USB通信原理
USB不仅是我们生活中最常用的一种接口,也是一种串行总线的通讯方式。他类似于UART,有两根线用来传输数据。
而且USB还有专门的接口规范,比如我们常听说的USB Type A、Type C。例如这里列出来的USB口,打印机常用的B口,手机上用的C口,都是标准的USB接口。
USB的接口规范,使用广泛,很多成熟的外设都是采用的USB接口。
摄像头驱动
比如USB摄像头。
硬件接线
这里我们使用一个USB摄像头,通过一个相机驱动把它跑起来,并且可以看到图像数据。
方法有很多中,TogetherROS兼容ROS2的所有功能,那我们就先试试ROS2中的标准方法,在旭日X3PI上直接安装一个usb_cam功能包。
ROS2相机驱动
安装与配置
首先安装ROS2的相机驱动包:
安装好之后,为了让系统能够找到该功能包,需要进入tros的目录,建立对应的软连接。
因为旭日X3Pi可以连接csi摄像头,设备名占用了video0-7,所以外接的USB摄像头会被自动分配到video8,我们需要在ROS2的功能包中修改一下设备号。
然后给这个设备添加权限,最后再设置TogetherROS的环境变量就可以使用啦。
运行相机驱动
我们来试一试。
这里直接在X3Pi中启动usb_cam的launch文件,然后再启动一个能和他通信的Ubuntu桌面系统,打开rqt_image_view,选择对应的话题,就可以看到图像了。也就是说明我们成功的用TROS驱动了这个USB摄像头。
TogetherROS相机驱动
除此之外,TogetherROS中也提供了USB摄像头的驱动节点,连接摄像头之后,直接设置设备的权限和TogetherROS的环境变量就可以使用了。
$ source /opt/tros/local_setup.bash
$ sudo chmod 777 /dev/video8
$ ros2 launch hobot_usb_cam hobot_usb_cam.launch.py
之后可以再打开一个新的终端,输入对应的指令,然后启动websocket这个节点,就可以把image这个话题的数据发送到网页了。
$ source /opt/tros/local_setup.bash
$ cd /opt/tros/lib/websocket/webservice
$ sudo chmod +x ./sbin/nginx
$ sudo ./sbin/nginx -p .
$ ros2 run websocket websocket --ros-args -p image_topic:=/image -p image_type:=mjpeg -p only_show_image:=true
这时我们直接打开在通一个局域网下的浏览器,输入X3Pi的地址,就可以进去到一个网页,点击左上方web端展示即可看到USB摄像头的实时画面。
激光雷达驱动
移动机器人中常用的激光雷达大多也是USB借口的,比如这款rplidar。
安装与配置
如果我们想把它跑起来,同样需要一个驱动包,大家可以在工作空间中下载雷达的驱动包,然后进行编译。编译完成后,添加环境变量就可以使用这个功能包了。
# 下载源码
$ mkdir -p catkin_ws/src
$ cd ~/catkin_ws/src
$ git clone -b ros2 https://github.com/slamtec/rplidar_ros.git
# 编译
$ cd ~/catkin_ws
$ colcon build --symlink-install
# 添加环境变量
$ source ~/catkin_ws/install/setup.bash
# 添加权限
$ sudo chmod 777 /dev/ttyUSB0
还要记得给激光雷达的USB口设置对应的权限。
运行激光雷达驱动
驱动安装好之后,就可以启动雷达了。
在旭日X3派的终端中,运行启动激光雷达的launch文件。
启动成功后,我们在电脑端的Ubuntu系统中,在ros2环境下打开rviz2,然后将世界坐标系改为laser,然后添加LaserScan的可视化选项,并且把Reliability Policy的选项改为System Default,此时就可以看到激光雷达的点云数据了。