Apollo2.5摄像头安装

前言:在Apollo美研团队和长沙CiDi团队的支持下,最近完成了Apollo推荐的摄像头AR023ZWDR(Rev663F12)调试,在这里对Apollo的笔记做一个补充,希望以后的开发者不用在踩我们踩过的坑。

在本博客中提到的补充文件在我的百度网盘中,请大家自行下载。百度网盘:链接:https://pan.baidu.com/s/1DoEpRBPNxjyfILrf5ekxrA 密码:s99l

1. 查看摄像头,并修改相应的配置。

Apollo推荐的摄像头支持v4l2 camera驱动,输入以下命令,查看百度的相机在/dev下对应的device。

$ v4l2-ctl --list-devices

在我的电脑里输出:

AR023ZWDR(Rev663F12) (usb-0000:00:14.0-1):

    /dev/video0

USB2.0 VGA UVC WebCam (usb-0000:00:14.0-7):

    /dev/video1

其中,USB2.0 VGA UVC WebCam 为我笔记本自带摄像头,对应的设备为/dev/video1。AR023ZWDR(Rev663F12)为百度的摄像头,对应的设备为/dev/video0。

如果这条指令提示错误:sh: 1: v4l2-ctl: not found,需要安装v4l2库

$ sudo apt-get install v4l-utils

百度在ros的launch文件中默认百度的摄像头设备为:/dev/video0,如果你通过$ v4l2-ctl --list-devices命令看到百度的摄像头对应的不是/dev/video0,执行以下步骤修改launch文件。

$ cd ~/apollo/modules/drivers/usb_cam/launch/

$ vim start_one_leopard.launch

修改

"video_device" value="/dev/video0" #将video0改为你对应的video*。

"image_width" value="1920"

"image_height" value="1080" #注意这两个值是否与相机匹配。

$ vim launch/usb_cam-test.launch

修改

"video_device" value="/dev/video0" #将video0改为你对应的video*。

"image_width" value="1920"

"image_height" value="1080" #注意这两个值是否与相机匹配。

$ vim start_leopard.launch

修改

"image_width" value="1920"

"image_height" value="1080" #注意这两个值是否与相机匹配。

2. 配置摄像头

进入docker:

$ bash docker/scripts/dev_start.sh –C

$ bash docker/scripts/dev_into.sh

编译apollo自带的usb_cam(/apollo/modules/drivers/usb_cam)

$ cd /apollo

$ bash apollo.sh build_usbcam

根据~/apollo/modules/drivers/usb_cam/下的README_cn.md文件,需要根据相机的长短焦类型,进行设备固化。短焦相机设备固定为/dev/camera/obstacle;长焦相机,设备固定为/dev/camera/trafficlights。我的项目仅使用一个短焦6mm的相机,用于做车道线保持,Apollo团队的建议是仅绑定/dev/camera/obstacle。

可是在查看设备($ ls /dev)时,发现/dev下没有camera,根据CiDi的同学指点,在https://github.com/ApolloAuto/apollo/tree/042b715bba55b2f5ee4cbc1069b1ad223c478939/docker/setup_host/etc/udev/rules.d下有99-webcam.rules文件,具体内容如下:

SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", ATTR{name}=="AR023ZWDR(Rev[0-9][0-9][0-9]s)", MODE="0666", SYMLINK+="camera/obstacle", OWNER="apollo", GROUP="apollo"

SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", ATTR{name}=="AR023ZWDR(Rev[0-9][0-9][0-9])", MODE="0666", SYMLINK+="camera/trafficlights", OWNER="apollo", GROUP="apollo"

SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", ATTR{name}=="AR023ZWDR(Rev[0-9][0-9][0-9]F12)", MODE="0666", SYMLINK+="camera/lanemark", OWNER="apollo", GROUP="apollo"

下载这个文件(默认下载到Downloads文件夹),在docker外,将99-webcam.rules文件拷贝到~/apollo文件。

$ cp ~/Downloads/99-webcam.rules ~/apollo/

回到docker,执行:

$ sudo cp /apollo/99-webcam.rules /etc/udev/rules.d/

由于我的摄像头是AR023ZWDR(Rev663F12),以F12结尾,且我需要绑定到/dev/camera/obstacle,所以对99-webcam.rules进行修改:

$ sudo vim /etc/udev/rules.d/99-webcam.rules

修改后的内容如下:

SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", ATTR{name}=="AR023ZWDR(Rev[0-9][0-9][0-9]F12)", MODE="0666", SYMLINK+="camera/obstacle", OWNER="apollo", GROUP="apollo"

SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", ATTR{name}=="AR023ZWDR(Rev[0-9][0-9][0-9])", MODE="0666", SYMLINK+="camera/trafficlights", OWNER="apollo", GROUP="apollo"

SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", ATTR{name}=="AR023ZWDR(Rev[0-9][0-9][0-9]s)", MODE="0666", SYMLINK+="camera/lanemark", OWNER="apollo", GROUP="apollo"

在docker内执行:

$ sudo chmod 755 /etc/udev/rules.d/99-webcam.rules

$ sudo service udev restart

在这里需要重新插拔以下摄像头。再次运行$ ls /dev/camera就可以看到obstacle。

将百度的相机链接到/dev/camera/obstacle上:

$ sudo ln -s /dev/video0 /dev/camera/obstacle

如果出现错误:"ln: failed to create symbolic link '/dev/camera/obstacle': File exists",那么执行:

$ sudo unlink /dev/camera/obstacle

在执行$ sudo ln -s /dev/video0 /dev/camera/obstacle语句就应该能解决。

3. 调试摄像头

根据~/apollo/docs/howto/how_to_run_apollo_2.5_perception_visualizer.md文件,首先进入docker:

$ bash docker/scripts/dev_start.sh –C

$ bash docker/scripts/dev_into.sh

首先修改modules/perception/conf/perception_lowcost.conf:

$ cd /apollo

$ vim modules/perception/conf/perception_lowcost.conf

其中的--dag_config_path有两种修改方法:

--dag_config_path=conf/dag_camera_obstacle_lane_motion_vis.config #仅有摄像头

--dag_config_path=conf/dag_camera_obstacle_offline_fusion_sync.config #摄像头和雷达融合

由于我们仅调试摄像头,所以将--dag_config_path=conf/dag_camera_obstacle_lane_motion_vis.config。

执行:

$ ./apollo.sh build_opt_gpu

运行完成后,可以通过dreamviewer记录数据,并且用perception模块测试数据。

根据how_to_run_apollo_2.5_perception_visualizer.md文档,如果只运行摄像头,那么必须包含rostopic:/apollo/sensor/camera/obstacle/front_6mm

运行:

$ ./scripts/bootstrap.sh

点击terminal中的http://localhost:8888,进入dreamviewer,在dreamviewer上方的模式中选择navigation,点击左侧的modules中,打开camera开关,运行:

$ rostopic list

却发现没有这个topic,原因是在开启dreamviewer时,需要执行roslaunch usb_cam start_obstacle_camera.launch,而在apollo的camera驱动usb_cam中没有start_obstacle_camera.launch,可以从我的百度网盘中下载(默认下载到Downloads文件夹)。

在docker外运行:

$ vim ~/Downloads/start_obstacle_camera.launch

修改(如果需要)

"video_device" value="/dev/video0" #将video0改为你对应的video*。

"image_width" value="1920"

"image_height" value="1080" #注意这两个值是否与相机匹配。

$ cp ~/Downloads/start_obstacle_camera.launch ~/apollo/

回到docker,执行:

$ roscd usb_cam/launch

$ sudo cp /apollo/start_obstacle_camera.launch .

关闭dreamviewer,重新进入,执行:

$ cd /apollo

$ ./scripts/bootstrap.sh

在次点击terminal中的http://localhost:8888,进入dreamviewer,在dreamviewer上方的模式中选择navigation,点击左侧的modules中,打开camera开关,运行:

$ rostopic list

就可以看到rostopic:/apollo/sensor/camera/obstacle/front_6mm。点击Bag Record按钮,进入data/bag下就可以看到按照时间排序的rosbag,运行

$ cd /apollo

$ rosbag info data/bag/2018-xx-xx-xx-xx-xx/2018-xx-xx-xx-xx-xx.bag

可以看到,在这个Bag中包含rostopic:/apollo/sensor/camera/obstacle/front_6mm。

这时可以开车,拿着摄像头出去跑数据。记录一批数据后,回来运行:

$ ./scripts/perception_offline_visualizer.sh

然后运行:

$ cd /apollo

rosbag play data/bag/2018-xx-xx-xx-xx-xx/2018-xx-xx-xx-xx-xx.bag -l --clock

猜你喜欢

转载自www.cnblogs.com/hgl0417/p/9188816.html
今日推荐