Apollo2.5摄像头安装

Stella981
• 阅读 902

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

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

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

Apollo推荐的摄像头支持v4l2 camera驱动,输入以下命令,在docker外,查看百度的相机在/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,在docker 外执行以下步骤修改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" #注意这两个值是否与相机匹配。

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

$ vim ~/Downloads/start_obstacle_camera.launch

修改(如果需要)

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

"image_width" value="1920"

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

然后拷贝到apollo的driver目录下:

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

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。车道线保持相机固定到/dev/camera/lanemark

在docker外查看设备($ 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文件拷贝到/etc/udev/rules.d/,执行。

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

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

在docker外执行:

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

$ sudo service udev restart

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

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

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

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

$ sudo unlink /dev/camera/lanemark

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

3. 调试摄像头

根据~/apollo/docs/howto/how_to_run_apollo_2.5_perception_visualizer.md文件,在docker内修改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 ,这个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内运行:

$ 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按钮,过一小段时间,关闭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

4. 保存修改后的docker

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

$ docker ps

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

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

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

$ bash docker/scripts/dev_start.sh -C -l

$ bash docker/scripts/dev_into.sh

进入docker后,运行:

$ rosls usb_cam/launch

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

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这