Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
80f21cc
Implement a qt user interface to view topic image streams
CubeToPlay Feb 11, 2026
123b3ab
Remove non-existant files from console_scripts of camera_interface
CubeToPlay Feb 11, 2026
cac8ec0
minimium viable product
BergerKing333 Feb 18, 2026
f849ad7
Merge branch 'main' into camera-user-interface
BergerKing333 Feb 25, 2026
3b1ba06
fix broken deepstream file
BergerKing333 Feb 25, 2026
f97553e
readme update
BergerKing333 Feb 25, 2026
d464a6a
Implement general compression launch file for testing
CubeToPlay Feb 27, 2026
aa9780f
update logging to include topic output on startup
CubeToPlay Mar 4, 2026
16da803
Revert overwirte of compression.py file
CubeToPlay Mar 4, 2026
7605bfc
Correctly revert the user interface instead of changing the compression
CubeToPlay Mar 4, 2026
da0c10d
Experimenting with different USB ids
umnrobotics Mar 4, 2026
3236db6
Add camera reconnect to compression node and add no signal text to th…
umnrobotics Mar 6, 2026
1b1d0f2
Add qt interface ui changes to help the user see lost signals and to …
umnrobotics Mar 6, 2026
fb98953
Add v4l cameras and the /dev/videos to allow the symbolic links to fi…
umnrobotics Mar 6, 2026
8e722f0
Add /dev/ to the volume
umnrobotics Mar 17, 2026
807fbd9
Add manual video file mounts to ros container launch
umnrobotics Mar 18, 2026
3edaca6
Testing cameras
umnrobotics Apr 22, 2026
d06e5e1
testing changes from past week
umnrobotics Apr 26, 2026
03296d9
afternoon tests
umnrobotics Apr 27, 2026
36169cb
testing the tilt, extend, and dump
umnrobotics Apr 28, 2026
220eb43
removed safety features for PoL
umnrobotics Apr 28, 2026
0433f3d
more changes before outside
umnrobotics Apr 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ devcontainer build --push true --workspace-folder . --platform="linux/amd64,linu
<details>
<summary>How to Run Inside the ISAAC ROS Container on Linux/Jetson</summary>
<br>
** FOR MORE INFO ON UPDATING AND USING DOCKER STUFF, SEE THE README INSIDE THE `docker` directory **

First, you will need to log in to Nvidia NGC and get an API Key here: https://org.ngc.nvidia.com/setup

Then install Nvidia ngc CLI and make sure it is present in path: https://org.ngc.nvidia.com/setup/installers/cli
Expand Down
18 changes: 9 additions & 9 deletions arduino/sensors/sensors.ino
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
// Define a struct to hold the sensor data
struct SensorData {
int leftMotorPotentiometer;
int rightMotorPotentiometer;
bool bottomLimitSwitch;
bool dumpLimitSwitch;
bool extensionLimitSwitch;
};

// Define the sensor pins here
#define LEFT_MOTOR_POT_PIN A0
#define RIGHT_MOTOR_POT_PIN A1
#define DUMP_LIMIT_SWITCH 12
#define EXTENSION_LIMIT_SWITCH 13
#define RELAY_PIN 7

void setup() {
Expand All @@ -17,6 +16,9 @@ void setup() {
pinMode(RELAY_PIN, OUTPUT); // Set relay pin as an output
digitalWrite(RELAY_PIN, LOW); // Ensure the motor is off at the start

pinMode(DUMP_LIMIT_SWITCH, INPUT_PULLUP);
pinMode(EXTENSION_LIMIT_SWITCH, INPUT_PULLUP);

// No need to configure analog pins explicitly for potentiometers
// as they are used as inputs by default.
}
Expand All @@ -26,10 +28,8 @@ void loop() {
SensorData data;

// Read from the analog inputs (potentiometers)
data.leftMotorPotentiometer = analogRead(LEFT_MOTOR_POT_PIN); // Read left motor potentiometer value
data.rightMotorPotentiometer = analogRead(RIGHT_MOTOR_POT_PIN); // Read right motor potentiometer value

data.bottomLimitSwitch = analogRead(bottom_limit_switch); //bottom limit switch value
data.dumpLimitSwitch = digitalRead(DUMP_LIMIT_SWITCH);
data.extensionLimitSwitch = digitalRead(EXTENSION_LIMIT_SWITCH);

// Send the struct over the serial bus to the Nvidia Jetson
Serial.write((byte *)&data, sizeof(SensorData));
Expand Down
24 changes: 10 additions & 14 deletions config/auger_config.yaml
Original file line number Diff line number Diff line change
@@ -1,21 +1,17 @@
/**:
ros__parameters:
#TODO: Figure out all of these values
SCREW_SPEED: 4000 # TODO: update
SCREW_SPEED: 20000 # TODO: update
POWER_LIMIT: 1 #TODO: update
MAX_SCREW_SPEED: 4000 # in RPM
MIN_SCREW_SPEED: 2000 # in RPM TODO: This is a guess
MAX_RETRACT_PUSH_MOTOR_VELOCITY: -600 # in RPM, potentially could be faster
MAX_EXTEND_PUSH_MOTOR_VELOCITY: 600 # in RPM
push_motor_position: 0
tilt_actuator_position: 0
TILT_ACTUATOR_CURRENT_THRESHOLD: 0
MAX_PUSH_MOTOR_POSITION: 0
MIN_PUSH_MOTOR_POSITION: 0
FAST_SCREW_SPEED: 20000 #0.21
extension_limit_switch: true
STOWED: true
MAX_PUSH_MOTOR_POSITION: 10000
MIN_PUSH_MOTOR_POSITION: 1000
PUSH_MOTOR_POS_TOLERANCE: 0
MAX_PUSH_MOTOR_VELOCITY: 0
TILT_ACTUATOR_SPEED: 0
TILT_ACTUATOR_SPEED: 1.0
TILT_ACTUATOR_MIN_EXTENSION: 0
TILT_ACTUATOR_ID: 0
PUSH_MOTOR_ID: 0
SPIN_MOTOR_ID: 0
TILT_ACTUATOR_ID: 1
PUSH_MOTOR_ID: 3
SPIN_MOTOR_ID: 4
2 changes: 1 addition & 1 deletion config/dumper_config.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
/**:
ros__parameters:
DUMPER_POWER: 0.75 # The power the dumper needs to go
DUMPER_POWER: -0.75 # The power the dumper needs to go
11 changes: 6 additions & 5 deletions config/motor_control.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
ros__parameters:
CAN_INTERFACE_TRANSMIT: "can0" # can0, can1, slcan0, slcan1 are common values
CAN_INTERFACE_RECEIVE: "can0" # can0, can1, slcan0, slcan1 are common values
BACK_LEFT_DRIVE: 5 # CAN ID of the back left drive motor
FRONT_LEFT_DRIVE: 3 # CAN ID of the front left drive motor
BACK_RIGHT_DRIVE: 1 # CAN ID of the back right drive motor
FRONT_RIGHT_DRIVE: 6 # CAN ID of the front right drive motor
CAN_INTERFACE: "can0" # can0, can1, slcan0, slcan1 are common values
BACK_LEFT_DRIVE: 6 # CAN ID of the back left drive motor
FRONT_LEFT_DRIVE: 8 # CAN ID of the front left drive motor
BACK_RIGHT_DRIVE: 7 # CAN ID of the back right drive motor
FRONT_RIGHT_DRIVE: 5 # CAN ID of the front right drive motor
DIGGER_MOTOR: 10 # CAN ID of the digger chain motor
DIGGER_LEFT_LINEAR_ACTUATOR: 8 # CAN ID of the left linear actuator
DIGGER_RIGHT_LINEAR_ACTUATOR: 7 # CAN ID of the right linear actuator
Expand All @@ -16,7 +17,7 @@
DIGGER_ACTUATORS_kP_coupling: 0.004 # kP for digger actuator position syncing
DIGGER_PITCH_kP: 2.5 # kP for tipping while digging
TIPPING_SPEED_ADJUSTMENT: false # determines if pitch speed adjustment is used
DIGGER_SAFETY_ZONE: 120 # Measured in potentiometer units (0 to 1023)
EXTENSION_SAFETY_ZONE: 0 # Measured in potentiometer units (0 to 1023)
CURRENT_SPIKE_THRESHOLD: 1.8 # Threshold for current spike detection (measured in Amps)
CURRENT_SPIKE_TIME: 0.2 # Time in seconds to consider it a current spike (measured in seconds)
BUCKETS_CURRENT_SPIKE_THRESHOLD: 12.0 # Threshold for current spike detection (measured in Amps)
Expand Down
2 changes: 1 addition & 1 deletion config/rovr_control.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
digger_lift_manual_power_up: 0.5 # Measured in Duty Cycle (0.0-1.0)
autonomous_field_type: "cosmic" # The type of field ("cosmic", "top", "bottom", "nasa")
tilt_digging_start_position: 125.0 # Measured in potentiometer units (0 to 1023)
fast_screw_speed: 4000
fast_screw_speed: 20000
slow_screw_speed: 2000
# Auto Dig cost starts at max_dig_cost, and increases to absolute_max_dig_cost
absolute_max_dig_cost: 200 # Measured as a Costmap grid value (0-255) # TODO: tune this
Expand Down
4 changes: 3 additions & 1 deletion docker/Dockerfile.deepstream
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ RUN curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o

COPY deepstream/deepstream.deb deepstream.deb

RUN --mount=type=cache,target=/var/cache/apt apt-get update && apt-get install -y \
RUN --mount=type=cache,target=/var/cache/apt \
apt-get update --allow-releaseinfo-change && \
apt-get install -y --no-install-recommends \
gstreamer1.0-tools \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
Expand Down
5 changes: 4 additions & 1 deletion docker/Dockerfile.umn
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,14 @@ RUN --mount=type=cache,target=/var/cache/apt apt-get update && apt-get install
libudev-dev \
libusb-1.0-0-dev \
libhidapi-libusb0 \
libxcb-cursor0 \
&& rm -rf /var/lib/apt/lists/*

RUN python3 -m pip install -U \
pyvista \
streamdeck
streamdeck \
PySide6 \
av

RUN echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0fd9", MODE="0666"' | sudo tee /etc/udev/rules.d/99-streamdeck.rules

Expand Down
3 changes: 3 additions & 0 deletions docker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ Find the highest level image of this build with docker image list. The highest l
Tag this image as `umnrobotics/<repo-name>:<image-layers-separated-by->_<HASH>`
At time of writing, we were tagging images as 'umnrobotics/isaac_ros3.1:x86_64-ros2_humble-realsense-deepstream-user-zed-umn-gazebo_d000f8df5f3859fd56c7459b2ad3a718'

to find the hash, run the build command again, and find the first line starting with "Checking if base image ... exists on remote repository.
The image ID listed here is the one you should use. It is generated based on the dockerfiles in mysterious ways, so just copy paste it from the terminal log.


If you are logged in to docker, running docker image push will push this image to the cloud, and you are done. If you changed the name of/created a new dockerhub repo, update BASE_DOCKER_REGISTRY_NAMES in /scripts/build_image.sh to reflect the new name.

Expand Down
5 changes: 5 additions & 0 deletions scripts/can_reset.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash
sudo ip link set can0 down
sudo ip link set can0 type can restart-ms 100
sudo ip link set can0 up
candump can0
16 changes: 15 additions & 1 deletion scripts/enter_isaac_ros_container.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
#!/bin/bash
printf 'CONFIG_DOCKER_SEARCH_DIRS="$HOME/Lunabotics/src/isaac_ros/isaac_ros_common/scripts/../../../../docker"\n BASE_DOCKER_REGISTRY_NAMES="umnrobotics/isaac_ros3.1"\n'> ~/.isaac_ros_common-config
image_key="ros2_humble.deepstream.user.zed.umn.gazebo"
docker_arg="-v /usr/local/zed/resources:/usr/local/zed/resources -v $HOME/rosbags:/rosbags -v /usr/local/zed/settings:/usr/local/zed/settings"

# Start with your existing volumes
docker_arg="-v /usr/local/zed/resources:/usr/local/zed/resources \
-v $HOME/rosbags:/rosbags \
-v /usr/local/zed/settings:/usr/local/zed/settings \
-v /dev/v4l:/dev/v4l \
-v /dev/video0:/dev/video0 \
-v /dev/video1:/dev/video1 \
-v /dev/video2:/dev/video2 \
-v /dev/video3:/dev/video3 \
-v /dev/video4:/dev/video4 \
-v /dev/video5:/dev/video5 \
-v /dev/video6:/dev/video6 \
-v /dev/video7:/dev/video7 \
-v /dev/video8:/dev/video8"

USE_CACHED_IMAGE=${1:-true}

Expand Down
5 changes: 5 additions & 0 deletions scripts/joy_reset.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash
source /opt/ros/humble/setup.bash
ros2 daemon stop
ros2 daemon start
ros2 topic echo joy
Loading
Loading