美文网首页
【Apollo3.0】设备驱动固化

【Apollo3.0】设备驱动固化

作者: ClarkWang1214 | 来源:发表于2021-01-18 15:09 被阅读0次

    在完成了车辆适配后,接下来第二阶段就需要校验网络配置是否完整,传感器数据是否正常,最后通过标定传感器让系统完整地运行起来。

    设备权限

    在引入新的硬件设备过程中,由于需要将设备映射到docker环境中,所以设备的挂载很重要,权限是个重要的问题:

    • 需要让设备在docker;
    • 有可以读写的权限;所以需要用到udev的设备挂载机制。可以参考如下的配置,为你的新设备增加新的规则:
    SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", DRIVERS=="novatel_gps", ATTRS{port_number}=="0", MODE="0666", SYMLINK+="novatel0", OWNER="apollo", GROUP="apollo"
    SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", DRIVERS=="novatel_gps", ATTRS{port_number}=="1", MODE="0666", SYMLINK+="novatel1", OWNER="apollo", GROUP="apollo"
    SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", DRIVERS=="novatel_gps", ATTRS{port_number}=="2", MODE="0666", SYMLINK+="novatel2", OWNER="apollo", GROUP="apollo"
    

    udev 添加Udev规则,让Linux自动挂载U盘「或你的其他设备」可以参考:添加Udev规则,让Linux自动挂载U盘(转载) - 陈建的专栏 - CSDN博客

    MobaIterm中连接远程IPC工控机服务器

    服务器 IP:192.168.116.111,apollo,apollo

    image.png mobaiterm连接服务器

    启动Dreamview后台服务程序

    进入Docker,启动Dreamview,命令如下:

    cd ~/work/apollo/
    # 如果没有启动Docker,首先启动,否则忽略该步
    bash docker/scripts/dev_start.sh -C
    # 进入Docker
    bash docker/scripts/dev_into.sh
    # 启动Dreamview后台服务
    bash scripts/bootstrap.sh
    
    sudo python docs/demo_guide/rosbag_helper.py demo_2.0.bag #下载demo_2.0.bag录制数据包
    rosbag play demo_2.0.bag --loop
    
    选项 --loop 用于设置循环回放模式.
    
    打开Chrome浏览器,在地址栏输入localhost:8888即可访问Apollo Dreamview
    

    摄像头安装配置

    • 型号:HD USB Camera 长焦短焦6mm摄像头
    • 摄像头与工控机连接:两个6mm短焦摄像头分别插在工控机USB扩展板的第一个以及第二个USB接口上,25mm摄像头接在扩展板的第三个接口上(这个摄像头连接位置也可调整,只需与规则文件rules文件中对应即可)

    摄像头规则文件的配置

    摄像头规则文件的作用是在linux启动时,根据规则文件设置的规则,自动生成对应的软链接文件。

    • 在docker环境外部,执行如下命令,进入apollo项目工程的setup_host中,打开默认的规则文件99-webcam.rules
    vim ~/work/apollo/docker/setup_host/etc/udev/rules.d/99-webcam.rules
    
    • 根据实际配置的摄像头的情况,修改rules文件,先将三个摄像头分别插入工控机的usb接口上,用v4l2-ctl --list-devices命令查看摄像头在/dev下对应的设备信息(可通过sudo apt-get install v4l-utils进行安装)
    apollo@in_dev_docker:/apollo/modules/drivers/usb_cam/launch$ v4l2-ctl --list-devices
    HD USB Camera: HD USB Camera (usb-0000:00:14.0-1):
            /dev/video0
            /dev/video1
    HD USB Camera: HD USB Camera (usb-0000:00:14.0-12):
            /dev/video4
            /dev/video5
    HD USB Camera: HD USB Camera (usb-0000:00:14.0-3):
            /dev/video2
            /dev/video3
    
    apollo@in_dev_docker:/apollo$ v4l2-ctl --device=/dev/video0 --all
    Driver Info (not using libv4l2):
            Driver name   : uvcvideo
            Card type     : HD USB Camera: HD USB Camera
            Bus info      : usb-0000:00:14.0-1
            Driver version: 5.4.73
            Capabilities  : 0x84A00001
                    Video Capture
                    Streaming
                    Device Capabilities
            Device Caps   : 0x04200001
                    Video Capture
                    Streaming
    Priority: 2
    Video input : 0 (Camera 1: ok)
    Format Video Capture:
            Width/Height  : 640/360
            Pixel Format  : 'MJPG'
            Field         : None
            Bytes per Line: 0
            Size Image    : 460800
            Colorspace    : SRGB
            Custom Info   : feedcafe
    Crop Capability Video Capture:
            Bounds      : Left 0, Top 0, Width 640, Height 360
            Default     : Left 0, Top 0, Width 640, Height 360
            Pixel Aspect: 1/1
    Selection: crop_default, Left 0, Top 0, Width 640, Height 360
    Selection: crop_bounds, Left 0, Top 0, Width 640, Height 360
    Streaming Parameters Video Capture:
            Capabilities     : timeperframe
            Frames per second: 30.000 (30/1)
            Read buffers     : 0
                         brightness (int)    : min=0 max=127 step=1 default=0 value=0
                           contrast (int)    : min=0 max=95 step=1 default=2 value=2
                         saturation (int)    : min=0 max=100 step=1 default=48 value=48
                                hue (int)    : min=-2000 max=2000 step=1 default=0 value=0
     white_balance_temperature_auto (bool)   : default=1 value=1
                              gamma (int)    : min=80 max=176 step=1 default=100 value=100
                               gain (int)    : min=1 max=176 step=1 default=32 value=32
               power_line_frequency (menu)   : min=0 max=2 default=1 value=0
          white_balance_temperature (int)    : min=2806 max=6500 step=1 default=4600 value=4600 flags=inactive
                          sharpness (int)    : min=0 max=100 step=1 default=0 value=0
             backlight_compensation (int)    : min=16 max=240 step=1 default=62 value=62
                      exposure_auto (menu)   : min=0 max=3 default=3 value=3
                  exposure_absolute (int)    : min=1 max=8188 step=1 default=166 value=8188 flags=inactive
                     focus_absolute (int)    : min=0 max=1023 step=1 default=1 value=1 flags=inactive
                         focus_auto (bool)   : default=1 value=1
    
    
    apollo@in_dev_docker:/apollo$ v4l2-ctl --device=/dev/video1 --all
    Driver Info (not using libv4l2):
            Driver name   : uvcvideo
            Card type     : HD USB Camera: HD USB Camera
            Bus info      : usb-0000:00:14.0-1
            Driver version: 5.4.73
            Capabilities  : 0x84A00001
                    Video Capture
                    Streaming
                    Device Capabilities
            Device Caps   : 0x04A00000
                    Streaming
    Priority: 2
    
    SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", KERNELS=="1-1:1.0", MODE="0666", SYMLINK+="camera/obstacle", OWNER="apollo", GROUP="apollo"
    SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", KERNELS=="1-3:1.0", MODE="0666", SYMLINK+="camera/lanemark", OWNER="apollo", GROUP="apollo"
    SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", KERNELS=="1-12:1.0", MODE="0666", SYMLINK+="camera/trafficlights", OWNER="apollo", GROUP="apollo"
    

    其中第一行代表连接到usb端口号为1-1:1.0的摄像头对应的软链接文件为camera/trafficlights;第二条代表连接到USB端口号为1-3:1.0的摄像头对应的软链接文件为camera/obstacle;第三条代表连接到USB端口号为1-12:1.0的摄像头对应的软链接文件为camera/lanemark

    USB端口号可以通过如下dmesg命令查看相机在/dev下对应的device,其中1-1:1.0就是设备号了放于规则文件的KERNELS字段中。

    dmesg
    [ 2006.255182] usb 1-10: new high-speed USB device number 7 using xhci_hcd
    [ 2006.407291] usb 1-10: New USB device found, idVendor=32e4, idProduct=4689, bcdDevice=41.04
    [ 2006.407296] usb 1-10: New USB device strings: Mfr=1, Product=2, SerialNumber=5
    [ 2006.407300] usb 1-10: Product: HD USB Camera
    [ 2006.407303] usb 1-10: Manufacturer: HD USB Camera
    [ 2006.407307] usb 1-10: SerialNumber: 2020042001
    [ 2006.412118] uvcvideo: Found UVC 1.00 device HD USB Camera (32e4:4689)
    [ 2006.427578] input: HD USB Camera: HD USB Camera as /devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.0/input/input23
    
    [ 2038.143121] usb 1-9: new high-speed USB device number 8 using xhci_hcd
    [ 2038.295336] usb 1-9: New USB device found, idVendor=32e4, idProduct=4689, bcdDevice=41.04
    [ 2038.295341] usb 1-9: New USB device strings: Mfr=1, Product=2, SerialNumber=5
    [ 2038.295345] usb 1-9: Product: HD USB Camera
    [ 2038.295348] usb 1-9: Manufacturer: HD USB Camera
    [ 2038.295350] usb 1-9: SerialNumber: 2020042001
    [ 2038.299945] uvcvideo: Found UVC 1.00 device HD USB Camera (32e4:4689)
    [ 2038.315531] input: HD USB Camera: HD USB Camera as /devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9:1.0/input/input24
    
    [ 2088.195134] usb 1-5: new high-speed USB device number 9 using xhci_hcd
    [ 2088.351453] usb 1-5: New USB device found, idVendor=32e4, idProduct=4689, bcdDevice=41.04
    [ 2088.351458] usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=5
    [ 2088.351462] usb 1-5: Product: HD USB Camera
    [ 2088.351465] usb 1-5: Manufacturer: HD USB Camera
    [ 2088.351468] usb 1-5: SerialNumber: 2020042001
    [ 2088.356134] uvcvideo: Found UVC 1.00 device HD USB Camera (32e4:4689)
    [ 2088.371650] input: HD USB Camera: HD USB Camera as /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.0/input/input25
    
    • 执行如下命令,使得配置的规则文件在系统中生效,每次开机都会自动生成软链接
     bash ~/apollo/docker/setup_host/setup_host.sh  
     sudo reboot
    
    设备固化
    • 重启后,在/dev文件夹下会生成一个camera文件夹,里面会有三个软链接文件lanemark obstacle trafficlights,通过ls /dev/camera -al可以看到软链接的指向实际的设备号情况。
    设备固化软链接
    apollo@apollo:/dev/camera$ ls -al
    total 0
    drwxr-xr-x  2 root root  100 12月  8 15:35 .
    drwxr-xr-x 20 root root 4720 12月  8 15:35 ..
    lrwxrwxrwx  1 root root    9 12月  8 15:35 lanemark -> ../video3
    lrwxrwxrwx  1 root root    9 12月  8 15:35 obstacle -> ../video1
    lrwxrwxrwx  1 root root    9 12月  8 15:35 trafficlights -> ../video5
    
    apollo@apollo:/dev/camera$ sudo ln -s /dev/video0 /dev/camera/lanemark
    apollo@apollo:/dev/camera$ sudo ln -s /dev/video2 /dev/camera/obstacle
    apollo@apollo:/dev/camera$ sudo ln -s /dev/video4 /dev/camera/trafficlights
    
    apollo@apollo:~$ sudo unlink  /dev/camera/obstacle
    apollo@apollo:~$ sudo unlink  /dev/camera/trafficlights
    apollo@apollo:~$ sudo unlink  /dev/camera/lanemark
    
    lsusb.jpg image.png image.png

    v4l2-ctl 常用操作

    # 安装V4l2工具包
    $ sudo apt install v4l-utils
     
    # 通过v4l2查看摄像头设备
    apollo@apollo:~$ sudo v4l2-ctl --list-devices
    [sudo] password for apollo:
    HD USB Camera: HD USB Camera (usb-0000:00:14.0-1):
            /dev/video0
            /dev/video1
    HD USB Camera: HD USB Camera (usb-0000:00:14.0-12):
            /dev/video4
            /dev/video5
    HD USB Camera: HD USB Camera (usb-0000:00:14.0-3):
            /dev/video2
            /dev/video3
    
            
    # 查看当前摄像头支持的视频压缩格式
    apollo@apollo:~$ sudo v4l2-ctl -d /dev/video0 --list-formats
    ioctl: VIDIOC_ENUM_FMT
            Index       : 0
            Type        : Video Capture
            Pixel Format: 'MJPG' (compressed)
            Name        : Motion-JPEG
     
    # 查看摄像头所有参数
    $ sudo v4l2-ctl -d  /dev/video0 --all
    Driver Info (not using libv4l2):
            Driver name   : uvcvideo
            Card type     : HD USB Camera: HD USB Camera
            Bus info      : usb-0000:00:14.0-1
            Driver version: 5.4.73
            Capabilities  : 0x84A00001
                    Video Capture
                    Metadata Capture
                    Streaming
                    Extended Pix Format
                    Device Capabilities
            Device Caps   : 0x04200001
                    Video Capture
                    Streaming
                    Extended Pix Format
    Priority: 2
    Video input : 0 (Camera 1: ok)
    Format Video Capture:
            Width/Height      : 1920/1080
            Pixel Format      : 'MJPG'
            Field             : None
            Bytes per Line    : 0
            Size Image        : 4147200
            Colorspace        : sRGB
            Transfer Function : Default (maps to sRGB)
            YCbCr/HSV Encoding: Default (maps to ITU-R 601)
            Quantization      : Default (maps to Full Range)
            Flags             :
    Crop Capability Video Capture:
            Bounds      : Left 0, Top 0, Width 1920, Height 1080
            Default     : Left 0, Top 0, Width 1920, Height 1080
            Pixel Aspect: 1/1
    Selection: crop_default, Left 0, Top 0, Width 1920, Height 1080
    Selection: crop_bounds, Left 0, Top 0, Width 1920, Height 1080
    Streaming Parameters Video Capture:
            Capabilities     : timeperframe
            Frames per second: 60.000 (60/1)
            Read buffers     : 0
                         brightness 0x00980900 (int)    : min=0 max=127 step=1 default=0 value=0
                           contrast 0x00980901 (int)    : min=0 max=95 step=1 default=2 value=2
                         saturation 0x00980902 (int)    : min=0 max=100 step=1 default=48 value=48
                                hue 0x00980903 (int)    : min=-2000 max=2000 step=1 default=0 value=0
     white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
                              gamma 0x00980910 (int)    : min=80 max=176 step=1 default=100 value=100
                               gain 0x00980913 (int)    : min=1 max=176 step=1 default=32 value=32
               power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=0
          white_balance_temperature 0x0098091a (int)    : min=2806 max=6500 step=1 default=4600 value=4600 flags=inactive
                          sharpness 0x0098091b (int)    : min=0 max=100 step=1 default=0 value=0
             backlight_compensation 0x0098091c (int)    : min=16 max=240 step=1 default=62 value=62
                      exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=3
                  exposure_absolute 0x009a0902 (int)    : min=1 max=8188 step=1 default=166 value=8188 flags=inactive
                     focus_absolute 0x009a090a (int)    : min=0 max=1023 step=1 default=1 value=1 flags=inactive
                         focus_auto 0x009a090c (bool)   : default=1 value=1
             
        
     # 查看摄像头所支持的分辨率
     apollo@apollo:~$ sudo v4l2-ctl --list-framesizes=MJPG -d /dev/video0
    ioctl: VIDIOC_ENUM_FRAMESIZES
            Size: Discrete 640x360
            Size: Discrete 1280x720
            Size: Discrete 1920x1080
    
    Dreamweaver1.png Dreamweaver1.png Dreamweaver5.png Dreamweaver3.png Dreamweaver4.png Dreamweaver6.png Dreamweaver7.png
    Dreamweaver8.png

    ln640

    相关文章

      网友评论

          本文标题:【Apollo3.0】设备驱动固化

          本文链接:https://www.haomeiwen.com/subject/blttgktx.html