How To: Install the ZED ROS driver on the JTX1

These are the steps I took to get the ZED ROS driver working on a fresh install of L4T from the JetPack:

Install git

sudo apt-get install git

Install ZED SDK for the JTX1 and make a link in the home directory

wget 'https://www.stereolabs.com/download_327af3/ZED_SDK_Linux_JTX1_v0.9.2_alpha.run'
chmod +x ZED_SDK_Linux_JTX1_v0.9.2_alpha.run
./ZED_SDK_Linux_JTX1_v0.9.2_alpha.run
ln -s /usr/local/zed/ ~/zed

The OpenGL Extension Wrangler Library was missing, install it to run the ZED explorer and depth viewer

sudo apt-get instal libglew-dev

Install ROS base ( from http://wiki.ros.org/indigo/Installation/UbuntuARM )

I had to run this before rviz would work on the JTX1 (as noted on the ROS installation page)

#for running rviz on arm
unset GTK_IM_MODULE

Create a catkin workspace

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ..
catkin_make

Install some dependencies

sudo apt-get install libopencv-videostab2.4

Clone the ZED ROS wrapper from github (this is a modified version from our team’s github)

cd ~/catkin_ws/src
git clone https://github.com/zastrix/zed-ros-wrapper.git
cd ..
catkin_make

At this point I got a few errors, missing packages etc. here’s what I did to solve them (if anyone can see the underlying workings of why this step is needed, I’d love to hear it)

sudo apt-get autoremove
sudo apt-get remove libopencv4tegra
sudo apt-get install ros-indigo-image-transport
sudo apt-get install ros-indigo-cv-bridge

Now the ZED ROS wrapper should compile

catkin_make

These steps allowed me to run the ZED ROS wrapper and publish rgb and depth images, as well as camera info. These topics will be used with rtabmap for our SLAM application. If something is missing or someone has an idea of how I could do this better, please let me know. I hope this helps someone!

Hi dgmiller,

your solution surely works, but you are losing opencv4tegra and so you are losing GPU module.

Why are you installing libopencv-videostab2.4 and then removing libopencv4tegra.

I installed ROS cv-bridge and image-transport without removing libopencv4tegra and I had no problems.

Have you updated your TX1 with jetpack 2.0 before installing ROS?

Hi Myzhar,

first, thanks for your ROS ZED driver! it works really well. second, I am not familiar with the underlying dependencies of these packages to know exactly why what I did worked. when i tried to compile, i followed the error messages and installed the missing packages, which eventually led to the driver working. I’ll try again using your suggest of installing cv_bridge and image_transport only. thanks for that!

and yes i’ve updated the JTX1 with jetpack already.

I made a simple test program to verify that the GPU module of OpenCV is correctly installed and that it can work.

You can get it here: GitHub - Myzhar/opencv_simple_cuda_test: A simple tool to verify that CUDA driver is correctly installed and OpenCV can use it

simply follow the instruction.

Walter

This is a little off topic but you’ve gotten passed what i’m looking for. I want to install ROS onto the Nvidia TX1. Do i have to install the base version or is it powerful enough to install the full Desktop and run gazebo.

Muchowsn

I also simply followed the instructions after a fresh jetpack2.0 install (with Cuda7.0 and OpenCV4Tegra post-install) plus ros-indigo-desktop and the ZED SDK/drier - all successfully tested.

However, I end up with the same error as the OP when trying to build the zed-ros-wrapper:
Scanning dependencies of target zed_wrapper_node
make[2]: *** No rule to make target /usr/lib/arm-linux-gnueabihf/libopencv_videostab.so.2.4.9', needed by /home/ubuntu/zed_ws/devel/lib/zed_wrapper/zed_wrapper_node’. Stop.

I ran Myzhar’s simple test program successfully.

The ZED wrapper requires opencv2 in it’s CMakeLists.txt and package.xml and I tried removing it and just relying on cv_bridge to bring in opencv system dependencies as recommended in:
http://wiki.ros.org/indigo/Migration#OpenCV

Ultimately, it appears that although libopencv_videostab has already been successfully installed by libopencv4tega, but it is version 2.4.12 and installed in /usr/lib (rather than the 2.4.8 and /usr/lib/arm-linux-gneuabihf mentioned in the make error).

Any suggestions or recommendations for things to try would be greatly appreciated.

Ultimately this seems to stem from an Jetpack2.0/L4T-23.1 NVidia/OpenCV4Tegra installation mismatch with ROS indigo/Ubuntu Trusty expectations.

The NVidia opencv libraries are installed in /usr/lib (rather than the expected /usr/lib/arm-linux-gnueabihf directory), and the NVidia opencv libraries are version 2.4.12 (rather than the expected 2.4.8), and also a library (libopencv-ocl2.4) is missing from the NVidia release

Solved this by

  1. remove reference to opencv2 from CMakeLists.txt and package.xml in zed-ros-wrapper
  2. modify ROS indigo pkgconfig files (cv_bridge.pc and image_geometry.pc) AND cmake files (cv_bridgeConfig.cmake and image_geometryConfig.cmake) to look for libraries in /usr/lib (rather than /usr/lib/arm-linux/gnueabihf) and use version 2.4.12 (rather than 2.4.8).
  3. also removed reference to libopencv_ocl in those files as it is not provided in the NVidia OpenCV4Tegra release

May be an easier/cleaner solution but hope this helps others using OpenCV with ROS on the TX1

kgregson, thank you! I was experiencing the same troubles and following your directions allowed me to build the zed_wrapper successfully.

Thank you very much kgregson !
Here is the location of the files on TX1 with ROS Indigo :

sudo cp /opt/ros/indigo/lib/pkgconfig/cv_bridge.pc /opt/ros/indigo/lib/pkgconfig/cv_bridge.pc-bak
sudo cp /opt/ros/indigo/lib/pkgconfig/image_geometry.pc /opt/ros/indigo/lib/pkgconfig/image_geometry.pc-bak
sudo cp /opt/ros/indigo/share/cv_bridge/cmake/cv_bridgeConfig.cmake /opt/ros/indigo/share/cv_bridge/cmake/cv_bridgeConfig.cmake-bak
sudo cp /opt/ros/indigo/share/image_geometry/cmake/image_geometryConfig.cmake /opt/ros/indigo/share/image_geometry/cmake/image_geometryConfig.cmake-bak
sudo gedit /opt/ros/indigo/lib/pkgconfig/cv_bridge.pc &
sudo gedit /opt/ros/indigo/lib/pkgconfig/image_geometry.pc &
sudo gedit /opt/ros/indigo/share/cv_bridge/cmake/cv_bridgeConfig.cmake &
sudo gedit /opt/ros/indigo/share/image_geometry/cmake/image_geometryConfig.cmake &

I wrote a guide to perform this hacking:
http://myzharbot.robot-home.it/blog/software/ros-nvidia-jetson-tx1-jetson-tk1-opencv-ultimate-guide/

To make it simple :

sudo sed -i.bak s/arm-linux-gnueabihf\///g /opt/ros/indigo/lib/pkgconfig/cv_bridge.pc
sudo sed -i.bak s/arm-linux-gnueabihf\///g /opt/ros/indigo/lib/pkgconfig/image_geometry.pc
sudo sed -i.bak s/arm-linux-gnueabihf\///g  /opt/ros/indigo/share/cv_bridge/cmake/cv_bridgeConfig.cmake
sudo sed -i.bak s/arm-linux-gnueabihf\///g  /opt/ros/indigo/share/image_geometry/cmake/image_geometryConfig.cmake

sudo sed -i.bak s/2.4.8/2.4.12/g /opt/ros/indigo/lib/pkgconfig/cv_bridge.pc
sudo sed -i.bak s/2.4.8/2.4.12/g /opt/ros/indigo/lib/pkgconfig/image_geometry.pc
sudo sed -i.bak s/2.4.8/2.4.12/g  /opt/ros/indigo/share/cv_bridge/cmake/cv_bridgeConfig.cmake
sudo sed -i.bak s/2.4.8/2.4.12/g  /opt/ros/indigo/share/image_geometry/cmake/image_geometryConfig.cmake

sudo sed -i.bak s/-l:\/usr\/lib\/libopencv_ocl.so.2.4.12//g /opt/ros/indigo/lib/pkgconfig/cv_bridge.pc
sudo sed -i.bak s/-l:\/usr\/lib\/libopencv_ocl.so.2.4.12//g /opt/ros/indigo/lib/pkgconfig/image_geometry.pc
sudo sed -i.bak s/-l:\/usr\/lib\/libopencv_ocl.so.2.4.12//g  /opt/ros/indigo/share/cv_bridge/cmake/cv_bridgeConfig.cmake
sudo sed -i.bak s/\/usr\/lib\/libopencv_ocl.so.2.4.12;//g  /opt/ros/indigo/share/cv_bridge/cmake/cv_bridgeConfig.cmake
sudo sed -i.bak s/-l:\/usr\/lib\/libopencv_ocl.so.2.4.12//g  /opt/ros/indigo/share/image_geometry/cmake/image_geometryConfig.cmake
sudo sed -i.bak s/\/usr\/lib\/libopencv_ocl.so.2.4.12;//g  /opt/ros/indigo/share/image_geometry/cmake/image_geometryConfig.cmake