diff --git a/installROS.sh b/installROS.sh index 920aefd..8b2c1cc 100755 --- a/installROS.sh +++ b/installROS.sh @@ -1,4 +1,34 @@ #!/bin/bash +# Install ROS on NVIDIA Jetson Developer Kits +# Copyright (c) JetsonHacks, 2019-2021 + +# MIT License +# Maintainer of ARM builds for ROS is http://answers.ros.org/users/1034/ahendrix/ +# Information from: +# http://wiki.ros.org/melodic/Installation/UbuntuARM + +# Get code name of distribution +# lsb_release gets the Ubuntu Description Release and Code name +DISTRIBUTION_CODE_NAME=$( lsb_release -sc ) + +case $DISTRIBUTION_CODE_NAME in + "xenial" ) + echo "This Ubuntu distribution is Ubuntu Xenial (16.04)" + echo "This install is not the ROS recommended version for Ubuntu Xenial." + echo "ROS Bionic is the recommended version." + echo "This script installs ROS Melodic. You will need to modify it for your purposes." + exit 0 + ;; + "bionic") + echo "This Ubuntu distribution is Ubuntu Bionic (18.04)" + echo "Installing ROS Melodic" + ;; + *) + echo "This distribution is $DISTRIBUTION_CODE_NAME" + echo "This script will only work with Ubuntu Xenial (16.04) or Bionic (18.04)" + exit 0 +esac + # Install Robot Operating System (ROS) on NVIDIA Jetson Developer Kit # Maintainer of ARM builds for ROS is http://answers.ros.org/users/1034/ahendrix/ # Information from: @@ -8,7 +38,7 @@ # Green is 2 # Reset is sgr0 -function usage +usage () { echo "Usage: ./installROS.sh [[-p package] | [-h]]" echo "Install ROS Melodic" @@ -22,7 +52,7 @@ function usage echo "-h | --help This message" } -function shouldInstallPackages +shouldInstallPackages () { tput setaf 1 echo "Your package list did not include a recommended base package" @@ -87,9 +117,9 @@ sudo apt-add-repository restricted # Setup sources.lst sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' # Setup keys -sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 -# If you experience issues connecting to the keyserver, you can try substituting hkp://pgp.mit.edu:80 or hkp://keyserver.ubuntu.com:80 in the previous command. -# Installation +sudo apt install curl +curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - + tput setaf 2 echo "Updating apt-get" tput sgr0 @@ -120,8 +150,6 @@ tput setaf 2 echo "Installing rosdep" tput sgr0 sudo apt-get install python-rosdep -y -# Certificates are messed up on earlier version Jetson for some reason -# sudo c_rehash /etc/ssl/certs # Initialize rosdep tput setaf 2 echo "Initializaing rosdep" @@ -129,15 +157,54 @@ tput sgr0 sudo rosdep init # To find available packages, use: rosdep update -# Environment Setup - Don't add /opt/ros/melodic/setup.bash if it's already in bashrc +# Environment Setup - source melodic setup.bash +# Don't add /opt/ros/melodic/setup.bash if it's already in bashrc grep -q -F 'source /opt/ros/melodic/setup.bash' ~/.bashrc || echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc # Install rosinstall tput setaf 2 echo "Installing rosinstall tools" tput sgr0 -sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential -y + +# Install useful ROS dev tools +sudo apt-get install -y python-rosinstall \ + python-rosinstall-generator \ + python-wstool \ + build-essential + +# Use ip to get the current IP addresses of eth0 and wlan0; parse into form xx.xx.xx.xx +ETH0_IPADDRESS=$(ip -4 -o addr show eth0 | awk '{print $4}' | cut -d "/" -f 1) +WLAN_IPADDRESS=$(ip -4 -o addr show wlan0 | awk '{print $4}' | cut -d "/" -f 1) + +if [ -z "$ETH0_IPADDRESS" ] ; then + echo "Ethernet (eth0) is not available" +else + echo "Ethernet (eth0) is $ETH0_IPADDRESS" +fi +if [ -z "$WLAN_IPADDRESS" ] ; then + echo "Wireless (wlan0) is not available" +else + echo "Wireless (wlan0) ip address is $WLAN_IPADDRESS" +fi + +# Default to eth0 if available; wlan0 next +ROS_IP_ADDRESS="" +if [ ! -z "$ETH0_IPADDRESS" ] ; then + ROS_IP_ADDRESS=$ETH0_IPADDRESS +else + ROS_IP_ADDRESS=$WLAN_IPADDRESS +fi +if [ ! -z "$ROS_IP_ADDRESS" ] ; then + echo "Setting ROS_IP in ${HOME}/.bashrc to: $ROS_IP_ADDRESS" +else + echo "Setting ROS_IP to empty. Please change ROS_IP in the ${HOME}/.bashrc file" +fi + +#setup ROS environment variables +grep -q -F ' ROS_MASTER_URI' ~/.bashrc || echo 'export ROS_MASTER_URI=http://localhost:11311' | tee -a ~/.bashrc +grep -q -F ' ROS_IP' ~/.bashrc || echo "export ROS_IP=${ROS_IP_ADDRESS}" | tee -a ~/.bashrc tput setaf 2 + echo "Installation complete!" echo "Please setup your Catkin Workspace" tput sgr0 diff --git a/setupCatkinWorkspace.sh b/setupCatkinWorkspace.sh index e1aacc5..afb5225 100755 --- a/setupCatkinWorkspace.sh +++ b/setupCatkinWorkspace.sh @@ -1,33 +1,47 @@ #!/bin/bash -# Create a Catkin Workspace and setup ROS environment variables -# Usage setupCatkinWorkspace.sh dirName +# Create a Catkin Workspace +# Copyright (c) JetsonHacks, 2019-2021 + +# MIT License +# Maintainer of ARM builds for ROS is http://answers.ros.org/users/1034/ahendrix/ +# Information from: +# http://wiki.ros.org/melodic/Installation/UbuntuARM +# source /opt/ros/melodic/setup.bash -DEFAULTDIR=~/catkin_ws -CLDIR="$1" -if [ ! -z "$CLDIR" ]; then - DEFAULTDIR=~/"$CLDIR" -fi -if [ -e "$DEFAULTDIR" ] ; then - echo "$DEFAULTDIR already exists; no action taken" + +# Usage setupCatkinWorkspace.sh dirName +help_usage () +{ + echo "Usage: ./setupCatkinWorkspac.sh " + echo " Setup a Catkin Workspace at the path indicated" + echo " Default path is ~/catkin_ws" + echo " -h | --help This message" + exit 0 +} + +CATKIN_DIR="" + case $1 in + -h | --help) help_usage ;; + *) CATKIN_DIR="$1" ;; + esac + + +CATKIN_DIR=${CATKIN_DIR:="${HOME}/catkin_ws"} + +if [ -e "$CATKIN_DIR" ] ; then + echo "$CATKIN_DIR already exists; no action taken" exit 1 else - echo "Creating Catkin Workspace: $DEFAULTDIR" + echo "Creating Catkin Workspace: $CATKIN_DIR" fi -echo "$DEFAULTDIR"/src -mkdir -p "$DEFAULTDIR"/src -cd "$DEFAULTDIR"/src +echo "$CATKIN_DIR"/src +mkdir -p "$CATKIN_DIR"/src +cd "$CATKIN_DIR"/src catkin_init_workspace -cd "$DEFAULTDIR" +cd .. catkin_make -#setup ROS environment variables -grep -q -F ' ROS_MASTER_URI' ~/.bashrc || echo 'export ROS_MASTER_URI=http://localhost:11311' | tee -a ~/.bashrc -grep -q -F ' ROS_IP' ~/.bashrc || echo "export ROS_IP=$(hostname -I)" | tee -a ~/.bashrc -echo "export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH" >> ~/.bashrc - -echo "The Catkin Workspace has been created" -echo "Please modify the placeholders for ROS_MASTER_URI and ROS_IP placed into the file ${HOME}/.bashrc" -echo "to suit your environment." +echo "Catkin workspace: $CATKIN_DIR created"