diff --git a/arlobot_ros/package.xml b/arlobot_ros/package.xml
index 2d2f77af..6b53fd82 100644
--- a/arlobot_ros/package.xml
+++ b/arlobot_ros/package.xml
@@ -7,6 +7,11 @@
chrisl8
Apache-2.0
+ twist_mux
+ rosbridge_server
+ slam_toolbox
+ nav2_bringup
+ navigation2
rosidl_default_generators
rosidl_default_runtime
rosidl_interface_packages
diff --git a/setup-jazzy.sh b/setup-jazzy.sh
index 717f0333..f3af6a51 100755
--- a/setup-jazzy.sh
+++ b/setup-jazzy.sh
@@ -16,11 +16,11 @@ INSTALLING_ROS_DISTRO=jazzy
# cd ${HOME}/ArloBot # Or wherever you cloned the code to.
#
# Then either kick it off all in one shot:
-# docker run -ti -v $PWD:/home/user ubuntu:24.04 /bin/bash -c "/home/user/setup-jazzy.sh"
+# docker run -ti -v $PWD:/root/ArloBot ubuntu:24.04 /bin/bash -c "~/ArloBot/setup-jazzy.sh"
#
# Or start an interactive shell in Docker and run it, with the ability to make changes and start it again when it finishes:
-# docker run -ti -v $PWD:/home/user ubuntu:24.04 /bin/bash
-# /home/user/setup-jazzy.sh
+# docker run -ti -v $PWD:/root/ArloBot ubuntu:24.04 /bin/bash
+# ~/ArloBot/setup-jazzy.sh
#
# If you started a non-interactive ("one shot") build and then it crashed and you want to get in and look around:
# https://docs.docker.com/engine/reference/commandline/commit/
@@ -74,25 +74,6 @@ printf "\n${YELLOW}SETTING UP ROS ${INSTALLING_ROS_DISTRO} FOR YOUR ARLOBOT!${NC
printf "${YELLOW}---------------------------------------------------${NC}\n"
printf "${GREEN}You will be asked for your password for running commands as root!${NC}\n"
-printf "${YELLOW}[Updating local pacakge list.]${NC}\n"
-sudo apt update
-
-if ! (command -v lsb_release >/dev/null); then
- sudo apt install -y lsb-release
-fi
-version=$(lsb_release -sc)
-
-printf "\n${YELLOW}[Checking the Ubuntu version]${NC}\n"
-printf "${LIGHTBLUE}Ubuntu ${version} found${NC}\n"
-case ${version} in
-"noble") ;;
-
-*)
- printf "${RED}[This script will only work on Ubuntu Noble (24.04)]${NC}\n"
- exit 1
- ;;
-esac
-
DOCKER_TEST_INSTALL=false
if [[ ! -e /etc/localtime ]]; then
# These steps are to allow this script to work in a minimal Docker container for testing.
@@ -108,7 +89,6 @@ if [[ ! -e /etc/localtime ]]; then
# rather than letting it get picked up later as a pre-req,
# and add the other things we know Docker is missing too while we are at it.
apt update # Docker doesn't have the latest package lists by default.
- #apt install -y tzdata sudo cron
apt install -y sudo python3
# Now the rest of the script should work as if it was in a normal Ubuntu install.
@@ -118,6 +98,25 @@ if [[ ! -e /etc/localtime ]]; then
DOCKER_TEST_INSTALL=true
fi
+printf "${YELLOW}[Updating local pacakge list.]${NC}\n"
+sudo apt update
+
+if ! (command -v lsb_release >/dev/null); then
+ sudo apt install -y lsb-release
+fi
+version=$(lsb_release -sc)
+
+printf "\n${YELLOW}[Checking the Ubuntu version]${NC}\n"
+printf "${LIGHTBLUE}Ubuntu ${version} found${NC}\n"
+case ${version} in
+"noble") ;;
+
+*)
+ printf "${RED}[This script will only work on Ubuntu Noble (24.04)]${NC}\n"
+ exit 1
+ ;;
+esac
+
if ! (command -v python >/dev/null); then
printf "\n${YELLOW}[Setting Python 3 as System Default]${NC}\n"
printf "${LIGHTBLUE}Because currently there IS NO python otherwise!${NC}\n"
@@ -166,17 +165,15 @@ fi
printf "\n${YELLOW}[Updating & upgrading all existing Ubuntu packages]${NC}\n"
sudo apt update
-if ! [[ ${TRAVIS} == "true" ]]; then # Upgrading packages in Travis often fails due to timeouts.
- sudo apt upgrade -y
- sudo apt autoremove -y
-fi
+sudo apt upgrade -y
+sudo apt autoremove -y
# This should follow the official ROS install instructions closely.
# http://docs.ros.org/en/jazzy/Installation/Ubuntu-Install-Debs.html
# That is why there is a separate section for extra packages that I need for Arlo.
# Note, while we are NOT building ROS from source, we are building SOME THINGS from source,
# and hence must also follow the the instructions to set up a build environment.
-if ! (dpkg -s ros-${INSTALLING_ROS_DISTRO}-desktop | grep "Status: install ok installed" &>/dev/null) || ! (command -v rosdep) || ! (command -v rosinstall_generator); then
+if ! (dpkg -s ros-${INSTALLING_ROS_DISTRO}-desktop | grep "Status: install ok installed" &>/dev/null) || ! (command -v rosdep); then
printf "\n${YELLOW}[Installing ROS]${NC}\n"
sudo apt install -y ros-${INSTALLING_ROS_DISTRO}-desktop
printf "${LIGHTBLUE}ROS installed!${NC}\n"
@@ -218,8 +215,6 @@ fi
printf "\n${YELLOW}[Installing additional Ubuntu and ROS Packages for Arlo]${NC}\n"
printf "${LIGHTBLUE}This runs every time, in case new packages were added.${NC}\n"
-# TODO: Try removing some ROS packages that do not need to be installed independently,
-# because they are already dependencies of other things.
PACKAGE_TO_INSTALL_LIST=()
# ### Required Packages and Why ###
PACKAGE_TO_INSTALL_LIST+=(jq)
@@ -232,22 +227,7 @@ PACKAGE_TO_INSTALL_LIST+=(git)
# git - allows for cloning of repositories
PACKAGE_TO_INSTALL_LIST+=(vim)
# vim - We aren't going to get very far without being able to edit some files.
-# "ros-${INSTALLING_ROS_DISTRO}-move-base" - Required to build and use Arlobot ROS code.
-PACKAGE_TO_INSTALL_LIST+=("ros-${INSTALLING_ROS_DISTRO}-twist-mux")
-# twist-mux is used by the Arlobot cmd_vel_mux input controller.
-# It allows multiple cmd_vel topics to all coexist, and remaps the active on one
-# to the correct topic for output.
-# Without it, movement (twist) commands cannot be sent to the robot from ROS.
-PACKAGE_TO_INSTALL_LIST+=("ros-${INSTALLING_ROS_DISTRO}-navigation2")
-PACKAGE_TO_INSTALL_LIST+=("ros-${INSTALLING_ROS_DISTRO}-nav2-bringup")
-# navigation2 is the ROS2 navigation stack for robot navigation
-PACKAGE_TO_INSTALL_LIST+=("ros-${INSTALLING_ROS_DISTRO}-slam-toolbox")
-# Slam-Toolbox is the official ROS2 SLAM package.
-PACKAGE_TO_INSTALL_LIST+=("ros-${INSTALLING_ROS_DISTRO}-rosbridge-server")
-# rosbridge is required for the Web interface to communicate with ROS
-PACKAGE_TO_INSTALL_LIST+=("ros-${INSTALLING_ROS_DISTRO}-cv-bridge")
-# cv-bridge is required by the costmap converter package
-PACKAGE_TO_INSTALL_LIST+=("xvfb")
+PACKAGE_TO_INSTALL_LIST+=(xvfb)
# xvfb is required for Cypress testing to work.
PACKAGE_TO_INSTALL_LIST+=(cron)
# cron - required for running scheduled tasks
@@ -258,9 +238,7 @@ PACKAGE_TO_INSTALL_LIST+=(moreutils)
PACKAGE_TO_INSTALL_LIST+=(python3-pip)
# python3-pip - Required to install Python tools for things such as
# USB Relay reader.
-if ! [[ ${TRAVIS} == "true" ]]; then # Upgrading openssh in Travis often fails due to timeouts.
- PACKAGE_TO_INSTALL_LIST+=(openssh-server)
-fi
+PACKAGE_TO_INSTALL_LIST+=(openssh-server)
# openssh-server - required to SSH into robot remotely
PACKAGE_TO_INSTALL_LIST+=(python3-serial)
# python3-serial - required for ROS to talk to the Propeller Activity Board
@@ -303,15 +281,17 @@ fi
printf "\n${YELLOW}[Cloning or Updating git repositories]${NC}\n"
-printf "${LIGHTBLUE}ArloBot repository${NC}\n"
-if ! [[ -d "${HOME}/ArloBot" ]]; then
- cd "${HOME}"
- git clone -b jazzy https://github.com/chrisl8/ArloBot.git
-else
- cd "${HOME}/ArloBot"
- git fetch
- git checkout jazzy
- git pull
+if ! [[ ${DOCKER_TEST_INSTALL=true} == "true" ]]; then # This does not work on Docker
+ printf "${LIGHTBLUE}ArloBot repository${NC}\n"
+ if ! [[ -d "${HOME}/ArloBot" ]]; then
+ cd "${HOME}"
+ git clone -b jazzy https://github.com/chrisl8/ArloBot.git
+ else
+ cd "${HOME}/ArloBot"
+ git fetch
+ git checkout jazzy
+ git pull
+ fi
fi
if ! [[ -e ${HOME}/${ROS2_WS}/src/arlobot_ros ]]; then
@@ -342,6 +322,8 @@ export PIP_DISABLE_PIP_VERSION_CHECK=1
printf "\n${YELLOW}[Installing dependencies for ROS build-from-source packages.]${NC}\n"
cd "${HOME}/${ROS2_WS}"
+printf "${LIGHTBLUE}Running rosdep update . . .${NC}\n"
+rosdep update
rosdep install -q -y -r --from-paths src --ignore-src --rosdistro ${INSTALLING_ROS_DISTRO}
printf "\n${YELLOW}[Generating URDF file with xacro.]${NC}\n"