Compile vision_opencv on Jetson Nano
So I was trying to compile ROS melodic “vision_opencv” on Jetson Nano.
Here is the solution, if anyone finds any error.
By default, vision_opencv is compiled for Opencv3. But Jetson Nano has Opencv4.
Step 1
$ cd vision_opencv/cv_bridge
$ nano CMakeLists.txt
Change this line of code
find_package(OpenCV 3 REQUIRED COMPONENTS opencv_core opencv_imgproc opencv_imgcodecs CONFIG)
to
find_package(OpenCV 4 REQUIRED COMPONENTS opencv_core opencv_imgproc opencv_imgcodecs CONFIG)
Step 2
$ cd vision_opencv/cv_bridge/src
$ nano CMakeLists.txt
Change Line 35
if (OpenCV_VERSION_MAJOR VERSION_EQUAL 3)
to
if (OpenCV_VERSION_MAJOR VERSION_EQUAL 4)
Step 3
$ cd vision_opencv/cv_bridge/src
$ nano module_opencv3.cpp
Change line 110
UMatData* allocate(int dims0, const int* sizes, int type, void* data, size_t* step, int flags, UMatUsageFlags usageFlags) const
to
UMatData* allocate(int dims0, const int* sizes, int type, void* data, size_t* step, AccessFlag flags, UMatUsageFlags usageFlags) const
Also, change line 139
bool allocate(UMatData* u, int accessFlags, UMatUsageFlags usageFlags) const
to
bool allocate(UMatData* u, AccessFlag accessFlags, UMatUsageFlags usageFlags) const
Reference for Step 1, Step 2, and Step 3
Step 4
Go to the terminal and execute this to create a symlink. Reference
$ sudo ln -s /usr/include/opencv4/opencv2/ /usr/include/opencv
That’s it!!!
Now it can be compiled without any error.