Apollo2.5摄像头安装

前言:在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说明保存成功。

转载于:https://www.cnblogs.com/hgl0417/p/9190835.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下查看出口IP

使用的几个其他的命令,好像这个都不太靠谱。 但也想写一个很简单的程序就在服务器端的request里面能取得IP, 这个也有人已经在公网上有这样的程序啊 所以这个就简单了 wget http://members.3322.org/dyndns/getipcat getip 这样试试吧。

r语言教程w3c,R语言 数据库

数据是关系数据库系统以规范化格式存储。 因此,要进行统计计算,我们将需要非常先进和复杂的Sql查询。 但R语言可以轻松地连接到许多关系数据库,如MySql,Oracle,Sql服务器等,并从它们获取记录作为数据框。 一…

HTML 文档流和文本流的理解

文本流,概括地说其实就是一系列字符,是文档的读取和输出顺序,也就是我们通常看到的由左到右、由上而下的读取和输出形式,在网页中每个元素都是按照这个顺序进行排序和显示的,而position属性可以将元素从文本流脱离出来…

CCNA实验(一)

无线局域网(WLAN)回顾 使用无线射频信号、载波监听多路访问/冲突避免、半双工。 无线AP相当于以太网的HUB。 有些频段是受限的。 无线信号遇到的问题: l 反射 l 散射 l 信号吸收(比如说穿墙) 无线标准 l ITU-R l …

linux中postfix(基于源码)的邮件系统

一、安装前的准备工作: 首先配置yum服务器,安装dns 1、安装所需的rpm包,这包括以下这些: httpd, php, php-mysql, mysql, mysql-server, mysql-devel, openssl-devel, dovecot, perl-DBD-MySQL, tcl, tcl-devel, libart_lgpl, li…

UE4 集成讯飞听写插件

搞了几天,有些坑记录一下。 3个方面的知识需要学习 1、制作UE4插件 2、引入第三方库 3、讯飞听写的api 一看是参考 https://blog.csdn.net/u012793104/article/details/78067937 http://doc.xfyun.cn/msc_windows/%E8%AF%AD%E9%9F%B3%E5%90%AC%E5%86%99.html API&am…

c51单片机有几个终端语言,吃过大亏,才知道要从51单片机入手

原标题:吃过大亏,才知道要从51单片机入手在这里,我就不说什么是单片机了,而是说说怎样学单片机,就我个人而言先学51,因为这个单片机在中国市场上发展了几十年了,现在工程中用的比较多的也是MCS-51, 它的资料…

c primer plus(第五版)读书笔计 第二章(3)

// 2-2.c --------把两个fathoms换算成英尺#include <stdio.h>int main (void){int feet, fathoms;fathoms 2;feet 6 * fathoms;printf ("There are %d feet in %d fathoms !\n",feet,fathoms);printf ("Yes , I said %d feet !\n",6 * fathoms);r…

云计算-openstack简介

云计算云计算是一种按使用量付费的模式&#xff0c;这种模式提供可用的、便捷的、按需的网络访问&#xff0c; 进入可配置的计算资源共享池&#xff08;资源包括网络&#xff0c;服务器&#xff0c;存储&#xff0c;应用软件&#xff0c;服务&#xff09;&#xff0c;这些资源能…

C语言循环不执行语句,求大神来看一下 为什么for循环中scanf语句不执行?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#define MAX_VERTEX_NUM 20typedef struct{char vexs[MAX_VERTEX_NUM];// 顶点向量int AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];// 邻接矩阵intvexnum, arcnum;// 顶点数、边/弧数}MGraph;int n,path[100];bool visite…

医疗项目中对网编的一些理解看法

医疗项目中对网编的一些理解看法。做网络营销都有一个前提&#xff0c;那就是以用户为中心&#xff0c;站在用户的角度考 虑问题。在网络营销中&#xff0c;网编如何提升充实自己&#xff1f;怎么获得信息渠道&#xff1f;见多&#xff1a;多看&#xff0c;多了解行业的变化&am…

android 自定义view画表格,Android自定义View实现课程表表格

自己闲下来时间写的一个课表控件&#xff0c;使用的自定义LinearLayout&#xff0c;里面View都是用代码实现的&#xff0c;最终效果如下图&#xff0c;写的可能有问题希望多多指点创建一个自定义LinearLayout 控件用来装载课程的信息和课程的周数&#xff0c;和节数大概的布局三…

26.中继器数据的添加与删除

选择中继器里面的数据集再选择增加行 勾上之后选择下方的增加行就可以填入数据了 用变量获取用户输入的各项内容 但是图片不能用公式操作 方法&#xff1a;通过右键单击图片获得图片的地址 图片中蓝色的部分就是相对路径 把这个路径放到中继器的数据里就可以用了 以上是添加&am…

如何在android模拟器中安装apk软件

这个是我从别的网站上看到的&#xff0c;而且亲身试验了&#xff0c;是可以的&#xff0c;和大家分享一下&#xff01;如何在模拟器上安装apk软件 首先我们需要的是在电脑上安装Android系统的模拟器。安装模拟器&#xff0c;需要需要下载Android SDK&#xff1a;SDK由官方网站…

android工作机制和内核,android内核剖析学习笔记:AMS(ActivityManagerService)内部原理和工作机制...

一、ActivityManagerService提供的主要功能&#xff1a;(1)统一调度各应用程序的Activity(2)内存管理(3)进程管理二、启动一个Activity的方式有以下几种&#xff1a;(1)在应用程序中调用startActivity启动指定的Activity(2)在Home程序中单击一个应用图标&#xff0c;启动新的Ac…

从.Net到Java学习第四篇——spring boot+redis

从.Net到Java学习系列目录 “学习java已经十天&#xff0c;有时也怀念当初.net的经典&#xff0c;让这语言将你我相连&#xff0c;怀念你......”接上一篇&#xff0c;本篇使用到的框架redis、FastJSON。 环境准备 安装redis&#xff0c;下图是我本机的redis绿色版&#xff0c;…

hdu 4409 Family Name List LCA +stl

http://acm.hdu.edu.cn/showproblem.php?pid4409 赛后才过只能说悲剧了&#xff0c;知道思路&#xff0c;stl不熟悉&#xff0c;所以导致写的很慢....占据了很多时间&#xff0c;手速代码准确度。。哎。。。 题意&#xff1a; 给你一个家谱&#xff0c;n个人的姓名&#xff0c…

mysql杂记

1、 mysql安装完成后需要将mysql里面的bin目录加到环境变量里之后&#xff0c;才能在cmd窗口里使用mysql命令 2、 在CMD命令窗口敲入命令 mysql -hlocalhost -uroot -ppassword进入mysql数据库 这里我的用户名是root&#xff0c;密码是123456 转载于:https://www.cnblogs.com/y…

android包名更换后升级方案,Android增量升级方案

背景随着业务的发展&#xff0c;安装包的体积也在不断的增大&#xff0c;这时候&#xff0c;如果要版本更新&#xff0c;用户不得不去下载完整的安装包。但是如果使用增量升级方案&#xff0c;用户只需要下载新旧版本的差异包&#xff0c;然后在本地合成就行&#xff0c;这样省…

Linux 学习 Ubuntu 12.04 配置指南

关于Ubuntu 就不在此详细的叙述&#xff0c; 安装方法&#xff1a; 硬盘安装&#xff0c;速度效果都还不错 http://www.nenew.net/ubuntu-12-04-hard-disk-install-tutorial.html 详细的方法可以去这里看一下 U盘安装&#xff1a;这个就更加的简单&#xff0c;我一般都是使用 U…