在自己搭建的控制器上面讀取gmsl相機


筆者所在課題組從事無人駕駛相關方向研究,本人研究方向為視覺SLAM。課題組於校外成立研究院,並自主搭建了基於Xaier的控制器,購置森雲智能gmsl相機,直接連與控制器上面。

相機協議為gmsl1(145),輸出圖像為1280*720,fps=25,編解碼格式為YUYV。為在控制器上搭建視覺SLAM所需環境,做圖下嘗試:

一、安裝系統ubuntu18.04

二、搭建ROS-melodic-desktop-full

三、安裝opencv

1. 安裝依賴環境:

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev 
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

常用問題:無法定位libjasper-dev

解決方法:

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

2. 下載opencv源碼:

下載次新版opencv-3.4.15(Opencv源碼下載地址—https://opencv.org/releases/)

3. 編譯:

(1)解壓

(2)mkdir build && cd ./build

(3)cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=True ..
(4)make -j6

(5)sudo make install

4. 環境配置:

(1)修改etc/bash.bashrc

sudo gedit /etc/bash.bashrc

文件末尾添加以下內容,並保存

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

更新

sudo updatedb
source /etc/bash.bashrc

(2)修改動態庫

#打開下列文件
sudo gedit /etc/ld.so.conf.d/opencv.conf 
 
# 添加lib路經 在 末尾 保存退出
/usr/local/lib
 
# 更新
sudo ldconfig

5. 檢查安裝情況:

#終端輸入以下兩命令,顯示正常則安裝成功
pkg-config --modversion opencv4 #查看版本號
pkg-config --libs opencv4 #查看libs庫

6. 程序測試:

opencv在下載時已經提供了測試程序:~/opencv-4.5.1/samples/cpp/example_cmake$ 終端進入此目錄后執行以下程序:

mkdir build
cd ./build
cmake ..
make
./opencv_example ## 生成一個可執行文件 拖入終端執行 也可

四、調用opencv讀取相機數據:

#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <sstream>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
    ros::init(argc, argv, "read_gmsl_ros");
    ros::NodeHandle nh;
    image_transport::ImageTransport it(nh);
    image_transport::Publisher pub = it.advertise("/gmsl_cam/image_raw", 1);
    
    VideoCapture cap;
    
    if(!cap.open(0))
    {
      cout<<"Please check the ID of the camera."<<endl;
      return -1;
    }
    
    /*
     * 對該相機進行操作:
     * 1. 設置該相機輸出輸出不為RGB,即關掉默認輸出
     * 2. 設置該相機的格式為YUYV
     * */
    cap.set(CAP_PROP_CONVERT_RGB, 0); 
    cap.set(CV_CAP_PROP_MODE, CV_CAP_MODE_YUYV);
    
    Mat image;
    
    //ros::Rate loop_rate(100);
    while(nh.ok())
    {
      cap >> image;
      
      sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image).toImageMsg();
      pub.publish(msg);
      //ros::spinOnce();
      //loop_rate.sleep();
    }
    
    return 0;
}

詳情可參考:https://blog.csdn.net/cyf15238622067/article/details/82767214

cmake_minimum_required(VERSION 3.0.2)
project(n_camera_prep)
SET(OpenCV_DIR /usr/local/share/OpenCV)

find_package(catkin REQUIRED COMPONENTS
  cv_bridge
  image_transport
  roscpp
  OpenCV
)


catkin_package(

)

include_directories(
  ${catkin_INCLUDE_DIRS}
  ${OpenCV_INCLUDE_DIRS}
)

add_executable(yuv2ros src/ReadYUVfile.cpp)

target_link_libraries(yuv2ros
  ${catkin_LIBRARIES}
  ${OpenCV_LIBS}
)

add_executable(read_gmsl_ros src/ReadGMSLvideo.cpp)

target_link_libraries(read_gmsl_ros
  ${catkin_LIBRARIES}
  ${OpenCV_LIBS}
)

 


免責聲明!

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



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