Apollo 2.5摄像头安装教程[百度无人驾驶,无人驾驶论坛]

本文原文地址: https://www.cnblogs.com/hgl0417/p/9190835.html


最近Apollo社区开发者在尝试Apollo2.5视觉感知方案的摄像头安装过程中,发现了一些问题。在与社区其他小伙伴的讨论中,开发者找到了解决办法并总结了下来。基于开发者的总结,我们也及时修复了Apollo代码中的不足(修复的PR参考 https://github.com/ApolloAuto/apollo/pull/4633)。我们为社区小伙伴的分享精神点赞,也期望大家一起齐心协力把Apollo开源社区建设得更好,真正体现贡献越多,收获越多!

最近我们完成了Apollo推荐的摄像头AR023ZWDR(Rev663F12)的安装调试,在安装过程中,我们也得到了Apollo美研团队和长沙CiDi团队的帮助和指导。在这里,我们将安装过程分享给其他开发者,帮助大家更好更快地调试Apollo。

在本文中提到的补充文件,大家在百度网盘中查找,请自行下载。百度网盘链接:

https://pan.baidu.com/s/1DoEpRBPNxjyfILrf5ekxrA

密码:s99l

以下是我们用Apollo 2.5安装摄像头的教程。

1

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

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

1
$ v4l2-ctl --list-devices

在我的电脑里输出:

1
2
3
4
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)为Apollo的摄像头,对应的设备为/dev/video0。

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

1
$ sudo apt-get install v4l-utils

Apollo在ROS的launch文件中默认摄像头设备为:/dev/video0,如果通过$ v4l2-ctl –list-devices命令,大家看到Apollo的摄像头对应的不是/dev/video0,就需要在docker外执行以下步骤修改launch文件。

1
2
3
4
5
6
7
8
$ 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" #注意这两个值是否与相机匹配。
1
2
3
4
5
6
7
$ vim launch/usb_cam-test.launch

修改

"video_device" value="/dev/video0" #将video0改为你对应的video*。
"image_width" value="1920"
"image_height" value="1080" #注意这两个值是否与相机匹配。
1
2
3
4
5
6
$ vim start_leopard.launch

修改

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

重要:

由于在第3步启动Dreamviewer时需要用到start_obstacle_camera.launch文件,而在整个Apollo文档中没有提到,可以从网盘中下载(默认下载到Downloads目录),执行:

1
2
3
4
5
6
$ vim ~/Downloads/start_obstacle_camera.launch

修改(如果需要)
"video_device" value="/dev/video0" #将video0改为你对应的video*。
"image_width" value="1920"
"image_height" value="1080" #注意这两个值是否与相机匹配。

然后拷贝到Apollo的Driver目录下:

1
$ cp ~/Downloads/start_obstacle_camera.launch ~/apollo/modules/drivers/usb_cam/launch/

 

2

配置摄像头

进入docker:

1
2
$ bash docker/scripts/dev_start.sh -C 
$ bash docker/scripts/dev_into.sh

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

1
2
$ cd /apollo 
$ bash apollo.sh build_usbcam

根据

https://github.com/ApolloAuto/apollo/blob/master/modules/drivers/usb_cam/README_cn.md文件,需要根据相机的长短焦类型,进行设备固化。短焦相机设备绑定为/dev/camera/obstacle;长焦相机,设备绑定为/dev/camera/trafficlights。车道线保持相机固定到/dev/camera/lanemark 。

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

1
2
3
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文件拷贝到/etc/udev/rules.d/,执行。

1
$ sudo cp ~/Downloads/99-webcam.rules /etc/udev/rules.d/

由于我们使用的摄像头为AR023ZWDR(Rev663F12),以663F12结尾,且主要用于车道线检测,所以不需要修改99-webcam.rules。但是如果你的相机不是Apollo提供的相机,参考https://www.cnblogs.com/fah936861121/p/6496608.html,根据你的相机修改上述内容,对应的设备为:camera/obstacle、camera/trafficlights是交通灯检测,camera/lanemark是车道线检测。

在docker外执行:

1
2
$ sudo chmod 755 /etc/udev/rules.d/99-webcam.rules 
$ sudo service udev restart

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

将Apollo的相机链接到/dev/camera/lanemark上:

1
$ sudo ln -s /dev/video0 /dev/camera/lanemark

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

1
$ sudo unlink /dev/camera/lanemark

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

3

调试摄像头

根据https://github.com/ApolloAuto/apollo/blob/master/docs/howto/how_to_run_apollo_2.5_perception_visualizer.md文件,在docker内修改modules/perception/conf/perception_lowcost.conf:

1
2
$ cd /apollo 
$ vim modules/perception/conf/perception_lowcost.conf

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

1
2
--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。

执行:

1
$ ./apollo.sh build_opt_gpu

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

根据https://github.com/ApolloAuto/apollo/blob/master/docs/howto/how_to_run_apollo_2.5_perception_visualizer.md文档,如果只运行摄像头,那么必须包含rostopic:/apollo/sensor/camera/obstacle/front_6mm ,这个topic实际上就在start_obstacle_camera.launch中。

如果在之前没有将start_obstacle_camera.launch拷贝进入usb_cam,那么,在运行$ ./scripts/bootstrap.sh时,左侧的modules中的camera开关打不开。

原因是dreamviewer启动之后,用到modules/dreamview/conf/hmi.conf配置文件,在这个配置文件的71-81行中,在navigation模式,用到了scripts/navigation_usb_camera.sh,其中,需要运行roslaunch usb_cam start_obstacle_camera.launch命令,而在usb_cam驱动中没有start_obstacle_camera.launch。

在docker内运行:

1
2
$ cd /apollo 
$ ./scripts/bootstrap.sh

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

1
$ rostopic list

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

1
2
$ 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。

这时候就可以开车,用摄像头开始跑数据了。记录一批数据后,回来运行:

1
$ ./scripts/perception_offline_visualizer.sh

然后运行:

1
2
$ cd /apollo
rosbag play data/bag/2018-xx-xx-xx-xx-xx/2018-xx-xx-xx-xx-xx.bag -l –clock

4

保存修改后的Docker

这里通过dock commit实现,在docker外运行:

1
$ docker ps

显示的数据第一个就应该是要保存的正在运行的container,复制container ID,取前三位就好。运行:

1
$ docker commit xxx registry.docker-cn.com/apolloauto/apollo:local_dev

xxx代表container ID前三位。运行完成后可以退出。下次再进入docker时运行:

1
2
$ bash docker/scripts/dev_start.sh -C -l
$ bash docker/scripts/dev_into.sh

进入docker后,运行:

1
$ rosls usb_cam/launch

如果显示出start_obstacle_camera.launch说明保存成功。

在初次调试过程中,大家可能会遇到一些问题,可以添加Apollo开发者社区小助手微信(Apollodev),进交流群与更多优秀的社区开发者交流讨论。


欢迎加入交流QQ群: 519 034 368

(非常欢迎您关注无人驾驶论坛的微信公众号)




(非常欢迎您关注Apollo官方公众号)



发表评论