diff --git a/.gitignore b/.gitignore index c582f713e..a694f5a0a 100644 --- a/.gitignore +++ b/.gitignore @@ -48,7 +48,7 @@ compile_commands.json *.bag *.mcap *.hoot -bagfiles/deeptag-pytorch +bagfiles # Autogenerated .md5sum diff --git a/docker/docker-run b/docker/docker-run index 38a014ab1..1f361f5df 100755 --- a/docker/docker-run +++ b/docker/docker-run @@ -11,4 +11,4 @@ docker run "$@" -it --net=host -v /tmp/.X11-unix:/tmp/.X11-unix \ -v $HOME/tensorflow_workspace:/home/ubuntu/.tensorflow_workspace.readonly \ --ipc=host \ --shm-size=8G \ - -e DISPLAY=$DISPLAY -e NVIDIA_DRIVER_CAPABILITIES=all --privileged --user ubuntu frc900/zebros-2025-dev:latest /bin/bash + -e DISPLAY=$DISPLAY -e NVIDIA_DRIVER_CAPABILITIES=all --privileged --user ubuntu frc900/zebros-2026-dev:latest /bin/bash diff --git a/docker/docker-run-2 b/docker/docker-run-2 index 16a735c5e..5fcfe9933 100755 --- a/docker/docker-run-2 +++ b/docker/docker-run-2 @@ -12,4 +12,4 @@ docker run "$@" -it --net=host -v /tmp/.X11-unix:/tmp/.X11-unix \ --ipc=host \ -v /mnt/hgfs/Zebracorns:/mnt/hgfs/Zebracorns \ --shm-size=8G \ - -e DISPLAY=$DISPLAY --privileged --user ubuntu frc900/zebros-2025-dev:latest /bin/bash + -e DISPLAY=$DISPLAY --privileged --user ubuntu frc900/zebros-2026-dev:latest /bin/bash diff --git a/docker/docker-run-gpu b/docker/docker-run-gpu index 908bcdfca..35ff6652d 100755 --- a/docker/docker-run-gpu +++ b/docker/docker-run-gpu @@ -12,4 +12,4 @@ docker run "$@" -it --gpus all --net=host -v /tmp/.X11-unix:/tmp/.X11-unix \ --ipc=host \ -v /dev:/dev --privileged \ --shm-size=8G \ - -e DISPLAY=$DISPLAY -e NVIDIA_DRIVER_CAPABILITIES=all --user ubuntu frc900/zebros-2025-dev:latest /bin/bash + -e DISPLAY=$DISPLAY -e NVIDIA_DRIVER_CAPABILITIES=all --user ubuntu frc900/zebros-2026-dev:latest /bin/bash diff --git a/docker/docker-run-mac b/docker/docker-run-mac index 0dd43cf67..f1e4e4647 100755 --- a/docker/docker-run-mac +++ b/docker/docker-run-mac @@ -11,4 +11,4 @@ docker run "$@" -it --net=host -v /tmp/.X11-unix:/tmp/.X11-unix \ -v $HOME/tensorflow_workspace:/home/ubuntu/.tensorflow_workspace.readonly \ --ipc=host \ --shm-size=8G \ - -e DISPLAY=host.docker.internal:0 -e NVIDIA_DRIVER_CAPABILITIES=all --privileged --user ubuntu frc900/zebros-2025-dev:latest /bin/bash + -e DISPLAY=host.docker.internal:0 -e NVIDIA_DRIVER_CAPABILITIES=all --privileged --user ubuntu frc900/zebros-2026-dev:latest /bin/bash diff --git a/docker/macDockerRun.sh b/docker/macDockerRun.sh index 9758bd133..cb689122f 100755 --- a/docker/macDockerRun.sh +++ b/docker/macDockerRun.sh @@ -1,3 +1,3 @@ ip=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}') docker run -it --privileged -v /tmp/.X11-unix:/tmp/.X11-unix --net=host \ --v $(pwd)/../../other:/home/ubuntu/other -v $(pwd)/..:/home/ubuntu/900RobotCode -e DISPLAY=$ip:0 --user ubuntu frc900/zebros-2025-dev:latest /bin/bash +-v $(pwd)/../../other:/home/ubuntu/other -v $(pwd)/..:/home/ubuntu/900RobotCode -e DISPLAY=$ip:0 --user ubuntu frc900/zebros-2026-dev:latest /bin/bash diff --git a/scripts/jetson_install/canivore-usb-arm64-Jetpack-5-v3.zip b/scripts/jetson_install/canivore-usb-arm64-Jetpack-5-v3.zip deleted file mode 100644 index 5bd59d065..000000000 --- a/scripts/jetson_install/canivore-usb-arm64-Jetpack-5-v3.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:886bc4d70afa1d6e518bb50d3ff3d8a8d0c7119b7118de8050b3ab39eb8bbe46 -size 155655 diff --git a/scripts/jetson_install/canivore-usb-arm64-Ubuntu-20.04-v3.zip b/scripts/jetson_install/canivore-usb-arm64-Ubuntu-20.04-v3.zip deleted file mode 100644 index d256104cb..000000000 --- a/scripts/jetson_install/canivore-usb-arm64-Ubuntu-20.04-v3.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4237be2120cec33c28017098ab57b2e0a7cf2fdd9c8340ab7cc66a0d26f553c8 -size 155115 diff --git a/scripts/jetson_install/catkin_tools.patch b/scripts/jetson_install/catkin_tools.patch deleted file mode 100644 index 3e3742919..000000000 --- a/scripts/jetson_install/catkin_tools.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git catkin_tools/execution/executor.py catkin_tools/execution/executor.py -index 70cefd4..47854e5 100644 ---- catkin_tools/execution/executor.py -+++ catkin_tools/execution/executor.py -@@ -344,7 +344,10 @@ def execute_jobs( - new_queued_jobs, pending_jobs = split( - pending_jobs, - lambda j: j.all_deps_completed(completed_jobs)) -- queued_jobs.extend(new_queued_jobs) -+ new_queued_jobs.extend(queued_jobs) -+ -+ # queued jobs should preserve the original topological sort of jobs -+ queued_jobs = [j for j in jobs if j in new_queued_jobs] - - # Notify of newly queued jobs - for queued_job in new_queued_jobs: diff --git a/scripts/jetson_install/libnccl-dev_2.7.6-1+cuda10.2_arm64.deb b/scripts/jetson_install/libnccl-dev_2.7.6-1+cuda10.2_arm64.deb deleted file mode 100644 index 37f82f8fd..000000000 --- a/scripts/jetson_install/libnccl-dev_2.7.6-1+cuda10.2_arm64.deb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ae11750ab4854b77615d0d4fb386b9ce27b4253ad87c6245523558df69493109 -size 2712492 diff --git a/scripts/jetson_install/libnccl2_2.7.6-1+cuda10.2_arm64.deb b/scripts/jetson_install/libnccl2_2.7.6-1+cuda10.2_arm64.deb deleted file mode 100644 index 468d01c46..000000000 --- a/scripts/jetson_install/libnccl2_2.7.6-1+cuda10.2_arm64.deb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8245f40c9080fecb5849061ed2cc7bc726103baffc3e38dee5d8e1071e8f474b -size 2736556 diff --git a/scripts/jetson_install/setup_ROS.sh b/scripts/jetson_install/setup_ROS.sh deleted file mode 100644 index a9c7dcefa..000000000 --- a/scripts/jetson_install/setup_ROS.sh +++ /dev/null @@ -1,185 +0,0 @@ -/bin/bash -# ROS Setup install script for new jetsons -# Source: https://github.com/jetsonhacks/installROSTX1/blob/master/installROS.sh - -# Run me after running through setup_environment.sh -# TODO - any reason not to merge these files? - -# Setup Locale -# sudo update-locale LANG=C LANGUAGE=C LC_ALL=C LC_MESSAGES=POSIX -# 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 -curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - -# Grab new package lists from ros.org -sudo apt update - -# For intel realsense - from apt for x86 laptops, not yet (if ever) available for AARCH64 -# See https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md or our Dockerfile - -# From source for the Jetson -sudo apt install -y git libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev ninja-build libcurl4 -cd -mkdir realsense_src -cd realsense_src -wget https://github.com/IntelRealSense/librealsense/archive/v2.50.0.zip -unzip v2.50.0.zip -cd librealsense-2.50.0 -sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ -sudo udevadm control --reload-rules && udevadm trigger -mkdir build -cd build -cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=false -GNinja .. -sudo ninja uninstall && sudo ninja clean && sudo ninja install -cd -sudo rm -rf realsense_src - -sudo ccache -C -sudo ccache -c -sudo rm -rf /home/ubuntu/.cache /home/ubuntu/.ccache - -# Add Individual Packages here -# You can install a specific ROS package (replace underscores with dashes of the package name): -# sudo apt-get install ros-noetic-PACKAGE -# e.g. -# sudo apt-get install ros-noetic-navigation -# -# To find available packages: -# apt-cache search ros-noetic -# -# Keep each package on a separate line to aid in git merging -# Try to keep them in alphabetic order to make it easier to find duplicates - -# Pin stock ubuntu 20.04 opencv (version 4.2.0) instead of jetpack version 4.5.4 -sudo bash -c "echo Package: libopencv >> /etc/apt/preferences.d/libopencv" -sudo bash -c "echo Pin: release a=* >> /etc/apt/preferences.d/libopencv" -sudo bash -c "echo Pin-Priority: -10 >> /etc/apt/preferences.d/libopencv" - -sudo bash -c "echo Package: libopencv-dev >> /etc/apt/preferences.d/libopencv-dev" -sudo bash -c "echo Pin: version 4.2* >> /etc/apt/preferences.d/libopencv-dev" -sudo bash -c "echo Pin-Priority: 1000 >> /etc/apt/preferences.d/libopencv-dev" - -sudo apt purge -y libopencv -sudo apt install -y \ - ros-noetic-ros-base \ - liblua5.3-dev \ - libsuitesparse-dev \ - ninja-build \ - python3-catkin-tools \ - python3-pyqtgraph \ - python3-rosdep \ - python3-rosinstall \ - python3-wstool \ - ros-noetic-actionlib-tools \ - ros-noetic-camera-calibration \ - ros-noetic-controller-manager \ - ros-noetic-control-msgs \ - ros-noetic-cv-bridge \ - ros-noetic-ecl-geometry \ - ros-noetic-grid-map-core \ - ros-noetic-grid-map-cv \ - ros-noetic-grid-map-ros \ - ros-noetic-hardware-interface \ - ros-noetic-image-transport-plugins \ - ros-noetic-imu-filter-madgwick \ - ros-noetic-joint-limits-interface \ - ros-noetic-joint-state-publisher \ - ros-noetic-joy \ - ros-noetic-map-server \ - ros-noetic-marker-msgs \ - ros-noetic-moveit \ - ros-noetic*mux* \ - ros-noetic-navigation \ - ros-noetic-pcl-conversions \ - ros-noetic-robot-localization \ - ros-noetic-robot-state-publisher \ - ros-noetic-rosbridge-suite \ - ros-noetic-roslint \ - ros-noetic-rosparam-shortcuts \ - ros-noetic-rqt \ - ros-noetic-rqt-common-plugins \ - ros-noetic-rqt-controller-manager \ - ros-noetic-rtabmap-ros \ - ros-noetic-rviz \ - ros-noetic-rviz-imu-plugin \ - ros-noetic-serial \ - ros-noetic-teb-local-planner \ - ros-noetic-tf \ - ros-noetic-tf2-ros \ - ros-noetic-tf2-tools \ - ros-noetic-transmission-interface \ - ros-noetic-usb-cam \ - ros-noetic-xacro \ - terminator - -# Patch catkin tools/pkg for faster builds -cd /usr/lib/python3/dist-packages -sudo patch -p0 < ~/900RobotCode/scripts/jetson_install/catkin_pkg.patch -#sudo patch -p0 < ~/900RobotCode/scripts/jetson_install/catkin_tools.patch - -# Fix bug in released version of catkin_tools - TODO check me -#sudo sed -i 's/ errno.EINTR/ errno.EINTR and e.errno != errno.EAGAIN/' /usr/lib/python2.7/dist-packages/catkin_tools/execution/job_server.py - - -# Install gazebo sim - commented out because we don't -# want/need it taking up space on the Jetson -#curl -sSL http://get.gazebosim.org | sh -# sudo apt install -y \ -# ros-noetic-gazebo-ros-control \ -# ros-noetic-gazebo-ros-pkgs \ - -# Not for noetic - ros-noetic-hector-slam ros-noetic-hector-slam-launch ros-noetic-gmapping -# handled by wstool for now ros-noetic-teraranger-* - -# Initialize rosdep -# ssl certificates can get messed up on TX1 for some reason -sudo c_rehash /etc/ssl/certs -# Initialize rosdep -sudo rosdep init -# To find available packages, use: -rosdep update - -cd ~/900RobotCode/zebROS_ws/src -#wstool init -#cd .. - -# These should all be merged in the GIT repo version -# of the code. Check 900RobotCode/zebROS_ws/src/.rosinstall to -# verify. Leaving the commands here just in case we need to recreate -# a workspace elsewhere - -# Google Cartographer installation forked from https://google-cartographer-ros.readthedocs.io/en/latest/ -# Merge the cartographer_ros.rosinstall file and fetch code for dependencies. -#wstool merge https://raw.githubusercontent.com/FRC900/cartographer_ros/master/cartographer_ros.rosinstall - -# Code to use joystick to control robot -#wstool merge https://raw.githubusercontent.com/FRC900/teleop_twist_joy/indigo-devel/teleop_twist_joy.rosinstall - -# Merge ZED wrapper -#wstool merge https://raw.githubusercontent.com/FRC900/zed-ros-wrapper/master/zed_ros_wrapper.rosinstall - -# Boilerplate control code -#wstool merge https://raw.githubusercontent.com/FRC900/steered_wheel_base_controller/master/steered_wheel_base_controller.rosinstall -#wstool merge https://raw.githubusercontent.com/FRC900/ros_control_boilerplate/noetic-devel/ros_control_boilerplate.rosinstall - -# LIDAR driver -#wstool merge https://raw.githubusercontent.com/FRC900/rplidar_ros/master/rplidar.rosinstall - -# Pull latest version of merged repos -wstool update -j 4 - -# Install deb dependencies. -# The command 'sudo rosdep init' will print an error if you have already -# executed it since installing ROS. This error can be ignored. -rosdep update -rosdep install --from-paths . --ignore-src --rosdistro=noetic -y - -#source /opt/ros/noetic/setup.bash - -#cd ~/900RobotCode/zebROS_ws -#catkin_make - - -sudo apt clean -sudo apt autoclean -sudo apt clean diff --git a/scripts/jetson_install/setup_environment.sh b/scripts/jetson_install/setup_environment.sh index 885c7c98e..6c9da097b 100644 --- a/scripts/jetson_install/setup_environment.sh +++ b/scripts/jetson_install/setup_environment.sh @@ -1,9 +1,8 @@ -# Script to setup Jetson Xavier NX environment. Probably would also work -# with slight modifications on other Jetson hardware +# Script to setup Jetson Orin NX environment. +# See _xavier.sh script for a similar script for the Jetson Xavier NX #install basic dependencies sudo apt-add-repository ppa:ubuntu-toolchain-r/test -y -sudo apt-add-repository ppa:borglab/gtsam-release-4.1 -y sudo apt update # Keep these the original version to line up with kernel versions supported by arducam? @@ -13,6 +12,10 @@ sudo apt -y upgrade # These are listed 1 package per line to hopefully make git merging easier # They're also sorted alphabetically to keep packages from being listed multiple times + + # libclang1-9 \ + # libgtsam-dev \ + # libgtsam-unstable-dev \ sudo apt install -y \ build-essential \ can-utils \ @@ -23,12 +26,11 @@ sudo apt install -y \ cowsay \ dbus-x11 \ exfat-fuse \ - exfat-utils \ - gcc-10 \ gcc-11 \ + gcc-12 \ gcc-13 \ - g++-10 \ g++-11 \ + g++-12 \ g++-13 \ gdb \ gfortran \ @@ -43,12 +45,9 @@ sudo apt install -y \ libcanberra-gtk-module \ libcanberra-gtk3-module \ libclang-12-dev \ - libclang1-9 \ libeigen3-dev \ libflann-dev \ libgflags-dev \ - libgtsam-dev \ - libgtsam-unstable-dev \ libgoogle-glog-dev \ libgoogle-perftools-dev \ libgmock-dev \ @@ -101,25 +100,22 @@ sudo apt install -y \ zlib1g-dev \ zstd -# gcc-11 fails on CUDA code, so we need to use gcc-10 for now -# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 11 --slave /usr/bin/g++ g++ /usr/bin/g++-11 -sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 -sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 +sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 130 --slave /usr/bin/g++ g++ /usr/bin/g++-13 +sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 120 --slave /usr/bin/g++ g++ /usr/bin/g++-12 +sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110 --slave /usr/bin/g++ g++ /usr/bin/g++-11 sudo update-alternatives --auto gcc -#TensorRT requires a newer version of cmake than standard apt repos provide -# TODO - we don't use TensorRT anymore, so this can probably be removed +# CUDA with c++20 requires a newer version of cmake than is provided via apt cd -#wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null -wget https://github.com/Kitware/CMake/releases/download/v3.27.0/cmake-3.27.0.tar.gz -tar -xf cmake-3.27.0.tar.gz -cd cmake-3.27.0 +wget https://github.com/Kitware/CMake/releases/download/v3.31.8/cmake-3.31.8.tar.gz +tar -xf cmake-3.31.8.tar.gz +cd cmake-3.31.8 cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release . sudo ninja install sudo mv /usr/bin/cmake /usr/bin/cmake.old sudo ln -s /usr/local/bin/cmake /usr/bin/cmake cd .. -sudo rm -rf cmake-3.27.0* +sudo rm -rf cmake-3.31.8* # Install tinyxml2 cd @@ -133,14 +129,13 @@ cd ../.. sudo rm -rf tinyxml2 #install zed sdk -wget --no-check-certificate https://download.stereolabs.com/zedsdk/4.2/l4t35.4/jetsons +wget --no-check-certificate https://download.stereolabs.com/zedsdk/5.0/l4t36.4/jetsons chmod 755 jetsons ./jetsons rm ./jetsons rm -rf /home/ubuntu/.local/lib/python3.8/site-packages/numpy -#mount and setup autostart script -sudo mkdir /mnt/900_2 +# Grab repo to make it easier to copy files from there to the Jetson cd git clone https://github.com/FRC900/900RobotCode.git cd ~/900RobotCode @@ -154,20 +149,20 @@ cd ~/900RobotCode #echo " down /sbin/ifconfig can0 down" >> can0 #sudo mv can0 /etc/network/interfaces.d -# sudo curl -s --compressed -o /usr/share/keyrings/ctr-pubkey.gpg "https://deb.ctr-electronics.com/ctr-pubkey.gpg" -# sudo curl -s --compressed -o /etc/apt/sources.list.d/ctr.list "https://deb.ctr-electronics.com/ctr.list" -# sudo curl -s --compressed -o /etc/apt/sources.list.d/ctr2024.list "https://deb.ctr-electronics.com/ctr2024.list" -# sudo sed -i -e 's/tools stable main/tools jetson main/' /etc/apt/sources.list.d/ctr2024.list +sudo curl -s --compressed -o /usr/share/keyrings/ctr-pubkey.gpg "https://deb.ctr-electronics.com/ctr-pubkey.gpg" +sudo curl -s --compressed -o /etc/apt/sources.list.d/ctr.list "https://deb.ctr-electronics.com/ctr.list" +sudo curl -s --compressed -o /etc/apt/sources.list.d/ctr2024.list "https://deb.ctr-electronics.com/ctr2024.list" +sudo sed -i -e 's/tools stable main/tools jetson main/' /etc/apt/sources.list.d/ctr2024.list sudo apt remove linux-headers-generic linux-headers-5.4.0-* linux-headers-5.4.0-*-generic sudo apt update sudo apt install -y dkms -#sudo apt install -y canivore-usb -cd /tmp -unzip /home/ubuntu/900RobotCode/scripts/jetson_install/canivore-usb-arm64-Ubuntu-20.04-v3.zip -sudo dpkg -i canivore-usb-kernel_1.13_arm64.deb -sudo dpkg -i canivore-usb_1.13_arm64.deb -sudo apt-mark hold canivore-usb canivore-usb-kernel +sudo apt install -y canivore-usb +# cd /tmp +# unzip /home/ubuntu/900RobotCode/scripts/jetson_install/canivore-usb-arm64-Ubuntu-20.04-v3.zip +# sudo dpkg -i canivore-usb-kernel_1.13_arm64.deb +# sudo dpkg -i canivore-usb_1.13_arm64.deb +# sudo apt-mark hold canivore-usb canivore-usb-kernel # Re-enable if we want to use a canivore usb interface # sudo bash -c "echo \"[Match\"] >> /etc/systemd/network/80-can.network" @@ -314,7 +309,7 @@ sudo cp ~/900RobotCode/scripts/jetson_install/calibration_files/*.conf /usr/loca sudo chmod 644 /usr/local/zed/settings/* cp ~/900RobotCode/.vimrc ~/900RobotCode/.gvimrc ~ -sudo cp ~/900RobotCode/kjaget.vim /usr/share/vim/vim81/colors +sudo cp ~/900RobotCode/kjaget.vim /usr/share/vim/vim82/colors git config --global user.email "progammers@team900.org" git config --global user.name "Team900 Jetson NX" @@ -327,17 +322,6 @@ sudo ln -s /usr/include/opencv4 /usr/include/opencv echo "source /home/ubuntu/900RobotCode/zebROS_ws/command_aliases.sh" >> /home/ubuntu/.bashrc -# Install make 4.3 (>4.2 is required for -flto=jobserver support -cd -wget https://ftp.gnu.org/gnu/make/make-4.3.tar.gz -tar -xf make-4.3.tar.gz -mkdir make-4.3/build -cd make-4.3/build -../configure --prefix=/usr -sudo make -j`nproc --all` install -cd -sudo rm -rf make-4.3* - # Give the ubuntu user dialout permission, which is used by the ADI IMU sudo adduser ubuntu dialout @@ -370,38 +354,29 @@ sudo python3 -m pip install --no-cache-dir --upgrade psutil sudo python3 -m pip install --no-cache-dir --upgrade 'onnx>=1.12' sudo python3 -m pip install --no-cache-dir --upgrade 'onnxsim>=0.4.1' -wget https://nvidia.box.com/shared/static/mvdcltm9ewdy2d5nurkiqorofz1s53ww.whl -O onnxruntime_gpu-1-15.0-cp38-cp38-linux_aarch64.whl -sudo pip3 install onnxruntime_gpu-1-15.0-cp38-cp38-linux_aarch64.whl -rm onnxruntime_gpu-1-15.0-cp38-cp38-linux_aarch64.whl +wget https://nvidia.box.com/shared/static/6l0u97rj80ifwkk8rqbzj1try89fk26z.whl -O onnxruntime_gpu-1-19.0-cp310-cp310-linux_aarch64.whl +wget https://pypi.jetson-ai-lab.dev/jp6/cu126/+f/869/e41abdc35e093/onnxruntime_gpu-1.22.0-cp310-cp310-linux_aarch64.whl#sha256=869e41abdc35e09345876f047fce49267d699df3e44b67c2518b0469739484ff +wget https://pypi.jetson-ai-lab.io/jp6/cu126/+f/4eb/e6a8902dc7708/onnxruntime_gpu-1.23.0-cp310-cp310-linux_aarch64.whl#sha256=4ebe6a8902dc7708434b2e1541b3fe629ebf434e16ab5537d1d6a622b42c622b + +sudo pip3 install onnxruntime_gpu-1.23.0-cp310-cp310-linux_aarch64.whl +rm onnxruntime_gpu-1.23.0-cp310-cp310-linux_aarch64.whl # cpu-only version : sudo python3 -m pip install --no-cache-dir --upgrade 'onnxruntime' -# not available sudo python3 -m pip install --no-cache-dir --upgrade onnxruntime-gpu #sudo python3 -m pip install --no-cache-dir --upgrade nvidia-pyindex #sudo python3 -m pip install --no-cache-dir --upgrade nvidia-tensorrt -#export PYTORCH_URL=https://nvidia.box.com/shared/static/rehpfc4dwsxuhpv4jgqv8u6rzpgb64bq.whl -#export PYTORCH_WHL=torch-2.0.0a0+ec3941ad.nv23.2-cp38-cp38-linux_aarch64.whl -export PYTORCH_URL=https://nvidia.box.com/shared/static/i8pukc49h3lhak4kkn67tg9j4goqm0m7.whl -export PYTORCH_WHL=torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl - sudo apt-get install -y libopenblas-base libopenmpi-dev -wget --quiet --show-progress --progress=bar:force:noscroll --no-check-certificate ${PYTORCH_URL} -O ${PYTORCH_WHL} -sudo pip3 install --no-cache-dir --verbose ${PYTORCH_WHL} -rm ${PYTORCH_WHL} - - -export TORCHVISION_VERSION=0.15 -export TORCH_CUDA_ARCH_LIST="7.2;8.7" -sudo apt install -y libjpeg-dev libpng-dev zlib1g-dev -git clone --branch release/${TORCHVISION_VERSION} --recursive --depth=1 https://github.com/pytorch/vision torchvision -cd torchvision -git checkout release/${TORCHVISION_VERSION} -sudo python3 setup.py install -cd .. -sudo rm -rf torchvision +wget https://pypi.jetson-ai-lab.io/jp6/cu126/+f/62a/1beee9f2f1470/torch-2.8.0-cp310-cp310-linux_aarch64.whl#sha256=62a1beee9f2f147076a974d2942c90060c12771c94740830327cae705b2595fc +sudo pip3 install torch-2.8.0-cp310-cp310-linux_aarch64.whl +rm torch-2.8.0-cp310-cp310-linux_aarch64.whl + +wget https://pypi.jetson-ai-lab.io/jp6/cu126/+f/907/c4c1933789645/torchvision-0.23.0-cp310-cp310-linux_aarch64.whl#sha256=907c4c1933789645ebb20dd9181d40f8647978e6bd30086ae7b01febb937d2d1 +sudo pip3 install torchvision-0.23.0-cp310-cp310-linux_aarch64.whl +rm torchvision-0.23.0-cp310-cp310-linux_aarch64.whl sudo python3 -m pip install --no-cache-dir --upgrade 'pytorch_pfn_extras' sudo python3 -m pip install --no-cache-dir --upgrade ultralytics + cd /home/ubuntu git clone https://github.com/triple-Mu/YOLOv8-TensorRT.git # End of ultralytics YOLOv8 deps @@ -425,11 +400,9 @@ sudo rm -rf /home/ubuntu/.cache /home/ubuntu/.ccache sudo pip3 install pyserial sudo pip3 install cupy-cuda11x -# TODO - figure out a real fix for the build error in newer commits cd /home/ubuntu &&\ git clone https://github.com/abseil/abseil-cpp.git &&\ cd abseil-cpp &&\ - git checkout a3f7e9866c67ca090995aa638276b8fd8938c6f3 &&\ mkdir build &&\ cd build &&\ cmake -DABSL_BUILD_TESTING=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DABSL_USE_GOOGLETEST_HEAD=ON -DCMAKE_CXX_STANDARD=17 -GNinja .. &&\ @@ -445,3 +418,179 @@ cd ~ wget https://github.com/ArduCAM/MIPI_Camera/releases/download/v0.0.3/install_full.sh chmod +x install_full.sh ./install_full.sh -m arducam + +# Install gtsam - tagslam prereq +cd /home/ubuntu &&\ + git clone https://github.com/borglab/gtsam.git &&\ + cd gtsam &&\ + git checkout release/4.2 &&\ + mkdir build &&\ + cd build &&\ + cmake -DCMAKE_BUILD_TYPE=Release -DGTSAM_WITH_TBB=ON -DGTSAM_USE_SYSTEM_EIGEN=ON -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF -GNinja .. &&\ + ninja &&\ + sudo ninja install &&\ + cd /home/ubuntu &&\ + sudo rm -rf gtsam + +# Needed to get catkin to put python libs in the correct locations +sudo pip3 install -U 'setuptools<66' + +### ROS setup +# sudo sh -c "echo 'deb [arch=arm64] http://robotpkg.openrobots.org/packages/debian/pub $(lsb_release -cs) robotpkg' >> /etc/apt/sources.list.d/robotpkg.list" +sudo apt update +sudo apt install -y \ + nlohmann-json3-dev \ + libompl-dev \ + libturbojpeg0-dev \ + ompl-demos \ + python3-rosdistro \ + python3-rosinstall \ + python3-rosinstall-generator +sudo python3 -m pip install --no-cache-dir "catkin-pkg==1.0.0" "catkin-tools==0.9.5" rosdep roslibpy vcstool vcstools +cd /usr/lib/python3/dist-packages/ +sudo patch -p0 < /home/ubuntu/900RobotCode/scripts/jetson_install/catkin_pkg.patch + +sudo rosdep init +rosdep update + +mkdir ~/ros_catkin_ws +cd ~/ros_catkin_ws +mkdir src +sudo apt update + +# TODO - do we need rqt on the Jetson? +rosinstall_generator \ + apriltag \ + apriltag_ros \ + camera_calibration \ + controller_manager \ + control_msgs \ + control_toolbox \ + cv_bridge \ + ecl_geometry \ + hardware_interface \ + image_pipeline \ + image_transport_plugins \ + imu_filter_madgwick \ + joint_limits_interface \ + joint_state_publisher \ + joint_state_publisher_gui \ + joy \ + map_server \ + marker_msgs \ + moveit \ + navigation \ + pcl_conversions \ + pcl_ros \ + robot_localization \ + robot_state_publisher \ + ros_base \ + ros_type_introspection \ + rosbridge_suite \ + roslint \ + rosparam_shortcuts \ + rospy_message_converter \ + rqt \ + rqt_common_plugins \ + rqt_controller_manager \ + rqt_tf_tree \ + rosserial \ + serial \ + smach \ + smach_ros \ + tf \ + tf2_py \ + tf2_ros \ + tf2_tools \ + transmission_interface \ + turtlesim \ + twist_mux \ + twist_mux_msgs \ + usb_cam \ + xacro \ + --rosdistro noetic --deps --tar > .rosinstall +grep -n -A2 -B1 rosconsole$ .rosinstall | sed -n 's/^\([0-9]\{1,\}\).*/\1d/p' | sed -i -f - .rosinstall +echo '- git:' >> .rosinstall +echo ' local-name: rosconsole' >> .rosinstall +echo ' uri: https://github.com/ros-o/rosconsole' >> .rosinstall +vcs import --input .rosinstall ./src +sed -i -e 's/python3-catkin-pkg-modules/python3-catkin-pkg/' src/rospack/package.xml +sed -i -e 's$python3-rosdep-modules$$' src/rospack/package.xml +sed -i -e 's/python3-rospkg-modules/python3-rospkg/' src/rqt/rqt_gui/package.xml +sed -i -e 's/set(CMAKE_CXX_STANDARD 14)/set(CMAKE_CXX_STANDARD 20)/' src/robot_localization/CMakeLists.txt +sed -i -e 's/set(CMAKE_CXX_STANDARD 14)/set(CMAKE_CXX_STANDARD 20)/' src/urdf/urdf/CMakeLists.txt +sed -i -e 's/add_compile_options(-std=c++14)/add_compile_options(-std=c++20)/' src/rosparam_shortcuts/CMakeLists.txt +sed -i -e 's/add_compile_options(-std=c++11)/add_compile_options(-std=c++20)/' src/rqt_image_view/CMakeLists.txt +sed -i -e 's/add_compile_options(-std=c++11)/add_compile_options(-std=c++20)/' src/geometry/tf/CMakeLists.txt +sed -i -e 's/add_compile_options(-std=c++14)/add_compile_options(-std=c++20)/' src/perception_pcl/pcl_ros/CMakeLists.txt +sed -i -e 's/-std=c++11/-std=c++20/' src/resource_retriever/CMakeLists.txt +sed -i -e 's/-std=c++11/-std=c++20/' src/sophus/CMakeLists.txt +sed -i -e 's/option(BUILD_TESTS "Build tests." ON)/option(BUILD_TESTS "Build tests." OFF)/' src/sophus/CMakeLists.txt +sed -i -e 's/option(BUILD_EXAMPLES "Build examples." ON)/option(BUILD_EXAMPLES "Build examples." OFF)/' src/sophus/CMakeLists.txt +sed -i -e 's/-std=c++11/-std=c++20/' src/rosparam_shortcuts/CMakeLists.txt +sed -i -e 's/-std=c++11/-std=c++20/' src/robot_state_publisher/CMakeLists.txt +sed -i -e 's/-std=c++11/-std=c++20/' src/roscpp_core/rostime/CMakeLists.txt +sed -i -e 's/-std=c++11/-std=c++20/g' src/pluginlib/CMakeLists.txt +sed -i -e 's/-std=c++11/-std=c++20/' src/geometry/tf/CMakeLists.txt +sed -i -e 's/-std=c++11/-std=c++20/' src/geometric_shapes/CMakeLists.txt +sed -i -e 's/-std=c++11/-std=c++20/' src/fcl/CMakeLists.txt +sed -i -e 's/-std=c++11/-std=c++20/' src/ros_type_introspection/CMakeLists.txt +sed -i -e 's/set(CMAKE_CXX_STANDARD 14)/set(CMAKE_CXX_STANDARD 20)/' src/class_loader/CMakeLists.txt +sed -i -e 's/set(CMAKE_CXX_STANDARD 14)/set(CMAKE_CXX_STANDARD 20)/' src/kdl_parser/kdl_parser/CMakeLists.txt +sed -i -e 's/project(laser_geometry)/project(laser_geometry)\nset(CMAKE_CXX_STANDARD 17)/' src/laser_geometry/CMakeLists.txt +sed -i -e 's/set(CMAKE_CXX_STANDARD 11)/set(CMAKE_CXX_STANDARD 20)/' src/sophus/CMakeLists.txt +sed -i -e 's/set(CMAKE_CXX_STANDARD 11)/set(CMAKE_CXX_STANDARD 20)/' src/joystick_drivers/joy/CMakeLists.txt +sed -i -e 's/set(CMAKE_CXX_STANDARD 14)/set(CMAKE_CXX_STANDARD 20)/' src/perception_pcl/pcl_ros/CMakeLists.txt +sed -i -e 's/${avcodec_LIBRARIES}/${avcodec_LIBRARIES} ${avutil_LIBRARIES}/' src/usb_cam/CMakeLists.txt +sed -i -e 's/pkg_check_modules(avcodec libavcodec REQUIRED)/pkg_check_modules(avcodec libavcodec REQUIRED)\npkg_check_modules(avutil libavutil REQUIRED)/' src/usb_cam/CMakeLists.txt +sed -i -e 's/project(rviz)/project(rviz)\nunset(CMAKE_CXX_STANDARD)\nset(CMAKE_CXX_STANDARD 17)/' src/rviz/CMakeLists.txt +sed -i -e 's/project(gazebo_ros)/project(gazebo_ros)\nunset(CMAKE_CXX_STANDARD)\nset(CMAKE_CXX_STANDARD 17)/' src/gazebo_ros_pkgs/gazebo_ros/CMakeLists.txt +sed -i -e 's/project(gazebo_plugins)/project(gazebo_plugins)\nunset(CMAKE_CXX_STANDARD)\nset(CMAKE_CXX_STANDARD 17)/' src/gazebo_ros_pkgs/gazebo_plugins/CMakeLists.txt +sed -i -e 's/project(gazebo_ros_control)/project(gazebo_ros_control)\nunset(CMAKE_CXX_STANDARD)\nset(CMAKE_CXX_STANDARD 17)/' src/gazebo_ros_pkgs/gazebo_ros_control/CMakeLists.txt +sed -i -e 's/project(rviz_imu_plugin)/project(rviz_imu_plugin)\nunset(CMAKE_CXX_STANDARD)\nset(CMAKE_CXX_STANDARD 17)/' src/imu_tools/rviz_imu_plugin/CMakeLists.txt +sed -i -e 's/OcTreeBase(double res) : OcTreeBaseImpl(res) {};/OcTreeBase(double res) : OcTreeBaseImpl(res) {};/' src/octomap/octomap/include/octomap/OcTreeBase.h +sed -i -e 's/operator == (const ScanNode\& other)/operator == (const ScanNode\& other) const/' src/octomap/octomap/include/octomap/ScanGraph.h +sed -i -e 's/operator == (const ScanEdge\& other)/operator == (const ScanEdge\& other) const/' src/octomap/octomap/include/octomap/ScanGraph.h +sed -i -e 's/SphereSpecification(S radius_, const Vector3\& center_)/SphereSpecification(S radius_, const Vector3\& center_)/' src/fcl/test/narrowphase/detail/convexity_based_algorithm/test_gjk_libccd-inl_signed_distance.cpp +sed -i -e 's/project(moveit_kinematics)/project(moveit_kinematics)\nset(CMAKE_CXX_STANDARD 17)/' src/moveit/moveit_kinematics/CMakeLists.txt +sed -i -e 's/project(moveit_ros_visualization)/project(moveit_ros_visualization)\nset(CMAKE_CXX_STANDARD 17)/' src/moveit/moveit_ros_visualization/CMakeLists.txt +sed -i -e 's/project(moveit_setup_assistant)/project(moveit_setup_assistant)\nset(CMAKE_CXX_STANDARD 17)/' src/moveit/moveit_setup_assistant/CMakeLists.txt +sed -i -e 's/PlanningContextBase(const std::string\& name, const std::string\& group/PlanningContextBase(const std::string\& name, const std::string\& group/' src/moveit/pilz_industrial_motion_planner/include/pilz_industrial_motion_planner/planning_context_base.h +sed -i -e 's/#if span_CPP11_OR_GREATER && span_FEATURE( BYTE_SPAN ) \&\& ( span_HAVE( BYTE ) || span_HAVE( NONSTD_BYTE ) )/#if 0/' src/ros_type_introspection/include/ros_type_introspection/utils/span.hpp +sed -i -e 's/python/python3/' ~/ros_catkin_ws/src/gazebo_ros_pkgs/gazebo_plugins/cfg/*.cfg +cd ./src/roscpp_core/roscpp_serialization/include/ros +rm serialization.h +wget https://raw.githubusercontent.com/ros/roscpp_core/72ce04f8b2849e0e4587ea4d598be6ec5d24d8ca/roscpp_serialization/include/ros/serialization.h +cd ../../../../.. +rosdep install --from-paths ./src --ignore-packages-from-source --rosdistro noetic -y +rosdep update +sed -i 's/${OMPL_LIBRARIES}/\/usr\/lib\/aarch64-linux-gnu\/libompl.so/' ./src/moveit/moveit_planners_ompl/ompl_interface/CMakeLists.txt +sudo cp -r /usr/include/ompl-1.5/ompl/ /usr/include/ompl/ +cd src +rm -rf actionlib +git clone -b noetic-devel https://github.com/FRC900/actionlib.git +rm -rf realtime_tools +git clone -b fix_non_realtime https://github.com/FRC900/realtime_tools +cd .. +catkin config --install --install-space /opt/ros/noetic -DSETUPTOOLS_DEB_LAYOUT=OFF -DPYTHON_EXECUTABLE=/usr/bin/python3 + +sudo bash +pip3 install 'numpy<2.0.0' +catkin build -DCATKIN_ENABLE_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=20 -DPYTHON_EXECUTABLE=/usr/bin/python3 catkin +export PATH=/opt/openrobots/bin:$PATH +export PKG_CONFIG_PATH=/opt/openrobots/lib/pkgconfig:$PKG_CONFIG_PATH +export LD_LIBRARY_PATH=/opt/openrobots/lib:$LD_LIBRARY_PATH +export CMAKE_PREFIX_PATH=/opt/openrobots:$CMAKE_PREFIX_PATH +export PYTHONPATH=/opt/openrobots/lib/python3.10/site-packages:$PYTHONPATH +export PYTHONPATH=$PYTHONPATH:/opt/ros/noetic/lib/python3.10/dist-packages +export PYTHONPATH=$PYTHONPATH:/opt/ros/noetic/lib/python3.10/site-packages +export PYTHONPATH=$PYTHONPATH:/opt/ros/noetic/local/lib/python3.10/dist-packages +export PYTHONPATH=$PYTHONPATH:/opt/ros/noetic/local/lib/python3.10/site-packages +#devel/env.sh catkin build -DCATKIN_ENABLE_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_FLAGS="-DBOOST_BIND_GLOBAL_PLACEHOLDERS -Wno-psabi -Wno-deprecated-copy -Wno-nonnull -Wno-float-conversion -Wno-class-memaccess -Wno-register -Wno-deprecated-copy -Wno-deprecated-enum-enum-conversion -Wno-deprecated-declarations -DNON_POLLING -ftrack-macro-expansion=0 -fno-var-tracking-assignments" -DPYTHON_EXECUTABLE=/usr/bin/python3 dynamic_reconfigure +#cp -r /opt/ros/noetic/lib/python3.10/site-packages/dynamic_reconfigure/* /opt/ros/noetic/local/lib/python3.10/dist-packages/dynamic_reconfigure +# Build this with a lower number of jobs to prevent running out of memory +devel/env.sh catkin build -DCATKIN_ENABLE_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_FLAGS="-DBOOST_BIND_GLOBAL_PLACEHOLDERS -Wno-psabi -Wno-deprecated-copy -Wno-nonnull -Wno-float-conversion -Wno-class-memaccess -Wno-register -Wno-deprecated-copy -Wno-deprecated-enum-enum-conversion -Wno-deprecated-declarations -DNON_POLLING -ftrack-macro-expansion=0 -fno-var-tracking-assignments" -DPYTHON_EXECUTABLE=/usr/bin/python3 -j2 eigenpy +devel/env.sh catkin build -DCATKIN_ENABLE_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_FLAGS="-DBOOST_BIND_GLOBAL_PLACEHOLDERS -Wno-psabi -Wno-deprecated-copy -Wno-nonnull -Wno-float-conversion -Wno-class-memaccess -Wno-register -Wno-deprecated-copy -Wno-deprecated-enum-enum-conversion -Wno-deprecated-declarations -DNON_POLLING -ftrack-macro-expansion=0 -fno-var-tracking-assignments" -DPYTHON_EXECUTABLE=/usr/bin/python3 +rsync -avz /opt/ros/noetic/lib/python3.10/site-packages/ /opt/ros/noetic/local/lib/python3.10/dist-packages/ +### Be sure to exit sudo here + diff --git a/scripts/jetson_install/setup_environment_xavier.sh b/scripts/jetson_install/setup_environment_xavier.sh new file mode 100644 index 000000000..885c7c98e --- /dev/null +++ b/scripts/jetson_install/setup_environment_xavier.sh @@ -0,0 +1,447 @@ +# Script to setup Jetson Xavier NX environment. Probably would also work +# with slight modifications on other Jetson hardware + +#install basic dependencies +sudo apt-add-repository ppa:ubuntu-toolchain-r/test -y +sudo apt-add-repository ppa:borglab/gtsam-release-4.1 -y +sudo apt update + +# Keep these the original version to line up with kernel versions supported by arducam? +# TODO : Test updating after installing camera stuff +sudo apt-mark hold nvidia-l4t-bootloader nvidia-l4t-display-kernel nvidia-l4t-initrd nvidia-l4t-kernel nvidia-l4t-kernel-dtbs nvidia-l4t-kernel-headers nvidia-l4t-tools nvidia-l4t-xusb-firmware +sudo apt -y upgrade + +# These are listed 1 package per line to hopefully make git merging easier +# They're also sorted alphabetically to keep packages from being listed multiple times +sudo apt install -y \ + build-essential \ + can-utils \ + ccache \ + chromium-browser \ + clang-12 \ + cmake \ + cowsay \ + dbus-x11 \ + exfat-fuse \ + exfat-utils \ + gcc-10 \ + gcc-11 \ + gcc-13 \ + g++-10 \ + g++-11 \ + g++-13 \ + gdb \ + gfortran \ + git \ + git-lfs \ + gstreamer1.0-plugins-* \ + hdf5-tools \ + htop \ + libatlas-base-dev \ + libboost-all-dev \ + libblas-dev \ + libcanberra-gtk-module \ + libcanberra-gtk3-module \ + libclang-12-dev \ + libclang1-9 \ + libeigen3-dev \ + libflann-dev \ + libgflags-dev \ + libgtsam-dev \ + libgtsam-unstable-dev \ + libgoogle-glog-dev \ + libgoogle-perftools-dev \ + libgmock-dev \ + libgpiod-dev \ + libgtk2.0-dev \ + libhdf5-dev \ + libhdf5-serial-dev \ + libjpeg8-dev \ + liblapack-dev \ + libleveldb-dev \ + liblmdb-dev \ + liblua5.3-dev \ + libnlopt-cxx-dev \ + libnlopt-dev \ + libpcl-dev \ + libproj-dev \ + libqt5designer5 \ + libqt5designercomponents5 \ + libsnappy-dev \ + libsuitesparse-dev \ + libtinyxml2-dev \ + net-tools \ + ninja-build \ + nmap \ + ntp \ + ntpstat \ + openssh-client \ + pkg-config \ + pyqt5-dev-tools \ + python3-dev \ + python3-matplotlib \ + python3-numpy \ + python3-opencv \ + python3-pip \ + python3-pyqt5 \ + python3-pyqtgraph \ + python3-scipy \ + python3 \ + rsync \ + software-properties-common \ + terminator \ + tree \ + unzip \ + v4l-conf \ + v4l-utils \ + vim-gtk \ + wget \ + xfonts-scalable \ + zip \ + zlib1g-dev \ + zstd + +# gcc-11 fails on CUDA code, so we need to use gcc-10 for now +# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 11 --slave /usr/bin/g++ g++ /usr/bin/g++-11 +sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 +sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 +sudo update-alternatives --auto gcc + +#TensorRT requires a newer version of cmake than standard apt repos provide +# TODO - we don't use TensorRT anymore, so this can probably be removed +cd +#wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null +wget https://github.com/Kitware/CMake/releases/download/v3.27.0/cmake-3.27.0.tar.gz +tar -xf cmake-3.27.0.tar.gz +cd cmake-3.27.0 +cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release . +sudo ninja install +sudo mv /usr/bin/cmake /usr/bin/cmake.old +sudo ln -s /usr/local/bin/cmake /usr/bin/cmake +cd .. +sudo rm -rf cmake-3.27.0* + +# Install tinyxml2 +cd +git clone https://github.com/leethomason/tinyxml2.git +cd tinyxml2 +mkdir build +cd build +cmake -GNinja .. +sudo ninja install +cd ../.. +sudo rm -rf tinyxml2 + +#install zed sdk +wget --no-check-certificate https://download.stereolabs.com/zedsdk/4.2/l4t35.4/jetsons +chmod 755 jetsons +./jetsons +rm ./jetsons +rm -rf /home/ubuntu/.local/lib/python3.8/site-packages/numpy + +#mount and setup autostart script +sudo mkdir /mnt/900_2 +cd +git clone https://github.com/FRC900/900RobotCode.git +cd ~/900RobotCode + +# Set up can0 network interface +#cd +#echo "auto can0" > can0 +#echo "iface can0 inet manual" >> can0 +#echo " pre-up /sbin/ip link set can0 type can bitrate 1000000" >> can0 +#echo " up /sbin/ifconfig can0 up" >> can0 +#echo " down /sbin/ifconfig can0 down" >> can0 +#sudo mv can0 /etc/network/interfaces.d + +# sudo curl -s --compressed -o /usr/share/keyrings/ctr-pubkey.gpg "https://deb.ctr-electronics.com/ctr-pubkey.gpg" +# sudo curl -s --compressed -o /etc/apt/sources.list.d/ctr.list "https://deb.ctr-electronics.com/ctr.list" +# sudo curl -s --compressed -o /etc/apt/sources.list.d/ctr2024.list "https://deb.ctr-electronics.com/ctr2024.list" +# sudo sed -i -e 's/tools stable main/tools jetson main/' /etc/apt/sources.list.d/ctr2024.list + +sudo apt remove linux-headers-generic linux-headers-5.4.0-* linux-headers-5.4.0-*-generic +sudo apt update +sudo apt install -y dkms +#sudo apt install -y canivore-usb +cd /tmp +unzip /home/ubuntu/900RobotCode/scripts/jetson_install/canivore-usb-arm64-Ubuntu-20.04-v3.zip +sudo dpkg -i canivore-usb-kernel_1.13_arm64.deb +sudo dpkg -i canivore-usb_1.13_arm64.deb +sudo apt-mark hold canivore-usb canivore-usb-kernel + +# Re-enable if we want to use a canivore usb interface +# sudo bash -c "echo \"[Match\"] >> /etc/systemd/network/80-can.network" +# sudo bash -c "echo \"Name=can0\" >> /etc/systemd/network/80-can.network" +# sudo bash -c "echo \\"" >> /etc/systemd/network/80-can.network" +# sudo bash -c "echo \"[CAN\"] >> /etc/systemd/network/80-can.network" +# sudo bash -c "echo \"BitRate=1000K\" >> /etc/systemd/network/80-can.network" +# sudo systemctl enable systemd-networkd +# sudo systemctl restart systemd-networkd + +sudo bash -c "echo \"# Modules for CAN interface\" >> /etc/modules" +sudo bash -c "echo can >> /etc/modules" +sudo bash -c "echo can_raw >> /etc/modules" +sudo bash -c "echo can_dev >> /etc/modules" +sudo bash -c "echo gs_usb >> /etc/modules" +#sudo bash -c "echo mttcan >> /etc/modules" + +# This shouldn't be the least bit dangerous +#sudo rm /etc/modprobe.d/blacklist-mttcan.conf + +# Disable l4tbridge - https://devtalk.nvidia.com/default/topic/1042511/is-it-safe-to-remove-l4tbr0-bridge-network-on-jetson-xavier-/ +sudo systemctl disable nv-l4t-usb-device-mode.service +sudo systemctl stop nv-l4t-usb-device-mode.service + +# Set up ssh host config (add port 5801) +sudo sed "s/#Port 22/Port 22\nPort 5801/g" /etc/ssh/sshd_config > sshd_config && sudo mv sshd_config /etc/ssh + +#sudo bash -c "echo NTP=us.pool.ntp.org >> /etc/systemd/timesyncd.conf" +#sudo bash -c "echo FallbackNTP=ntp.ubuntu.com >> /etc/systemd/timesyncd.conf" +sudo cp ~/900RobotCode/scripts/jetson_install/ntp.conf /etc/ntp.conf +# On 10.9.0.9, uncommment last few lines of ntp.conf + +sudo cp ~/900RobotCode/scripts/jetson_setup/hwrtc.service /etc/systemd/system +sudo chmod 664 /etc/systemd/system/hwrtc.service +# The ntp config should read from hwrtc -> system clock if it can't +# get to the internet to read from pool time servers +sudo systemctl enable hwrtc + + +# and keys for connections to Rio +mkdir -p ~/.ssh +cd ~/.ssh +tar -xjf ~/900RobotCode/scripts/jetson_setup/jetson_dot_ssh.tar.bz2 +chmod 640 authorized_keys +cd ~ +chmod 700 .ssh + +sudo mkdir -p /root/.ssh +sudo tar -xjf /home/ubuntu/900RobotCode/scripts/jetson_setup/jetson_dot_ssh.tar.bz2 -C /root/.ssh +sudo chown root:root /root/.ssh/* +sudo chmod 640 /root/.ssh/authorized_keys +sudo chmod 700 /root/.ssh + +cd ~/900RobotCode/scripts +sudo cp ./jetson_setup/10-local.rules ./jetson_setup/99-gpio.rules ./jetson_setup/99-terabee-pico.rules ./jetson_setup/99-terabee-teensy.rules /etc/udev/rules.d/ +sudo service udev reload +sleep 2 +sudo service udev restart + +# Clean up Jetson +sudo rm -rf /home/nvidia/cudnn /home/nvidia/OpenCV /home/nvidia/libvisionworks* +# Save ~400MB +sudo apt remove --purge -y thunderbird libreoffice-* nsight-graphics-for-embeddedlinux-* +# Disable automatic updates +sudo sed -i -e 's/APT::Periodic::Update-Package-Lists "1"/APT::Periodic::Update-Package-Lists "0"/' /etc/apt/apt.conf.d/10periodic + +# Install CTRE & navX libs +mkdir -p /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/include +mkdir -p /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/lib/ctre +mkdir -p /home/ubuntu/ctre +cd /home/ubuntu/ctre +python3 /home/ubuntu/900RobotCode/scripts/jetson_install/download_maven.py https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json +python3 /home/ubuntu/900RobotCode/scripts/jetson_install/download_maven.py https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2024-latest.json +cd /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/include +find /home/ubuntu/ctre -name \*headers\*zip | grep -v debug | xargs -n 1 unzip -o +cd /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/lib/ctre +find /home/ubuntu/ctre -name \*linux\*zip | grep -v debug | xargs -n 1 unzip -o +rm -rf /home/ubuntu/ctre + +cd /home/ubuntu +wget http://www.kauailabs.com/maven2/com/kauailabs/navx/frc/navx-cpp/4.0.433/navx-cpp-4.0.433-headers.zip +mkdir -p /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/include/navx +cd /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/include/navx +unzip -o /home/ubuntu/navx-cpp-4.0.433-headers.zip +rm /home/ubuntu/navx-cpp-4.0.433-headers.zip +cd /home/ubuntu +wget http://www.kauailabs.com/maven2/com/kauailabs/navx/frc/navx-cpp/4.0.433/navx-cpp-4.0.433-linuxathena.zip +mkdir -p /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/lib/navx +cd /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/lib/navx +unzip -o /home/ubuntu/navx-cpp-4.0.433-linuxathena.zip +rm /home/ubuntu/navx-cpp-4.0.433-linuxathena.zip +cd /home/ubuntu +wget http://www.kauailabs.com/maven2/com/kauailabs/navx/frc/navx-cpp/4.0.433/navx-cpp-4.0.433-linuxathenastatic.zip +mkdir -p /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/lib/navx +cd /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/lib/navx +unzip -o /home/ubuntu/navx-cpp-4.0.433-linuxathenastatic.zip +rm /home/ubuntu/navx-cpp-4.0.433-linuxathenastatic.zip + +# And Rev sparkmax stuff +cd /home/ubuntu +mkdir sparkmax +cd sparkmax +python3 /home/ubuntu/900RobotCode/scripts/jetson_install/download_maven.py https://software-metadata.revrobotics.com/REVLib-2024.json +cd /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/include +find /home/ubuntu/sparkmax -name \*header\*zip | grep -v debug | xargs -n 1 unzip -o +mkdir -p /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/lib/rev +cd /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/lib/rev +find /home/ubuntu/sparkmax -name \*linux\*zip | grep -v debug | xargs -n 1 unzip -o +rm -rf /home/ubuntu/sparkmax + +# Install wpilib headers by copying them from the local maven dir +export WPILIBVER=2025.1.1-beta-1 +cd /home/ubuntu &&\ +wget https://frcmaven.wpi.edu/ui/api/v1/download/contentBrowsing/installer/v$WPILIBVER/Linux/WPILib_Linux-$WPILIBVER.tar.gz &&\ +mkdir -p /home/ubuntu/wpilib/2025 &&\ +cd /home/ubuntu/wpilib/2025 &&\ +tar -xzf /home/ubuntu/WPILib_Linux-$WPILIBVER.tar.gz &&\ +tar -xzf WPILib_Linux-$WPILIBVER/WPILib_Linux-$WPILIBVER-artifacts.tar.gz &&\ +rm /home/ubuntu/WPILib_Linux-$WPILIBVER.tar.gz &&\ +cd /home/ubuntu/wpilib/2025/tools &&\ +python3 ToolsUpdater.py &&\ +mkdir -p /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/lib/wpilib &&\ +cd /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/lib/wpilib &&\ +find ../../../.. -name \*athena\*zip | grep -v debug | xargs -n1 unzip -o &&\ +find . -name \*.debug -delete &&\ +mkdir -p /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/include/wpilib &&\ +cd /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/include/wpilib &&\ +find ../../../.. -name \*headers\*zip | xargs -n1 unzip -o &&\ +cd /home/ubuntu/wpilib/2025/tools &&\ +mv roborioteamnumbersetter roboRIOTeamNumberSetter.py .. &&\ +rm -rf /home/ubuntu/wpilib/2025/advantagescope /home/ubuntu/wpilib/2025/maven /home/ubuntu/wpilib/frc2024/jdk /home/ubuntu/wpilib/2025/WPILib_Linux-$WPILIBVER /home/ubuntu/wpilb2024/utility /home/ubuntu/wpilib/2025/jdk /home/ubuntu/wpilib/2025/documentation /home/ubuntu/wpilib/2025/vsCodeExtensions /home/ubuntu/wpilib/2025/vendordeps /home/ubuntu/wpilib/2025/utility /home/ubuntu/wpilib/2025/tools /home/ubuntu/wpilib/2025/frccode /home/ubuntu/wpilib/2025/installUtils /home/ubuntu/wpilib/2025/WPILIB_Linux-{$wpilibver} &&\ +mv /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/include/wpilib/google/protobuf /home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/include/wpilib/google/protobuf.bak &&\ +sed -i -e 's/ || defined(__thumb__) \\/ || defined(__thumb__) \\\n || defined(__aarch64__) \\/' /home/ubuntu/wpilib/2024/roborio/arm-frc2024-linux-gnueabi/include/wpilib/FRC_FPGA_ChipObject/fpgainterfacecapi/NiFpga.h + +# Set up prereqs for deploy script +mv ~/900RobotCode ~/900RobotCode.orig +ln -s ~/900RobotCode.orig ~/900RobotCode +mkdir -p ~/900RobotCode.prod/zebROS_ws +mkdir -p ~/900RobotCode.dev/zebROS_ws + +sudo mkdir -p /usr/local/zed/settings +sudo chmod 755 /usr/local/zed/settings +sudo cp ~/900RobotCode/scripts/jetson_install/calibration_files/*.conf /usr/local/zed/settings +sudo chmod 644 /usr/local/zed/settings/* + +cp ~/900RobotCode/.vimrc ~/900RobotCode/.gvimrc ~ +sudo cp ~/900RobotCode/kjaget.vim /usr/share/vim/vim81/colors + +git config --global user.email "progammers@team900.org" +git config --global user.name "Team900 Jetson NX" + +sudo ccache -C +sudo ccache -c +sudo rm -rf /home/ubuntu/.cache /home/ubuntu/.ccache + +sudo ln -s /usr/include/opencv4 /usr/include/opencv + +echo "source /home/ubuntu/900RobotCode/zebROS_ws/command_aliases.sh" >> /home/ubuntu/.bashrc + +# Install make 4.3 (>4.2 is required for -flto=jobserver support +cd +wget https://ftp.gnu.org/gnu/make/make-4.3.tar.gz +tar -xf make-4.3.tar.gz +mkdir make-4.3/build +cd make-4.3/build +../configure --prefix=/usr +sudo make -j`nproc --all` install +cd +sudo rm -rf make-4.3* + +# Give the ubuntu user dialout permission, which is used by the ADI IMU +sudo adduser ubuntu dialout + +git clone https://github.com/VundleVim/Vundle.vim.git /home/ubuntu/.vim/bundle/Vundle.vim +vim +PluginInstall +qall +ln -sf /home/ubuntu/.vim/bundle/vim-ros-ycm/.ycm_extra_conf.py /home/ubuntu/.vim/bundle/vim-ros-ycm/ycm_extra_conf.py +cd /home/ubuntu/.vim/bundle/YouCompleteMe +git fetch origin +git submodule update --init --recursive +python3 ./install.py --clang-completer --system-libclang --ninja + +sudo pip3 install -U setuptools==70.3.0 +sudo -H bash +export PATH=$PATH:/usr/local/cuda/bin +export CUDA_ROOT=/usr/local/cuda +pip3 install pycuda + +# Ultralytics YOLOv8 prereqs here +sudo python3 -m pip install --no-cache-dir --upgrade 'pascal_voc==0.0.7' +sudo python3 -m pip install --no-cache-dir --upgrade 'matplotlib>=3.2.2' +sudo python3 -m pip install --no-cache-dir --upgrade 'opencv-python>=4.6.0' +sudo python3 -m pip install --no-cache-dir --upgrade 'Pillow>=7.1.2' +sudo python3 -m pip install --no-cache-dir --upgrade 'PyYAML==5.4.1' +sudo python3 -m pip install --no-cache-dir --upgrade 'requests>=2.23.0' +sudo python3 -m pip install --no-cache-dir --upgrade 'scipy>=1.4.1' +sudo python3 -m pip install --no-cache-dir --upgrade 'tqdm>=4.64.0' +sudo python3 -m pip install --no-cache-dir --upgrade 'pandas>=1.1.4' +sudo python3 -m pip install --no-cache-dir --upgrade 'seaborn>=0.11.0' +sudo python3 -m pip install --no-cache-dir --upgrade psutil + +sudo python3 -m pip install --no-cache-dir --upgrade 'onnx>=1.12' +sudo python3 -m pip install --no-cache-dir --upgrade 'onnxsim>=0.4.1' +wget https://nvidia.box.com/shared/static/mvdcltm9ewdy2d5nurkiqorofz1s53ww.whl -O onnxruntime_gpu-1-15.0-cp38-cp38-linux_aarch64.whl +sudo pip3 install onnxruntime_gpu-1-15.0-cp38-cp38-linux_aarch64.whl +rm onnxruntime_gpu-1-15.0-cp38-cp38-linux_aarch64.whl + +# cpu-only version : sudo python3 -m pip install --no-cache-dir --upgrade 'onnxruntime' +# not available sudo python3 -m pip install --no-cache-dir --upgrade onnxruntime-gpu +#sudo python3 -m pip install --no-cache-dir --upgrade nvidia-pyindex +#sudo python3 -m pip install --no-cache-dir --upgrade nvidia-tensorrt + +#export PYTORCH_URL=https://nvidia.box.com/shared/static/rehpfc4dwsxuhpv4jgqv8u6rzpgb64bq.whl +#export PYTORCH_WHL=torch-2.0.0a0+ec3941ad.nv23.2-cp38-cp38-linux_aarch64.whl +export PYTORCH_URL=https://nvidia.box.com/shared/static/i8pukc49h3lhak4kkn67tg9j4goqm0m7.whl +export PYTORCH_WHL=torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl + +sudo apt-get install -y libopenblas-base libopenmpi-dev +wget --quiet --show-progress --progress=bar:force:noscroll --no-check-certificate ${PYTORCH_URL} -O ${PYTORCH_WHL} +sudo pip3 install --no-cache-dir --verbose ${PYTORCH_WHL} +rm ${PYTORCH_WHL} + + +export TORCHVISION_VERSION=0.15 +export TORCH_CUDA_ARCH_LIST="7.2;8.7" +sudo apt install -y libjpeg-dev libpng-dev zlib1g-dev +git clone --branch release/${TORCHVISION_VERSION} --recursive --depth=1 https://github.com/pytorch/vision torchvision +cd torchvision +git checkout release/${TORCHVISION_VERSION} +sudo python3 setup.py install +cd .. +sudo rm -rf torchvision + +sudo python3 -m pip install --no-cache-dir --upgrade 'pytorch_pfn_extras' +sudo python3 -m pip install --no-cache-dir --upgrade ultralytics +cd /home/ubuntu +git clone https://github.com/triple-Mu/YOLOv8-TensorRT.git +# End of ultralytics YOLOv8 deps + +echo "export PATH=\$PATH:/home/ubuntu/.local/bin:/home/ubuntu/tensorflow_workspace/tools:/usr/local/cuda/bin" >> /home/ubuntu/.bashrc + +# Set up Gold linker - speed up libPCL links +# Do this after building protoc, since that fails with ld.gold +sudo update-alternatives --install "/usr/bin/ld" "ld" "/usr/bin/ld.gold" 20 +sudo update-alternatives --install "/usr/bin/ld" "ld" "/usr/bin/ld.bfd" 10 +sudo update-alternatives --auto ld + +sudo ccache -C +sudo ccache -c +sudo rm -rf /home/ubuntu/.cache /home/ubuntu/.ccache + +# This is handled by the ROS*.sh scripts +#echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/home/ubuntu/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/lib/rev/linux/aarm64/shared:/usr/local/lib" >> /home/ubuntu/.bashrc + +# Install pyserial (for 2023 intake reader) +sudo pip3 install pyserial +sudo pip3 install cupy-cuda11x + +# TODO - figure out a real fix for the build error in newer commits +cd /home/ubuntu &&\ + git clone https://github.com/abseil/abseil-cpp.git &&\ + cd abseil-cpp &&\ + git checkout a3f7e9866c67ca090995aa638276b8fd8938c6f3 &&\ + mkdir build &&\ + cd build &&\ + cmake -DABSL_BUILD_TESTING=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DABSL_USE_GOOGLETEST_HEAD=ON -DCMAKE_CXX_STANDARD=17 -GNinja .. &&\ + ninja &&\ + sudo ninja install &&\ + cd /home/ubuntu && \ + rm -rf abseil-cpp + +# Jetvariety camera stuff +sudo pip3 install v4l2-fix jetson-stats + +cd ~ +wget https://github.com/ArduCAM/MIPI_Camera/releases/download/v0.0.3/install_full.sh +chmod +x install_full.sh +./install_full.sh -m arducam diff --git a/scripts/jetson_install/tensorrt.patch b/scripts/jetson_install/tensorrt.patch deleted file mode 100644 index 87a826cdf..000000000 --- a/scripts/jetson_install/tensorrt.patch +++ /dev/null @@ -1,89 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 358b6f3..436e84a 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -159,6 +159,7 @@ else() - if (IS_ARM) - # Xavier (SM72) only supported for aarch64. - list(APPEND GPU_ARCHS 72) -+ list(APPEND GPU_ARCHS 87) - endif() - - if (CUDA_VERSION VERSION_GREATER_EQUAL 11.0) -diff --git a/plugin/common/kernels/decodeBBoxes.cu b/plugin/common/kernels/decodeBBoxes.cu -index f688cef..d59cb57 100644 ---- a/plugin/common/kernels/decodeBBoxes.cu -+++ b/plugin/common/kernels/decodeBBoxes.cu -@@ -77,6 +77,25 @@ inline __device__ float div_fb(const float & a, const float & b) { - return a / b; - } - -+ -+template -+static __device__ T_BBOX saturate(T_BBOX v) -+{ -+ return max(min(v, T_BBOX(1)), T_BBOX(0)); -+} -+ -+template <> -+__device__ __half saturate(__half v) -+{ -+#if __CUDA_ARCH__ >= 800 -+ return __hmax(__hmin(v, __half(1)), __half(0)); -+#elif __CUDA_ARCH__ >= 530 -+ return __hge(v, __half(1)) ? __half(1) : (__hle(v, __half(0)) ? __half(0) : v); -+#else -+ return max(min(v, float(1)), float(0)); -+#endif -+} -+ - template - __launch_bounds__(nthds_per_cta) - __global__ void decodeBBoxes_kernel( -diff --git a/plugin/fcPlugin/fcPlugin.cpp b/plugin/fcPlugin/fcPlugin.cpp -index 66b604c..5d41dad 100644 ---- a/plugin/fcPlugin/fcPlugin.cpp -+++ b/plugin/fcPlugin/fcPlugin.cpp -@@ -168,9 +168,11 @@ void LtGemmSearch(cublasLtHandle_t ltHandle, cublasOperation_t transa, cublasOpe - PLUGIN_CUBLASASSERT(cublasLtMatmulPreferenceSetAttribute( - preference, CUBLASLT_MATMUL_PREF_MAX_WORKSPACE_BYTES, &workSpaceSize, sizeof(workSpaceSize))); - -+#if 0 - const int mathMode = Ctype == CUDA_R_16F ? 1 : 0; - PLUGIN_CUBLASASSERT(cublasLtMatmulPreferenceSetAttribute( - preference, CUBLASLT_MATMUL_PREF_MATH_MODE_MASK, &mathMode, sizeof(mathMode))); -+#endif - // Create operation descriptor; see cublasLtMatmulDescAttributes_t for details - // about defaults; here we just need to set the transforms for A and B - #if CUBLAS_VER_MAJOR < 11 -@@ -215,6 +217,7 @@ void LtGemmSearch(cublasLtHandle_t ltHandle, cublasOperation_t transa, cublasOpe - continue; - } - -+#if 0 - int mathMode = -1; - PLUGIN_CUBLASASSERT(cublasLtMatmulAlgoCapGetAttribute( - &algo, CUBLASLT_ALGO_CAP_MATHMODE_IMPL, &mathMode, sizeof(mathMode), nullptr)); -@@ -224,6 +227,7 @@ void LtGemmSearch(cublasLtHandle_t ltHandle, cublasOperation_t transa, cublasOpe - // if mathMode is 1, cublasLt chooses automatically to run in mixed precision for certain sizes - continue; - } -+#endif - - // Query the tiles enums supported by that algo - PLUGIN_CUBLASASSERT( -diff --git a/plugin/fcPlugin/fcPlugin.h b/plugin/fcPlugin/fcPlugin.h -index 0129e8d..4b75cd9 100644 ---- a/plugin/fcPlugin/fcPlugin.h -+++ b/plugin/fcPlugin/fcPlugin.h -@@ -371,8 +371,10 @@ struct AlgoProps - matmulAlgo, CUBLASLT_ALGO_CONFIG_CTA_SWIZZLING, &swizzle, sizeof(swizzle), nullptr)); - PLUGIN_CUBLASASSERT(cublasLtMatmulAlgoConfigGetAttribute( - matmulAlgo, CUBLASLT_ALGO_CONFIG_CUSTOM_OPTION, &customOption, sizeof(customOption), nullptr)); -+#if 0 - PLUGIN_CUBLASASSERT(cublasLtMatmulAlgoCapGetAttribute( - matmulAlgo, CUBLASLT_ALGO_CAP_MATHMODE_IMPL, &mathMode, sizeof(mathMode), nullptr)); -+#endif - } - }; - diff --git a/scripts/update_rio_wpilib.sh b/scripts/update_rio_wpilib.sh new file mode 100755 index 000000000..d98d9920f --- /dev/null +++ b/scripts/update_rio_wpilib.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Update a jetson with the header files and libraries needed to build +# code for the robot +# Run me with IP address of the Jetson as argument +# wpilib/2025 has to be installed on local machine - run from docker +# env to make sure that the local build env is correct one +# to push to the Jetson + +which docker | grep -q docker +if [ $? -ne 1 ] ; then + echo "This script must be run from inside a docker container" + return +fi + +ssh -p 22 admin@$1 mkdir wpilib +cd ~/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/lib/wpilib/linux/athena/shared +scp -P 22 *.so admin@$1:wpilib +cd ~/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/lib/ctre/linux/athena/shared +scp -P 22 *.so admin@$1:wpilib +cd ~/wpilib/2025/roborio/arm-frc2024-linux-gnueabi/lib/rev/linux/athena/shared +scp -P 22 *.so admin@$1:wpilib \ No newline at end of file diff --git a/zebROS_ws/.gitignore b/zebROS_ws/.gitignore index d31492f6e..6854473e1 100644 --- a/zebROS_ws/.gitignore +++ b/zebROS_ws/.gitignore @@ -18,3 +18,4 @@ callgrind.out.* allwpilib/ntcore/generated zebROS_ws/src/.vscode/settings.json src/auto_node/scripts/path_info.txt +.cache diff --git a/zebROS_ws/create_ros_packages.sh b/zebROS_ws/create_ros_packages.sh index edc7adeb4..b429ce538 100755 --- a/zebROS_ws/create_ros_packages.sh +++ b/zebROS_ws/create_ros_packages.sh @@ -1,3 +1,3 @@ -rosinstall_generator --rosdistro noetic --wet-only control_toolbox forward_command_controller imu_sensor_controller joint_state_controller joint_trajectory_controller position_controllers velocity_controllers teraranger teraranger_array teraranger_array_converter teraranger_description > rosinstall.txt +rosinstall_generator --rosdistro noetic --wet-only forward_command_controller imu_sensor_controller joint_state_controller joint_trajectory_controller position_controllers velocity_controllers teraranger teraranger_array teraranger_array_converter teraranger_description > rosinstall.txt wstool merge -t src rosinstall.txt rm rosinstall.txt diff --git a/zebROS_ws/cross_build.sh b/zebROS_ws/cross_build.sh index 437c8fa8c..d24b000ce 100755 --- a/zebROS_ws/cross_build.sh +++ b/zebROS_ws/cross_build.sh @@ -22,7 +22,7 @@ catkin config --profile cross -x _isolated --install --skiplist \ adi_pico_driver \ ar_track_alvar \ apriltag_launch \ - apriltag_ros \ + apriltag_ros \ base_trajectory \ compressed_image_transport \ compressed_depth_image_transport \ @@ -85,7 +85,6 @@ catkin config --profile cross -x _isolated --install --skiplist \ tagslam_test \ tagslam_launch \ template_controller \ - teraranger_array \ teraranger_array_converter \ tf_object_detection \ theora_image_transport \ @@ -99,4 +98,4 @@ catkin config --profile cross -x _isolated --install --skiplist \ wpilib_swerve_odom \ drive_to_object \ norfair_ros -catkin build --profile cross -DCMAKE_TOOLCHAIN_FILE=`pwd`/rostoolchain.cmake -DCMAKE_CXX_STANDARD=17 -DCATKIN_ENABLE_TESTING=OFF -DSETUPTOOLS_DEB_LAYOUT=OFF -DCMAKE_CXX_FLAGS="-DBOOST_BIND_GLOBAL_PLACEHOLDERS -Wno-psabi -Wno-deprecated-copy -DNON_POLLING" "$@" +catkin build --profile cross -DCMAKE_TOOLCHAIN_FILE=`pwd`/rostoolchain.cmake -DCMAKE_CXX_STANDARD=20 -DCATKIN_ENABLE_TESTING=OFF -DSETUPTOOLS_DEB_LAYOUT=OFF -DCMAKE_CXX_FLAGS="-DBOOST_BIND_GLOBAL_PLACEHOLDERS -Wno-psabi -Wno-deprecated-copy -DNON_POLLING" "$@" diff --git a/zebROS_ws/native_build.sh b/zebROS_ws/native_build.sh index f1feecb91..1d0ac539c 100755 --- a/zebROS_ws/native_build.sh +++ b/zebROS_ws/native_build.sh @@ -96,7 +96,6 @@ catkin config --skiplist \ rosserial_windows \ rosserial_xbee \ spinnaker_camera_driver \ - teraranger_array \ teraranger_array_converter \ turing_smart_screen \ turret_2023 \ @@ -110,7 +109,7 @@ export PYTHONPATH=$PYTHONPATH:/opt/ros/noetic/lib/python3.10/site-packages export PYTHONPATH=$PYTHONPATH:/opt/ros/noetic/local/lib/python3.10/dist-packages export PYTHONPATH=$PYTHONPATH:/opt/ros/noetic/local/lib/python3.10/site-packages -catkin build -DCATKIN_ENABLE_TESTING=OFF -DBUILD_WITH_OPENMP=ON -DCMAKE_CXX_STANDARD=17 -DSETUPTOOLS_DEB_LAYOUT=OFF -DCMAKE_CXX_FLAGS="-DBOOST_BIND_GLOBAL_PLACEHOLDERS -Wno-psabi -DNON_POLLING" $EXTRA_CMD_LINE $EXPLICIT_PACKAGE_LIST "$@" +catkin build -DCATKIN_ENABLE_TESTING=OFF -DBUILD_WITH_OPENMP=ON -DCMAKE_CXX_STANDARD=20 -DSETUPTOOLS_DEB_LAYOUT=OFF -DCMAKE_CXX_FLAGS="-DBOOST_BIND_GLOBAL_PLACEHOLDERS -Wno-psabi -DNON_POLLING" $EXTRA_CMD_LINE $EXPLICIT_PACKAGE_LIST "$@" if [ $? -ne 0 ] ; then echo FAIL > .native_build.status diff --git a/zebROS_ws/rosinstallgenerator.sh b/zebROS_ws/rosinstallgenerator.sh deleted file mode 100755 index 050910e17..000000000 --- a/zebROS_ws/rosinstallgenerator.sh +++ /dev/null @@ -1,3 +0,0 @@ - rosinstall_generator --rosdistro melodic --wet-only control_toolbox rospy_message_converter forward_command_controller imu_sensor_controller joint_state_controller joint_trajectory_controller position_controllers velocity_controllers teraranger teraranger_array teraranger_array_converter teraranger_description > rosinstall.txt -wstool merge -t src rosinstall.txt -rm rosinstall.txt diff --git a/zebROS_ws/src/.clangd b/zebROS_ws/src/.clangd new file mode 100644 index 000000000..d7a06ed2b --- /dev/null +++ b/zebROS_ws/src/.clangd @@ -0,0 +1,2 @@ +CompileFlags: + Remove: [ -ftrack-macro-expansion=0, -fno-var-tracking-assignments ] \ No newline at end of file diff --git a/zebROS_ws/src/.rosinstall b/zebROS_ws/src/.rosinstall index 475825e0d..ab1f7348a 100644 --- a/zebROS_ws/src/.rosinstall +++ b/zebROS_ws/src/.rosinstall @@ -1,11 +1,4 @@ # THIS IS AN AUTOGENERATED FILE, LAST GENERATED USING wstool ON 2023-12-20 -- git: - local-name: actionlib - uri: https://github.com/FRC900/actionlib.git -- git: - local-name: control_toolbox - uri: https://github.com/ros-gbp/control_toolbox-release.git - version: release/noetic/control_toolbox/1.19.0-1 - git: local-name: cpu_monitor uri: https://github.com/FRC900/cpu_monitor @@ -17,10 +10,6 @@ local-name: pid uri: https://github.com/FRC900/pid.git version: velocity_feed_forward -- git: - local-name: realtime_tools - uri: https://github.com/FRC900/realtime_tools.git - version: fix_non_realtime - git: local-name: ros_controllers uri: https://github.com/FRC900/ros_controllers.git @@ -46,15 +35,16 @@ version: master - git: local-name: teraranger - uri: https://github.com/Terabee/teraranger-release.git - version: release/melodic/teraranger/2.1.0-1 + uri: https://github.com/FRC900/teraranger.git + version: master +- git: + local-name: teraranger_array + uri: https://github.com/FRC900/teraranger_array.git + version: master - git: local-name: teraranger_description uri: https://github.com/Terabee/teraranger_description-release.git version: release/kinetic/teraranger_description/1.1.0-0 -- git: - local-name: turing_smart_screen - uri: https://github.com/FRC900/turing-smart-screen-ros.git - git: local-name: zed-ros-wrapper uri: https://github.com/FRC900/zed-ros-wrapper.git @@ -64,7 +54,3 @@ - git: local-name: camera_info_manager_py uri: https://github.com/FRC900/camera_info_manager_py -- git: - local-name: cv_camera - uri: https://github.com/FRC900/cv_camera - version: mono16 diff --git a/zebROS_ws/src/behaviors/package.xml b/zebROS_ws/src/behaviors/package.xml index 0539b33bc..4fdaa3522 100644 --- a/zebROS_ws/src/behaviors/package.xml +++ b/zebROS_ws/src/behaviors/package.xml @@ -80,6 +80,7 @@ base_trajectory_msgs controllers_2025_msgs talon_controller_msgs + teleop_orientation_driver diff --git a/zebROS_ws/src/cmake_modules/CMakeOpt.cmake b/zebROS_ws/src/cmake_modules/CMakeOpt.cmake index 6e9b59170..5778e79ed 100644 --- a/zebROS_ws/src/cmake_modules/CMakeOpt.cmake +++ b/zebROS_ws/src/cmake_modules/CMakeOpt.cmake @@ -9,7 +9,7 @@ if(NOT CMAKE_BUILD_TYPE) endif() if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 17) + set(CMAKE_CXX_STANDARD 20) endif() execute_process(COMMAND pgrep -f rosetta OUTPUT_VARIABLE OUT RESULT_VARIABLE NOT_APPLE_SILICON) diff --git a/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/absolute_sensor_range.h b/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/absolute_sensor_range.h deleted file mode 100644 index b746ca173..000000000 --- a/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/absolute_sensor_range.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -namespace hardware_interface -{ -enum AbsoluteSensorRange -{ - /** - * Express the absolute position as an unsigned value. - * E.g. [0,+1) rotations or [0,360) deg. - */ - Unsigned_0_to_360, - /** - * Express the absolute position as an signed value. - * E.g. [-0.5,+0.5) rotations or [-180,+180) deg. - */ - Signed_PlusMinus180, -}; -} diff --git a/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/sensor_initialization_strategy.h b/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/sensor_initialization_strategy.h deleted file mode 100644 index ad7461368..000000000 --- a/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/sensor_initialization_strategy.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -namespace hardware_interface -{ -enum SensorInitializationStrategy -{ - /** - * On boot up, set position to zero. - */ - BootToZero, - /** - * On boot up, sync to the Absolute Position signal. The Absolute position signal will be signed according to the selected Absolute Sensor Range. - */ - BootToAbsolutePosition, -}; -} diff --git a/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/talon_command_interface.h b/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/talon_command_interface.h index 1ec753e03..f8afe68c7 100644 --- a/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/talon_command_interface.h +++ b/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/talon_command_interface.h @@ -290,20 +290,6 @@ class TalonHWCommand bool &supply_current_limit_enable); void resetSupplyCurrentLimit(void); - void setStatorCurrentLimit(double stator_current_limit); - double getStatorCurrentLimit(void) const; - void setStatorCurrentTriggerThresholdCurrent(double stator_current_trigger_threshold_current); - double getStatorCurrentTriggerThresholdCurrent(void) const; - void setStatorCurrentTriggerThresholdTime(double stator_current_trigger_threshold_time); - double getStatorCurrentTriggerThresholdTime(void) const; - void setStatorCurrentLimitEnable(bool stator_current_limit_enable); - bool getStatorCurrentLimitEnable(void) const; - bool statorCurrentLimitChanged(double &stator_current_limit, - double &stator_current_trigger_threshold_current, - double &stator_time_trigger_threshold_time, - bool &stator_current_limit_enable); - void resetStatorCurrentLimit(void); - void setMotionCruiseVelocity(double velocity); double getMotionCruiseVelocity(void) const; void setMotionAcceleration(double acceleration); @@ -367,24 +353,6 @@ class TalonHWCommand void setConversionFactor(double conversion_factor); double getConversionFactor(void) const; - //TalonFX only - void setMotorCommutation(hardware_interface::MotorCommutation motor_commutation); - hardware_interface::MotorCommutation getMotorCommutation(void) const; - bool motorCommutationChanged(hardware_interface::MotorCommutation &motor_commutation); - void resetMotorCommutation(void); - - //TalonFX only - void setAbsoluteSensorRange(hardware_interface::AbsoluteSensorRange absolute_sensor_range); - hardware_interface::AbsoluteSensorRange getAbsoluteSensorRange(void) const; - bool absoluteSensorRangeChanged(hardware_interface::AbsoluteSensorRange &absolute_sensor_range); - void resetAbsoluteSensorRange(void); - - //TalonFX only - void setSensorInitializationStrategy(hardware_interface::SensorInitializationStrategy sensor_initialization_strategy); - hardware_interface::SensorInitializationStrategy getSensorInitializationStrategy(void) const; - bool sensorInitializationStrategyChanged(hardware_interface::SensorInitializationStrategy &sensor_initialization_strategy); - void resetSensorInitializationStrategy(void); - void setEnableReadThread(bool enable_read_thread); bool getEnableReadThread(void) const; @@ -531,16 +499,6 @@ class TalonHWCommand bool clear_position_on_limit_r_{false}; bool clear_position_on_limit_r_changed_{false}; - // TalonFX / Falcon500 specific - hardware_interface::MotorCommutation motor_commutation_; - bool motor_commutation_changed_; - - hardware_interface::AbsoluteSensorRange absolute_sensor_range_; - bool absolute_sensor_range_changed_; - - hardware_interface::SensorInitializationStrategy sensor_initialization_strategy_; - bool sensor_initialization_strategy_changed_; - bool enable_read_thread_; bool enable_read_thread_changed_; diff --git a/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/talon_state_interface.h b/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/talon_state_interface.h index bf2870160..643302791 100644 --- a/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/talon_state_interface.h +++ b/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/talon_state_interface.h @@ -5,8 +5,6 @@ #include #include -#include "ctre_interfaces/absolute_sensor_range.h" -#include "ctre_interfaces/sensor_initialization_strategy.h" #include "ctre_interfaces/talon_state_types.h" namespace hardware_interface @@ -162,15 +160,6 @@ class TalonHWState void setSupplyCurrentLimitEnable(bool supply_current_limit_enable); bool getSupplyCurrentLimitEnable(void) const; - void setStatorCurrentLimit(double stator_current_limit); - double getStatorCurrentLimit(void) const; - void setStatorCurrentTriggerThresholdCurrent(double stator_current_trigger_threshold_current); - double getStatorCurrentTriggerThresholdCurrent(void) const; - void setStatorCurrentTriggerThresholdTime(double stator_current_trigger_threshold_time); - double getStatorCurrentTriggerThresholdTime(void) const; - void setStatorCurrentLimitEnable(bool stator_current_limit_enable); - bool getStatorCurrentLimitEnable(void) const; - void setMotionCruiseVelocity(double velocity); double getMotionCruiseVelocity(void) const; void setMotionAcceleration(double acceleration); @@ -241,18 +230,6 @@ class TalonHWState void setClearPositionOnLimitR(bool clear_position_on_limit_r); bool getClearPositionOnLimitR(void) const; - //TalonFX only - void setMotorCommutation(hardware_interface::MotorCommutation motor_commutation); - hardware_interface::MotorCommutation getMotorCommutation(void) const; - - //TalonFX only - void setAbsoluteSensorRange(hardware_interface::AbsoluteSensorRange absolute_sensor_range); - hardware_interface::AbsoluteSensorRange getAbsoluteSensorRange(void) const; - - //TalonFX only - void setSensorInitializationStrategy(hardware_interface::SensorInitializationStrategy sensor_initialization_strategy); - hardware_interface::SensorInitializationStrategy getSensorInitializationStrategy(void) const; - void setEnableReadThread(bool enable_read_thread); void setFirmwareVersion(int firmware_version); int getFirmwareVersion(void) const; @@ -356,17 +333,12 @@ class TalonHWState int current_limit_continuous_amps_; bool current_limit_enable_; - // TalonFX / Falcon500 only + // TalonSRX cuurent limiting double supply_current_limit_; double supply_current_trigger_threshold_current_; double supply_current_trigger_threshold_time_; bool supply_current_limit_enable_; - double stator_current_limit_; - double stator_current_trigger_threshold_current_; - double stator_current_trigger_threshold_time_; - bool stator_current_limit_enable_; - // Talon expects these in integral sensorUnitsPer100ms, // but at this level we're still dealing with // radians/sec (or /sec^2 for acceleration) @@ -392,11 +364,6 @@ class TalonHWState bool clear_position_on_limit_f_{false}; bool clear_position_on_limit_r_{false}; - // TalonFX / Falcon500 specific - hardware_interface::MotorCommutation motor_commutation_; - hardware_interface::AbsoluteSensorRange absolute_sensor_range_; - hardware_interface::SensorInitializationStrategy sensor_initialization_strategy_; - bool enable_read_thread_; int firmware_version_; diff --git a/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/talon_state_types.h b/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/talon_state_types.h index 339cacafe..297d9b971 100644 --- a/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/talon_state_types.h +++ b/zebROS_ws/src/ctre_interfaces/include/ctre_interfaces/talon_state_types.h @@ -49,7 +49,6 @@ enum FeedbackDevice FeedbackDevice_Uninitialized, FeedbackDevice_QuadEncoder, FeedbackDevice_CTRE_MagEncoder_Relative = FeedbackDevice_QuadEncoder, - FeedbackDevice_IntegratedSensor, FeedbackDevice_Analog, FeedbackDevice_Tachometer, FeedbackDevice_PulseWidthEncodedPosition, @@ -199,38 +198,21 @@ enum SetValueMotionProfile Disable = 0, Enable = 1, Hold = 2, }; -enum class MotorCommutation { - Trapezoidal //!< Trapezoidal Commutation -}; - struct MotionProfileStatus { - int topBufferRem; - int topBufferCnt; - int btmBufferCnt; - bool hasUnderrun; - bool isUnderrun; - bool activePointValid; - bool isLast; - int profileSlotSelect0; - int profileSlotSelect1; - SetValueMotionProfile outputEnable; - int timeDurMs; - - MotionProfileStatus(void): - topBufferRem(0), - topBufferCnt(0), - btmBufferCnt(0), - hasUnderrun(false), - isUnderrun(false), - activePointValid(false), - isLast(false), - profileSlotSelect0(0), - profileSlotSelect1(0), - outputEnable(Disable), - timeDurMs(0) - { - } + size_t topBufferRem{0}; + size_t topBufferCnt{0}; + int btmBufferCnt{0}; + bool hasUnderrun{false}; + bool isUnderrun{false}; + bool activePointValid{false}; + bool isLast{false}; + int profileSlotSelect0{0}; + int profileSlotSelect1{0}; + SetValueMotionProfile outputEnable{Disable}; + int timeDurMs{0}; + + explicit MotionProfileStatus(void) = default; }; diff --git a/zebROS_ws/src/ctre_interfaces/src/talon_command_interface.cpp b/zebROS_ws/src/ctre_interfaces/src/talon_command_interface.cpp index c7d259aea..f6402821a 100644 --- a/zebROS_ws/src/ctre_interfaces/src/talon_command_interface.cpp +++ b/zebROS_ws/src/ctre_interfaces/src/talon_command_interface.cpp @@ -90,19 +90,13 @@ TalonHWCommand::TalonHWCommand(void) : current_limit_enable_(false), current_limit_changed_(true), - // current limiting - TalonFX / Falcon500 + // current limiting - TalonSRX supply_current_limit_(0), supply_current_trigger_threshold_current_(0), supply_current_trigger_threshold_time_(0), supply_current_limit_enable_(false), supply_current_limit_changed_(true), - stator_current_limit_(0), - stator_current_trigger_threshold_current_(0), - stator_current_trigger_threshold_time_(0), - stator_current_limit_enable_(false), - stator_current_limit_changed_(true), - motion_cruise_velocity_(0), motion_acceleration_(0), motion_s_curve_strength_(0), @@ -129,15 +123,6 @@ TalonHWCommand::TalonHWCommand(void) : conversion_factor_(1.0), - motor_commutation_(hardware_interface::MotorCommutation::Trapezoidal), - motor_commutation_changed_(true), - - absolute_sensor_range_(hardware_interface::Unsigned_0_to_360), - absolute_sensor_range_changed_(true), - - sensor_initialization_strategy_(hardware_interface::BootToZero), - sensor_initialization_strategy_changed_(true), - enable_read_thread_(true), enable_read_thread_changed_(false), mutex_(std::make_shared()) @@ -1484,73 +1469,6 @@ void TalonHWCommand::resetSupplyCurrentLimit(void) supply_current_limit_changed_ = true; } -void TalonHWCommand::setStatorCurrentLimit(double stator_current_limit) -{ - if (stator_current_limit_ != stator_current_limit) - { - stator_current_limit_ = stator_current_limit; - stator_current_limit_changed_ = true; - } -} -double TalonHWCommand::getStatorCurrentLimit(void) const -{ - return stator_current_limit_; -} -void TalonHWCommand::setStatorCurrentTriggerThresholdCurrent(double stator_current_trigger_threshold_current) -{ - if (stator_current_trigger_threshold_current_ != stator_current_trigger_threshold_current) - { - stator_current_trigger_threshold_current_ = stator_current_trigger_threshold_current; - stator_current_limit_changed_ = true; - } -} -double TalonHWCommand::getStatorCurrentTriggerThresholdCurrent(void) const -{ - return stator_current_trigger_threshold_current_; -} -void TalonHWCommand::setStatorCurrentTriggerThresholdTime(double stator_current_trigger_threshold_time) -{ - if (stator_current_trigger_threshold_time_ != stator_current_trigger_threshold_time) - { - stator_current_trigger_threshold_time_ = stator_current_trigger_threshold_time; - stator_current_limit_changed_ = true; - } -} -double TalonHWCommand::getStatorCurrentTriggerThresholdTime(void) const -{ - return stator_current_trigger_threshold_time_; -} -void TalonHWCommand::setStatorCurrentLimitEnable(bool stator_current_limit_enable) -{ - if (stator_current_limit_enable_ != stator_current_limit_enable) - { - stator_current_limit_enable_ = stator_current_limit_enable; - stator_current_limit_changed_ = true; - } -} -bool TalonHWCommand::getStatorCurrentLimitEnable(void) const -{ - return stator_current_limit_enable_; -} - -bool TalonHWCommand::statorCurrentLimitChanged(double &stator_current_limit, - double &stator_current_trigger_threshold_current, - double &stator_current_trigger_threshold_time, - bool &stator_current_limit_enable) -{ - stator_current_limit = stator_current_limit_; - stator_current_trigger_threshold_current = stator_current_trigger_threshold_current_; - stator_current_trigger_threshold_time = stator_current_trigger_threshold_time_; - stator_current_limit_enable = stator_current_limit_enable_; - const bool ret = stator_current_limit_changed_; - stator_current_limit_changed_ = false; - return ret; -} -void TalonHWCommand::resetStatorCurrentLimit(void) -{ - stator_current_limit_changed_ = true; -} - void TalonHWCommand::setMotionCruiseVelocity(double velocity) { if (fabs(velocity - motion_cruise_velocity_) > double_value_epsilon) @@ -1858,81 +1776,6 @@ double TalonHWCommand::getConversionFactor(void) const return conversion_factor_; } -//TalonFX only -void TalonHWCommand::setMotorCommutation(hardware_interface::MotorCommutation motor_commutation) -{ - if (motor_commutation_ != motor_commutation) - { - motor_commutation_ = motor_commutation; - motor_commutation_changed_ = true; - } -} -hardware_interface::MotorCommutation TalonHWCommand::getMotorCommutation(void) const -{ - return motor_commutation_; -} -bool TalonHWCommand::motorCommutationChanged(hardware_interface::MotorCommutation &motor_commutation) -{ - motor_commutation = motor_commutation_; - const bool ret = motor_commutation_changed_; - motor_commutation_changed_ = false; - return ret; -} -void TalonHWCommand::resetMotorCommutation(void) -{ - motor_commutation_changed_ = true; -} - -//TalonFX only -void TalonHWCommand::setAbsoluteSensorRange(hardware_interface::AbsoluteSensorRange absolute_sensor_range) -{ - if (absolute_sensor_range_ != absolute_sensor_range) - { - absolute_sensor_range_ = absolute_sensor_range; - absolute_sensor_range_changed_ = true; - } -} -hardware_interface::AbsoluteSensorRange TalonHWCommand::getAbsoluteSensorRange(void) const -{ - return absolute_sensor_range_; -} -bool TalonHWCommand::absoluteSensorRangeChanged(hardware_interface::AbsoluteSensorRange &absolute_sensor_range) -{ - absolute_sensor_range = absolute_sensor_range_; - const bool ret = absolute_sensor_range_changed_; - absolute_sensor_range_changed_ = false; - return ret; -} -void TalonHWCommand::resetAbsoluteSensorRange(void) -{ - absolute_sensor_range_changed_ = true; -} - -//TalonFX only -void TalonHWCommand::setSensorInitializationStrategy(hardware_interface::SensorInitializationStrategy sensor_initialization_strategy) -{ - if (sensor_initialization_strategy_ != sensor_initialization_strategy) - { - sensor_initialization_strategy_ = sensor_initialization_strategy; - sensor_initialization_strategy_changed_ = true; - } -} -hardware_interface::SensorInitializationStrategy TalonHWCommand::getSensorInitializationStrategy(void) const -{ - return sensor_initialization_strategy_; -} -bool TalonHWCommand::sensorInitializationStrategyChanged(hardware_interface::SensorInitializationStrategy &sensor_initialization_strategy) -{ - sensor_initialization_strategy = sensor_initialization_strategy_; - const bool ret = sensor_initialization_strategy_changed_; - sensor_initialization_strategy_changed_ = false; - return ret; -} -void TalonHWCommand::resetSensorInitializationStrategy(void) -{ - sensor_initialization_strategy_changed_ = true; -} - void TalonHWCommand::setEnableReadThread(bool enable_read_thread) { enable_read_thread_ = enable_read_thread; diff --git a/zebROS_ws/src/ctre_interfaces/src/talon_state_interface.cpp b/zebROS_ws/src/ctre_interfaces/src/talon_state_interface.cpp index 0231eab92..f211430e6 100644 --- a/zebROS_ws/src/ctre_interfaces/src/talon_state_interface.cpp +++ b/zebROS_ws/src/ctre_interfaces/src/talon_state_interface.cpp @@ -103,11 +103,6 @@ TalonHWState::TalonHWState(int can_id) : supply_current_trigger_threshold_time_(0), supply_current_limit_enable_(false), - stator_current_limit_(0), - stator_current_trigger_threshold_current_(0), - stator_current_trigger_threshold_time_(0), - stator_current_limit_enable_(false), - motion_cruise_velocity_(0), motion_acceleration_(0), motion_s_curve_strength_(0), @@ -123,10 +118,6 @@ TalonHWState::TalonHWState(int can_id) : conversion_factor_(1.0), - motor_commutation_(hardware_interface::MotorCommutation::Trapezoidal), - absolute_sensor_range_(hardware_interface::Unsigned_0_to_360), - sensor_initialization_strategy_(hardware_interface::BootToZero), - // control of read thread enable_read_thread_(true), @@ -761,40 +752,6 @@ bool TalonHWState::getSupplyCurrentLimitEnable(void) const return supply_current_limit_enable_; } -// Current limits - TalonFX / Falcon500 -void TalonHWState::setStatorCurrentLimit(double stator_current_limit) -{ - stator_current_limit_ = stator_current_limit; -} -double TalonHWState::getStatorCurrentLimit(void) const -{ - return stator_current_limit_; -} -void TalonHWState::setStatorCurrentTriggerThresholdCurrent(double stator_current_trigger_threshold_current) -{ - stator_current_trigger_threshold_current_ = stator_current_trigger_threshold_current; -} -double TalonHWState::getStatorCurrentTriggerThresholdCurrent(void) const -{ - return stator_current_trigger_threshold_current_; -} -void TalonHWState::setStatorCurrentTriggerThresholdTime(double stator_current_trigger_threshold_time) -{ - stator_current_trigger_threshold_time_ = stator_current_trigger_threshold_time; -} -double TalonHWState::getStatorCurrentTriggerThresholdTime(void) const -{ - return stator_current_trigger_threshold_time_; -} -void TalonHWState::setStatorCurrentLimitEnable(bool stator_current_limit_enable) -{ - stator_current_limit_enable_ = stator_current_limit_enable; -} -bool TalonHWState::getStatorCurrentLimitEnable(void) const -{ - return stator_current_limit_enable_; -} - void TalonHWState::setMotionCruiseVelocity(double velocity) { @@ -1176,36 +1133,6 @@ bool TalonHWState::getClearPositionOnLimitR(void) const return clear_position_on_limit_r_; } -//TalonFX only -void TalonHWState::setMotorCommutation(hardware_interface::MotorCommutation motor_commutation) -{ - motor_commutation_ = motor_commutation; -} -hardware_interface::MotorCommutation TalonHWState::getMotorCommutation(void) const -{ - return motor_commutation_; -} - -//TalonFX only -void TalonHWState::setAbsoluteSensorRange(hardware_interface::AbsoluteSensorRange absolute_sensor_range) -{ - absolute_sensor_range_ = absolute_sensor_range; -} -hardware_interface::AbsoluteSensorRange TalonHWState::getAbsoluteSensorRange(void) const -{ - return absolute_sensor_range_; -} - -//TalonFX only -void TalonHWState::setSensorInitializationStrategy(hardware_interface::SensorInitializationStrategy sensor_initialization_strategy) -{ - sensor_initialization_strategy_ = sensor_initialization_strategy; -} -hardware_interface::SensorInitializationStrategy TalonHWState::getSensorInitializationStrategy(void) const -{ - return sensor_initialization_strategy_; -} - void TalonHWState::setEnableReadThread(bool enable_read_thread) { enable_read_thread_ = enable_read_thread; diff --git a/zebROS_ws/src/gazebo_frcrobot_control/CMakeLists.txt b/zebROS_ws/src/gazebo_frcrobot_control/CMakeLists.txt index 347bdeadb..edf174e89 100644 --- a/zebROS_ws/src/gazebo_frcrobot_control/CMakeLists.txt +++ b/zebROS_ws/src/gazebo_frcrobot_control/CMakeLists.txt @@ -1,6 +1,7 @@ cmake_minimum_required(VERSION 3.6.3) project(gazebo_frcrobot_control) +set(CMAKE_CXX_STANDARD 17) include ("../cmake_modules/CMakeOpt.cmake") # Load catkin and all dependencies required for this package diff --git a/zebROS_ws/src/gpu_apriltag/CMakeLists.txt b/zebROS_ws/src/gpu_apriltag/CMakeLists.txt index d0b6bdcd2..7b1933611 100644 --- a/zebROS_ws/src/gpu_apriltag/CMakeLists.txt +++ b/zebROS_ws/src/gpu_apriltag/CMakeLists.txt @@ -4,7 +4,6 @@ enable_language(CUDA) include("../cmake_modules/CMakeOpt.cmake") -set(CMAKE_CXX_STANDARD 20) ## Find catkin macros and libraries ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) ## is used, also find other catkin packages @@ -26,10 +25,11 @@ find_package(catkin REQUIRED COMPONENTS # find_package(Boost REQUIRED COMPONENTS system) -set(CMAKE_CUDA_STANDARD 17) +set(CMAKE_CUDA_STANDARD 20) set(CMAKE_CUDA_STANDARD_REQUIRED TRUE) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --expt-relaxed-constexpr") +set(CMAKE_CUDA_HOST_COMPILER gcc-13) # Use the correct version of CUDA set(CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda) diff --git a/zebROS_ws/src/ros_control_boilerplate/CMakeLists.txt b/zebROS_ws/src/ros_control_boilerplate/CMakeLists.txt index 2f0b6c1a7..d2bb293ed 100644 --- a/zebROS_ws/src/ros_control_boilerplate/CMakeLists.txt +++ b/zebROS_ws/src/ros_control_boilerplate/CMakeLists.txt @@ -178,7 +178,7 @@ set (FRCROBOT_HW_MAIN_SRCS src/as726x_hw_device.cpp src/cancoder_hw_device.cpp src/candle_hw_device.cpp - # src/ctre_v5_motor_controller_hw_device.cpp + src/ctre_v5_motor_controller_hw_device.cpp src/error_queue.cpp src/frcrobot_hw_main.cpp src/frcrobot_hw_interface.cpp @@ -460,14 +460,14 @@ if (NOT (("${ARM_PREFIX}" STREQUAL "arm-frc2025-linux-gnueabi") OR src/as726x_sim_device.cpp src/cancoder_sim_device.cpp src/candle_sim_device.cpp - # src/ctre_v5_motor_controller_sim_device.cpp + src/ctre_v5_motor_controller_sim_device.cpp src/frcrobot_sim_interface.cpp src/dummy_powerdistribution.cpp src/dummy_wpilib_common.cpp src/dummy_wpilib_sim.cpp src/joystick_sim_device.cpp src/match_data_sim_device.cpp - # src/sim_ctre_v5_motor_controller.cpp + src/sim_ctre_v5_motor_controller.cpp src/sim_talonfxpro_device.cpp # src/sparkmax_sim_device.cpp src/talonfxpro_sim_devices.cpp @@ -524,14 +524,14 @@ if (NOT (("${ARM_PREFIX}" STREQUAL "arm-frc2025-linux-gnueabi") OR src/as726x_sim_device.cpp src/cancoder_sim_device.cpp src/candle_sim_device.cpp - # src/ctre_v5_motor_controller_sim_device.cpp + src/ctre_v5_motor_controller_sim_device.cpp src/frcrobot_sim_interface.cpp src/dummy_powerdistribution.cpp src/dummy_wpilib_common.cpp src/dummy_wpilib_sim.cpp src/joystick_sim_device.cpp src/match_data_sim_device.cpp - # src/sim_ctre_v5_motor_controller.cpp + src/sim_ctre_v5_motor_controller.cpp src/sim_talonfxpro_device.cpp # src/sparkmax_sim_device.cpp src/talonfxpro_sim_devices.cpp diff --git a/zebROS_ws/src/ros_control_boilerplate/config/robot_in_a_box_jetson.yaml b/zebROS_ws/src/ros_control_boilerplate/config/robot_in_a_box_jetson.yaml index 80afd3045..0fa96047b 100644 --- a/zebROS_ws/src/ros_control_boilerplate/config/robot_in_a_box_jetson.yaml +++ b/zebROS_ws/src/ros_control_boilerplate/config/robot_in_a_box_jetson.yaml @@ -29,7 +29,7 @@ hardware_interface: - {name: robot_code_ready_jetson, local: true, type: ready} - {name: robot_code_ready_rio, local: false, type: ready} # Probably not really needed? -joint_state_controller: +joint_state_controller_jetson: type: joint_state_controller/JointStateController publish_rate: 100 # Settings for ros_control hardware interface @@ -54,10 +54,10 @@ joint_state_controller: # encoder state used by the hw manager and publishes it as # a ROS topic. This is generic ROS stuff, so we'll have # to figure out what to map e.g. effort to in the Talon world -talon_state_controller: +talon_state_controller_jetson: type: talon_state_controller/TalonStateController publish_rate: 100 -talon_config_controller: +talon_config_controller_jetson: type: talon_config_controller/TalonConfigController publish_rate: 5 @@ -114,19 +114,19 @@ talon9_motionmagic_controller: # Used to listen for joint state published from the given topic # (in this case the rio) and copy them to internal copies of # joint data -joint_state_listener_controller: +joint_state_listener_controller_jetson: type: state_listener_controller/JointStateListenerController topic: /frcrobot_rio/joint_states -match_state_listener_controller: +match_state_listener_controller_jetson: type: state_listener_controller/MatchStateListenerController topic: /frcrobot_rio/match_data -pdp_state_controller: +pdp_state_controller_jetson: type: pdp_state_controller/PDPStateController publish_rate: 20 -pcm_state_controller: +pcm_state_controller_jetson: type : pcm_state_controller/PCMStateController publish_rate: 20 diff --git a/zebROS_ws/src/ros_control_boilerplate/config/robot_in_a_box_rio.yaml b/zebROS_ws/src/ros_control_boilerplate/config/robot_in_a_box_rio.yaml index a411ecc40..9fc3dd8f0 100644 --- a/zebROS_ws/src/ros_control_boilerplate/config/robot_in_a_box_rio.yaml +++ b/zebROS_ws/src/ros_control_boilerplate/config/robot_in_a_box_rio.yaml @@ -44,7 +44,7 @@ button_box_controller: name: button_box publish_rate: 50 -joint_state_controller: +joint_state_controller_rio: type: joint_state_controller/JointStateController publish_rate: 100 @@ -63,22 +63,22 @@ spacemouse_controller: # encoder state used by the hw manager and publishes it as # a ROS topic. This is generic ROS stuff, so we'll have # to figure out what to map e.g. effort to in the Talon world -talon_state_controller: +talon_state_controller_rio: type: talon_state_controller/TalonStateController publish_rate: 100 -talon_config_controller: +talon_config_controller_rio: type: talon_config_controller/TalonConfigController publish_rate: 100 -pdp_state_controller: +pdp_state_controller_rio: type: pdp_state_controller/PDPStateController publish_rate: 20 -pcm_state_controller: +pcm_state_controller_rio: type : pcm_state_controller/PCMStateController publish_rate: 20 -match_state_controller: +match_state_controller_rio: type: match_state_controller/MatchStateController publish_rate: 20 @@ -86,7 +86,7 @@ robot_controller_state_controller: type: robot_controller_state_controller/RobotControllerStateController publish_rate: 20 -joint_state_listener_controller: +joint_state_listener_controller_rio: type: state_listener_controller/JointStateListenerController topic: /frcrobot_jetson/joint_states diff --git a/zebROS_ws/src/ros_control_boilerplate/include/ros_control_boilerplate/ctre_v5_device.h b/zebROS_ws/src/ros_control_boilerplate/include/ros_control_boilerplate/ctre_v5_device.h index 5b82be4d5..c9205025d 100644 --- a/zebROS_ws/src/ros_control_boilerplate/include/ros_control_boilerplate/ctre_v5_device.h +++ b/zebROS_ws/src/ros_control_boilerplate/include/ros_control_boilerplate/ctre_v5_device.h @@ -2,7 +2,6 @@ #define CTRE_V5_DEVICE_INC__ #include -#include #include #include "ctre/phoenix/ErrorCode.h" diff --git a/zebROS_ws/src/ros_control_boilerplate/include/ros_control_boilerplate/ctre_v5_motor_controller.h b/zebROS_ws/src/ros_control_boilerplate/include/ros_control_boilerplate/ctre_v5_motor_controller.h index 8915f4dee..c586332ca 100644 --- a/zebROS_ws/src/ros_control_boilerplate/include/ros_control_boilerplate/ctre_v5_motor_controller.h +++ b/zebROS_ws/src/ros_control_boilerplate/include/ros_control_boilerplate/ctre_v5_motor_controller.h @@ -1,6 +1,8 @@ #ifndef CTRE_V5_MOTOR_CONTROLLER_INC__ #define CTRE_V5_MOTOR_CONTROLLER_INC__ +#include +#include #include #include #include diff --git a/zebROS_ws/src/ros_control_boilerplate/include/ros_control_boilerplate/sim_ctre_v5_motor_controller.h b/zebROS_ws/src/ros_control_boilerplate/include/ros_control_boilerplate/sim_ctre_v5_motor_controller.h index 052ab19c0..a6824478b 100644 --- a/zebROS_ws/src/ros_control_boilerplate/include/ros_control_boilerplate/sim_ctre_v5_motor_controller.h +++ b/zebROS_ws/src/ros_control_boilerplate/include/ros_control_boilerplate/sim_ctre_v5_motor_controller.h @@ -1,10 +1,8 @@ #ifndef SIM_CTRE_V5_MOTOR_CONTROLLER_INC__ #define SIM_CTRE_V5_MOTOR_CONTROLLER_INC__ -#include -#include +#include #include -#include #include "ros_control_boilerplate/ctre_v5_motor_controller.h" namespace gazebo::physics @@ -26,7 +24,7 @@ class SimCTREV5MotorController : public CTREV5MotorController const double read_hz); SimCTREV5MotorController(SimCTREV5MotorController &&other) noexcept = delete; SimCTREV5MotorController(const SimCTREV5MotorController &) = delete; - virtual ~SimCTREV5MotorController() = default; + ~SimCTREV5MotorController() override = default; SimCTREV5MotorController &operator=(const SimCTREV5MotorController &) = delete; SimCTREV5MotorController &operator=(SimCTREV5MotorController &&) noexcept = delete; @@ -42,7 +40,6 @@ class SimCTREV5MotorController : public CTREV5MotorController private: void setSimCollection(int position, int velocity, int delta_position = 0) const; void setSimCollectionTalonSRX(int position, int velocity, int delta_position) const; - void setSimCollectionTalonFX(int position, int velocity, int delta_position) const; boost::shared_ptr gazebo_joint_; }; diff --git a/zebROS_ws/src/ros_control_boilerplate/launch/robot_in_a_box_jetson.launch b/zebROS_ws/src/ros_control_boilerplate/launch/robot_in_a_box_jetson.launch index 190080dc9..405e8b73c 100644 --- a/zebROS_ws/src/ros_control_boilerplate/launch/robot_in_a_box_jetson.launch +++ b/zebROS_ws/src/ros_control_boilerplate/launch/robot_in_a_box_jetson.launch @@ -20,9 +20,9 @@ + joint_state_controller_rio + joint_state_listener_controller_rio + match_state_controller_rio + robot_code_ready_controller_rio" />