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說明保存成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM