Skip to content

Commit

Permalink
Merge pull request #2 from JetsonHacksNano/dev
Browse files Browse the repository at this point in the history
Update GPG Key
  • Loading branch information
JetsonHacksNano authored Sep 5, 2021
2 parents ac585ca + f4bf7b3 commit 2d12971
Show file tree
Hide file tree
Showing 3 changed files with 148 additions and 57 deletions.
47 changes: 27 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# installROS
Install Robot Operating System (ROS) on NVIDIA Jetson Nano Developer Kit
Install Robot Operating System (ROS) Melodic on NVIDIA Jetson Developer Kits

These scripts will install Robot Operating System (ROS) on the NVIDIA Jetson Nano Developer Kit.
These scripts will install Robot Operating System (ROS) Melodic on the NVIDIA Jetson Developer Kits.

Jetson Nano, Jetson AGX Xavier, Jetson Xavier NX, Jetson TX2, Jetson TX1

The script is based on the Ubuntu ARM install of ROS Melodic: http://wiki.ros.org/melodic/Installation/Ubuntu

Expand All @@ -24,35 +26,40 @@ Default is ros-melodic-ros-base if no packages are specified.

Example Usage:

$ ./installROS.sh -p ros-melodic-desktop -p ros-melodic-rgbd-launch
`$ ./installROS.sh -p ros-melodic-desktop -p ros-melodic-rgbd-launch`

This script installs a baseline ROS environment. There are several tasks:

<ul>
<li>Enable repositories universe, multiverse, and restricted</li>
<li>Adds the ROS sources list</li>
<li>Sets the needed keys</li>
<li>Loads specified ROS packages, defaults to ros-melodic-base-ros if none specified</li>
<li>Initializes rosdep</li>
</ul>
* Enable repositories universe, multiverse, and restricted
* Adds the ROS sources list
* Sets the needed keys
* Loads specified ROS packages, defaults to ros-melodic-base-ros if none specified
* Initializes rosdep
* Sets up `ROS_MASTER_URI` and `ROS_IP` in the `~/.bashrc` file

_**Note:** You will need to check your `~/.bashrc` file to make sure the ROS_MASTER_URI and ROS_IP are setup correctly for your environment. During configuration, a best guess is made which should be considered a placeholder._

You can edit this file to add the ROS packages for your application.

<strong>setupCatkinWorkspace.sh</strong>
**setupCatkinWorkspace.sh**
Usage:

$ ./setupCatkinWorkspace.sh [optionalWorkspaceName]
`$ ./setupCatkinWorkspace.sh [_optionalWorkspaceName_]`

where optionalWorkspaceName is the name of the workspace to be used. The default workspace name is catkin_ws. This script also sets up some ROS environment variables. Refer to the script for details.

<em><b>Note:</b> On June 7, 2019 the GPG key for ROS was changed due to security issues. If you have ROS installed on your system before this, you should delete the GPG key:</em>

<pre>
$ sudo apt-key del 421C365BD9FF1F717815A3895523BAEEB01FA116
</pre>
where _optionalWorkspaceName_ is the name and path of the workspace to be used. The default workspace name is `~/catkin_ws`.


## Release Notes

### September, 2021
* v1.1
* Tested on L4T 32.6.1 (JetPack 4.6)
* Update ROS GPG Key
* Setup ROS_IP more intelligently
* Setup ROS_MASTER_URI and ROS_IP in installROS script instead of setupCatkinWorkspace
* Script wrangling and cleanup
* Should be the same as JetsonHacks/installROS

<strong>October 2019</strong>
* vL4T32.2.1
* L4T 32.2.1 (JetPack 4.2.2)
Expand All @@ -74,7 +81,7 @@ $ sudo apt-key del 421C365BD9FF1F717815A3895523BAEEB01FA116
## License
MIT License

Copyright (c) 2017-2019 JetsonHacks
Copyright (c) 2017-2021 JetsonHacks

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
99 changes: 85 additions & 14 deletions installROS.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,35 @@
#!/bin/bash
# Install Robot Operating System (ROS) on NVIDIA Jetson Nano Developer Kit
# 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:
# http://wiki.ros.org/melodic/Installation/UbuntuARM
Expand All @@ -8,7 +38,7 @@
# Green is 2
# Reset is sgr0

function usage
usage ()
{
echo "Usage: ./installROS.sh [[-p package] | [-h]]"
echo "Install ROS Melodic"
Expand All @@ -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"
Expand Down Expand Up @@ -83,17 +113,22 @@ tput sgr0
sudo apt-add-repository universe
sudo apt-add-repository multiverse
sudo apt-add-repository restricted
tput setaf 2
echo "Updating apt list"
tput sgr0
sudo apt update

# 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"
echo "Updating apt list"
tput sgr0
sudo apt-get update
sudo apt update

tput setaf 2
echo "Installing ROS"
tput sgr0
Expand All @@ -120,25 +155,61 @@ 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
# Do not know if it is an issue with the Nano, test by commenting out
# sudo c_rehash /etc/ssl/certs
# Initialize rosdep
tput setaf 2
echo "Initializaing rosdep"
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 and ~/.bashrc file"
tput sgr0

59 changes: 36 additions & 23 deletions setupCatkinWorkspace.sh
Original file line number Diff line number Diff line change
@@ -1,33 +1,46 @@
#!/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 <path>"
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"

0 comments on commit 2d12971

Please sign in to comment.