Ubuntu 16.04 64bit and ROS solution?

We are just getting started on a development projection using the TX-1 that will use a camera on a 3-axis gimbal as a ros node.

To get things started the first task was to flash the TX-1 with the latest JetPack 2.3. I noticed that there is no 32bit support. And it looks like there is no 64bit ROS support.

What is nVidias recommended solution?

We can flash to JetPack 2.2 but it looks like the 2.3 documentation is saying that Jetson TX-1 32bit OS is no longer supported.

Is the TX-1 dead path moving forward for the ROS community?

You can still use R23.2 with 32-bit user space. There is a list of all of the legacy versions here:

Although R23.2 is “legacy” it isn’t actually very old.

If you compare a desktop computer which is normally 64-bit via x86_64, this also often supports 32-bit i686 via “legacy” support. The i686 is considered a foreign architecture. You can do the same on JTX1 where aarch64 is the main architecture and armhf is a foreign architecture (perhaps referred to in this case as ARMv8 32-bit). The big problem is that x86_64 and i686 compatibility have been around for a very long time…nobody has really set up for ARMv8-a 64-bit plus ARMv8 32-bit together, it’s new ground (but it could be done, although 64-bit ROS porting would be easier). I don’t know anything about ROS so I can’t even guess on their views of porting to 64-bit ARMv8-a.

In the release notes is says “NOTE: Jetson TX1 32-bit OS is no longer supported, only 64-bit OS is supported.”

From previous threads it says that folks were only able to get ROS running on Jetson TX1 32-bit OS.

I guess before moving forward we need to understand if there is any effort either on the NVidia side or the ROS side to get ROS running on Jetson TX1 64-bit OS.

You can compile ROS Comm (bare-bones) from source for Ubuntu 16.04 aarch64 following these instructions: http://wiki.ros.org/kinetic/Installation/Source

You could still run full ROS with GUI tools on PC, as a WiFi groundstation for TX1 deployed on a robot or device for example.

Example script for building ROS-comm:


# make sure you have the ros repo
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116
sudo apt-get update

# start with some basic dependencies
sudo apt-get install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential

mkdir ros_catkin_ws
cd ros_catkin_ws
echo 'stage 1' >> ~/log_ros_comm

rosinstall_generator ros_comm --rosdistro kinetic --deps --wet-only --tar > kinetic-ros_comm-wet.rosinstall
echo 'stage 2' >> ~/log_ros_comm
wstool init -j8 src kinetic-ros_comm-wet.rosinstall
echo 'stage 3' >> ~/log_ros_comm

rosdep install --from-paths src --ignore-src --rosdistro kinetic -y
echo 'stage 4' >> ~/log_ros_comm

### start patches
# there is no nppi_graphcuts in CUDA 8; disable cudalegacy and stitching modules
# patch disables cudalegacy and stitching
sed -i -e '1 i ocv_module_disable(cudalegacy)' src/opencv3/modules/cudalegacy/CMakeLists.txt
sed -i -e '1 i ocv_module_disable(stitching)' src/opencv3/modules/stitching/CMakeLists.txt
echo 'stage 5' >> ~/log_ros_comm
### end patches

./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release
echo 'stage 7' >> ~/log_ros_comm

# clean up opencv patches, bug will be submitted to opencv for longer-term fix
sed -i -e '/^ocv_module_disable(cudalegacy)/ d' src/opencv3/modules/cudalegacy/CMakeLists.txt
sed -i -e '/^ocv_module_disable(stitching)/ d' src/opencv3/modules/stitching/CMakeLists.txt
echo 'stage 8, done' >> ~/log_ros_comm

All I really need in the ability to publish results from the code on the TX-1 and to subscribe to listen for incoming commands from other nodes on the network. (And possibly read from the parameter server.)

I will go ahead this weekend flash the TX-1 with 16.04 and see if I can get ROS-comm compiled 64 bit and sending and receiving topics.

I know very little about ros, but did discover that if “rosdep init” fails it may just be because the SSL certificate packages are split up and “ca-certificates” is installed, but what you need is:

sudo apt-get install ca-cacert

(this let me succeed in rosdep init, although I have nothing to use ros with)

Ros-com compiles and runs no problem. Desktop is almost working. One more package to get through. Octomap wants ninja build system. But when you install that you still can’t get it to build because there is no build.ninja file generated for the package. From what I’ve read cmake is supposed to generate this. Tried the command manually using make -j4 -l4 instead of ninja -j4 -l4 but no makefile either. Tired of messing with it since its really not needed for a robot. But might go back and try again later.

Is the ninja you are talking about the package “ninja” described by apt search as this (under L4T R24.2):

ninja-build/xenial 1.5.1-0.1ubuntu1 arm64
  small build system closest in spirit to Make

Yep I managed to get opencv to start compiling with ninja. Had to go into src and make a build directory then run cmake … -GNinja to generate the build.ninja and rules.ninja files. Move those into build.isolated and run the build again and it actually compiled most of it. I did manage to get opencv3 to compile and install. But not the ros package. Hung up on some opencv2 cuda stuff. Cuda 8 has nuked a couple of things that opencv cudalegacy uses. So you have to make some changes to some files to get around that. But for some reason when it gets to the opencv2 stuff the error comes back. Another cmake file to track down. I don’t like cmake. At first I tried apt-get install ninja that is come kind of monitoring system didn’t know it was ninja-build at first. octomap and opencv3 packages are the only two I’ve run into so far that use ninja. Finished the new chassis today. The delrin for the base will be here tomorrow so I can put my boy back together. Shortened it up a bit and made the substructure so the suspension piviot isn’t stressing the base now. That is where it cracked before. Delrin is much stronger than plexi.

Big drone is ready to test too. Hoping for a cool front this weekend to cool things off so I can go fly it.