diff --git a/auto_start/auto_start_anchor.sh b/auto_start/auto_start_anchor.sh index 9eebc57..96fb7ad 100755 --- a/auto_start/auto_start_anchor.sh +++ b/auto_start/auto_start_anchor.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash set -e -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) # Wait for a network interface to be up (not necessarily online) while ! ip link show | grep -q "state UP"; do - echo "[INFO] Waiting for active network interface..." - sleep 1 + echo "[INFO] Waiting for active network interface..." + sleep 1 done echo "[INFO] Network interface is up!" @@ -16,9 +16,9 @@ echo "[INFO] Starting ROS node..." # Source ROS 2 Humble setup script if command -v nixos-rebuild; then - echo "[INFO] running on NixOS" + echo "[INFO] running on NixOS" else - source /opt/ros/humble/setup.bash + source /opt/ros/humble/setup.bash fi # Source your workspace setup script diff --git a/auto_start/auto_start_headless_full.sh b/auto_start/auto_start_headless_full.sh index 8fb6e25..db5c76c 100755 --- a/auto_start/auto_start_headless_full.sh +++ b/auto_start/auto_start_headless_full.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash set -e -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) # Wait for a network interface to be up (not necessarily online) while ! ip link show | grep -q "state UP"; do - echo "[INFO] Waiting for active network interface..." - sleep 1 + echo "[INFO] Waiting for active network interface..." + sleep 1 done echo "[INFO] Network interface is up!" @@ -16,9 +16,9 @@ echo "[INFO] Starting ROS node..." # Source ROS 2 Humble setup script if command -v nixos-rebuild; then - echo "[INFO] running on NixOS" + echo "[INFO] running on NixOS" else - source /opt/ros/humble/setup.bash + source /opt/ros/humble/setup.bash fi # Source your workspace setup script @@ -26,4 +26,3 @@ source $SCRIPT_DIR/../install/setup.bash # Launch the ROS 2 node ros2 run headless_pkg headless_full - diff --git a/auto_start/start_rosbag.sh b/auto_start/start_rosbag.sh index ac00fa0..8512486 100755 --- a/auto_start/start_rosbag.sh +++ b/auto_start/start_rosbag.sh @@ -1,26 +1,25 @@ #!/usr/bin/env bash set -e -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) -[[ -z "$ANCHOR_WS" ]] && ANCHOR_WS="$SCRIPT_DIR/.." -[[ -z "$AUTONOMY_WS" ]] && AUTONOMY_WS="$HOME/rover-Autonomy" +[[ -z $ANCHOR_WS ]] && ANCHOR_WS="$SCRIPT_DIR/.." +[[ -z $AUTONOMY_WS ]] && AUTONOMY_WS="$HOME/rover-Autonomy" BAG_LOCATION="$HOME/bags/autostart" -[[ ! -d "$BAG_LOCATION" ]] && mkdir -p "$BAG_LOCATION" +[[ ! -d $BAG_LOCATION ]] && mkdir -p "$BAG_LOCATION" # Wait for a network interface to be up (not necessarily online) while ! ip link show | grep -q "state UP"; do - echo "[INFO] Waiting for active network interface..." - sleep 1 + echo "[INFO] Waiting for active network interface..." + sleep 1 done echo "[INFO] Network interface is up!" - if command -v nixos-rebuild; then - echo "[INFO] running on NixOS" + echo "[INFO] running on NixOS" else - source /opt/ros/humble/setup.bash + source /opt/ros/humble/setup.bash fi source $ANCHOR_WS/install/setup.bash [[ -f $AUTONOMY_WS/install/setup.bash ]] && source $AUTONOMY_WS/install/setup.bash diff --git a/scripts/reset-repo.bash b/scripts/reset-repo.bash index dc7d418..8a60d4f 100755 --- a/scripts/reset-repo.bash +++ b/scripts/reset-repo.bash @@ -3,8 +3,8 @@ repo_root="$(git rev-parse --show-toplevel)" if [[ -z $repo_root ]]; then - echo "script must be run from within the rover-ros2 repo" >&2 - exit 1 + echo "script must be run from within the rover-ros2 repo" >&2 + exit 1 fi cd $repo_root @@ -12,9 +12,9 @@ cd $repo_root echo "this will nuke all of your current un-commited git changes, including any changes to submodules and any gitignored files. is this okay? (y/N)" read okay -if [[ ! "$okay" = "y" ]]; then - echo "you didn't say exactly 'y'. aborting." >&2 - exit 2 +if [[ ! $okay == "y" ]]; then + echo "you didn't say exactly 'y'. aborting." >&2 + exit 2 fi echo @@ -30,9 +30,8 @@ echo "in theory that should've done it. let's make sure" status=$(git status --porcelain) echo $status if [[ -z $status ]]; then - echo "nice, all clean!" + echo "nice, all clean!" else - echo "uhh that's not supposed to be there. this is probably a bug in this script. good luck!" >&2 - exit 3 + echo "uhh that's not supposed to be there. this is probably a bug in this script. good luck!" >&2 + exit 3 fi - diff --git a/scripts/test-connectors.bash b/scripts/test-connectors.bash index a739243..591601e 100755 --- a/scripts/test-connectors.bash +++ b/scripts/test-connectors.bash @@ -7,8 +7,8 @@ set -o pipefail repo_root="$(git rev-parse --show-toplevel)" if [[ -z $repo_root ]]; then - echo "script must be run from within the rover-ros2 repo" >&2 - exit 1 + echo "script must be run from within the rover-ros2 repo" >&2 + exit 1 fi cd "$repo_root" @@ -23,78 +23,78 @@ TESTS_PASSED=0 TESTS_FAILED=0 log() { - echo -e "${BOLD}${YELLOW}info:${NC} ${1}" + echo -e "${BOLD}${YELLOW}info:${NC} ${1}" } pass() { - echo -e "${BOLD}${GREEN}pass:${NC} ${1}" - TESTS_PASSED=$((TESTS_PASSED + 1)) + echo -e "${BOLD}${GREEN}pass:${NC} ${1}" + TESTS_PASSED=$((TESTS_PASSED + 1)) } fail() { - echo -e "${BOLD}${RED}fail:${NC} ${1}" - TESTS_FAILED=$((TESTS_FAILED + 1)) + echo -e "${BOLD}${RED}fail:${NC} ${1}" + TESTS_FAILED=$((TESTS_FAILED + 1)) } cleanup() { - log "cleaning up" - if [[ -n $ANCHOR_PID ]]; then - kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true - wait "$ANCHOR_PID" 2>/dev/null || true - fi - if [[ -n $SOCAT_PID ]]; then - kill -INT "$SOCAT_PID" 2>/dev/null || true - wait "$SOCAT_PID" 2>/dev/null || true - fi - rm -f /tmp/ttyACM9 /tmp/ttyOUT 2>/dev/null || true + log "cleaning up" + if [[ -n $ANCHOR_PID ]]; then + kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true + wait "$ANCHOR_PID" 2>/dev/null || true + fi + if [[ -n $SOCAT_PID ]]; then + kill -INT "$SOCAT_PID" 2>/dev/null || true + wait "$SOCAT_PID" 2>/dev/null || true + fi + rm -f /tmp/ttyACM9 /tmp/ttyOUT 2>/dev/null || true } trap cleanup EXIT source_ros2() { - source install/setup.bash + source install/setup.bash } wait_for_topic() { - local topic="$1" - local timeout="${2:-5}" - local count=0 - while ! ros2 topic list 2>/dev/null | grep -q "^${topic}$"; do - sleep 0.5 - count=$((count + 1)) - if [[ $count -ge $((timeout * 2)) ]]; then - return 1 - fi - done - return 0 + local topic="$1" + local timeout="${2:-5}" + local count=0 + while ! ros2 topic list 2>/dev/null | grep -q "^${topic}$"; do + sleep 0.5 + count=$((count + 1)) + if [[ $count -ge $((timeout * 2)) ]]; then + return 1 + fi + done + return 0 } test_mock_connector() { - log "testing mock connector" + log "testing mock connector" - log "starting anchor with mock connector" - setsid ros2 run anchor_pkg anchor --ros-args -p connector:=mock & - ANCHOR_PID=$! - sleep 2 + log "starting anchor with mock connector" + setsid ros2 run anchor_pkg anchor --ros-args -p connector:=mock & + ANCHOR_PID=$! + sleep 2 - if ! kill -0 "$ANCHOR_PID" 2>/dev/null; then - fail "mock connector: anchor failed to start" - return 1 - fi + if ! kill -0 "$ANCHOR_PID" 2>/dev/null; then + fail "mock connector: anchor failed to start" + return 1 + fi - if ! wait_for_topic "/anchor/to_vic/relay" 10; then - fail "mock connector: topics not available" - kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true - return 1 - fi + if ! wait_for_topic "/anchor/to_vic/relay" 10; then + fail "mock connector: topics not available" + kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true + return 1 + fi - log "anchor started successfully" + log "anchor started successfully" - # relay -> debug - log "testing relay -> debug" + # relay -> debug + log "testing relay -> debug" - local debug_output - debug_output=$(timeout 5 bash -c ' + local debug_output + debug_output=$(timeout 5 bash -c ' ros2 topic echo --once /anchor/to_vic/debug & ECHO_PID=$! sleep 0.5 @@ -102,17 +102,17 @@ test_mock_connector() { wait $ECHO_PID ' 2>/dev/null) || true - if [[ -n "$debug_output" ]] && echo "$debug_output" | grep -q "can_relay_tovic,core,50"; then - pass "mock connector: relay -> debug" - else - fail "mock connector: relay -> debug" - fi + if [[ -n $debug_output ]] && echo "$debug_output" | grep -q "can_relay_tovic,core,50"; then + pass "mock connector: relay -> debug" + else + fail "mock connector: relay -> debug" + fi - # mock_mcu -> from_vic/core - log "testing mock_mcu (core) -> from_vic/core" + # mock_mcu -> from_vic/core + log "testing mock_mcu (core) -> from_vic/core" - local core_output="" - core_output=$(timeout 5 bash -c ' + local core_output="" + core_output=$(timeout 5 bash -c ' ros2 topic echo --once /anchor/from_vic/core & ECHO_PID=$! sleep 0.5 @@ -120,17 +120,17 @@ test_mock_connector() { wait $ECHO_PID || true ' 2>/dev/null || true) || core_output="" - if [[ -n "$core_output" ]] && echo "$core_output" | grep -q "mcu_name: core" && echo "$core_output" | grep -q "command_id: 10"; then - pass "mock connector: mock_mcu -> from_vic/core" - else - fail "mock connector: mock_mcu -> from_vic/core" - fi + if [[ -n $core_output ]] && echo "$core_output" | grep -q "mcu_name: core" && echo "$core_output" | grep -q "command_id: 10"; then + pass "mock connector: mock_mcu -> from_vic/core" + else + fail "mock connector: mock_mcu -> from_vic/core" + fi - # mock_mcu -> from_vic/arm - log "testing mock_mcu (arm) -> from_vic/arm" + # mock_mcu -> from_vic/arm + log "testing mock_mcu (arm) -> from_vic/arm" - local arm_output - arm_output=$(timeout 5 bash -c ' + local arm_output + arm_output=$(timeout 5 bash -c ' ros2 topic echo --once /anchor/from_vic/arm & ECHO_PID=$! sleep 0.5 @@ -138,17 +138,17 @@ test_mock_connector() { wait $ECHO_PID ' 2>/dev/null) || true - if [[ -n "$arm_output" ]] && echo "$arm_output" | grep -q "mcu_name: arm" && echo "$arm_output" | grep -q "command_id: 55"; then - pass "mock connector: mock_mcu -> from_vic/arm" - else - fail "mock connector: mock_mcu -> from_vic/arm" - fi + if [[ -n $arm_output ]] && echo "$arm_output" | grep -q "mcu_name: arm" && echo "$arm_output" | grep -q "command_id: 55"; then + pass "mock connector: mock_mcu -> from_vic/arm" + else + fail "mock connector: mock_mcu -> from_vic/arm" + fi - # mock_mcu -> from_vic/bio - log "testing mock_mcu (citadel) -> from_vic/bio" + # mock_mcu -> from_vic/bio + log "testing mock_mcu (citadel) -> from_vic/bio" - local bio_output - bio_output=$(timeout 5 bash -c ' + local bio_output + bio_output=$(timeout 5 bash -c ' ros2 topic echo --once /anchor/from_vic/bio & ECHO_PID=$! sleep 0.5 @@ -156,17 +156,17 @@ test_mock_connector() { wait $ECHO_PID ' 2>/dev/null) || true - if echo "$bio_output" | grep -q "mcu_name: citadel" && echo "$bio_output" | grep -q "command_id: 20"; then - pass "mock connector: mock_mcu -> from_vic/bio" - else - fail "mock connector: mock_mcu -> from_vic/bio" - fi + if echo "$bio_output" | grep -q "mcu_name: citadel" && echo "$bio_output" | grep -q "command_id: 20"; then + pass "mock connector: mock_mcu -> from_vic/bio" + else + fail "mock connector: mock_mcu -> from_vic/bio" + fi - # relay_string -> debug - log "testing relay_string -> debug" + # relay_string -> debug + log "testing relay_string -> debug" - local relay_string_output - relay_string_output=$(timeout 5 bash -c ' + local relay_string_output + relay_string_output=$(timeout 5 bash -c ' ros2 topic echo --once /anchor/to_vic/debug & ECHO_PID=$! sleep 0.5 @@ -174,55 +174,55 @@ test_mock_connector() { wait $ECHO_PID ' 2>/dev/null) || true - if [[ -n "$relay_string_output" ]] && echo "$relay_string_output" | grep -q "test_raw_string_data"; then - pass "mock connector: relay_string -> debug" - else - fail "mock connector: relay_string -> debug" - fi + if [[ -n $relay_string_output ]] && echo "$relay_string_output" | grep -q "test_raw_string_data"; then + pass "mock connector: relay_string -> debug" + else + fail "mock connector: relay_string -> debug" + fi - kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true - wait "$ANCHOR_PID" 2>/dev/null || true - ANCHOR_PID="" + kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true + wait "$ANCHOR_PID" 2>/dev/null || true + ANCHOR_PID="" } test_serial_connector() { - log "testing serial connector" + log "testing serial connector" - log "creating virtual serial ports with socat" - socat pty,raw,echo=0,link=/tmp/ttyACM9 pty,raw,echo=0,link=/tmp/ttyOUT 2>/dev/null & - SOCAT_PID=$! - sleep 2 + log "creating virtual serial ports with socat" + socat pty,raw,echo=0,link=/tmp/ttyACM9 pty,raw,echo=0,link=/tmp/ttyOUT 2>/dev/null & + SOCAT_PID=$! + sleep 2 - if ! kill -0 "$SOCAT_PID" 2>/dev/null; then - fail "serial connector: failed to create virtual serial ports" - return 1 - fi + if ! kill -0 "$SOCAT_PID" 2>/dev/null; then + fail "serial connector: failed to create virtual serial ports" + return 1 + fi - log "starting anchor with serial connector (override: /tmp/ttyACM9)" - setsid ros2 run anchor_pkg anchor --ros-args -p connector:=serial -p serial_override:=/tmp/ttyACM9 & - ANCHOR_PID=$! - sleep 2 + log "starting anchor with serial connector (override: /tmp/ttyACM9)" + setsid ros2 run anchor_pkg anchor --ros-args -p connector:=serial -p serial_override:=/tmp/ttyACM9 & + ANCHOR_PID=$! + sleep 2 - if ! kill -0 "$ANCHOR_PID" 2>/dev/null; then - fail "serial connector: anchor failed to start" - kill -INT "$SOCAT_PID" 2>/dev/null || true - return 1 - fi + if ! kill -0 "$ANCHOR_PID" 2>/dev/null; then + fail "serial connector: anchor failed to start" + kill -INT "$SOCAT_PID" 2>/dev/null || true + return 1 + fi - if ! wait_for_topic "/anchor/to_vic/relay" 10; then - fail "serial connector: topics not available" - kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true - kill -INT "$SOCAT_PID" 2>/dev/null || true - return 1 - fi + if ! wait_for_topic "/anchor/to_vic/relay" 10; then + fail "serial connector: topics not available" + kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true + kill -INT "$SOCAT_PID" 2>/dev/null || true + return 1 + fi - pass "serial connector: anchor starts with virtual serial" + pass "serial connector: anchor starts with virtual serial" - # relay_string -> debug - log "testing relay_string -> debug" + # relay_string -> debug + log "testing relay_string -> debug" - local relay_string_output - relay_string_output=$(timeout 5 bash -c ' + local relay_string_output + relay_string_output=$(timeout 5 bash -c ' ros2 topic echo --once /anchor/to_vic/debug & ECHO_PID=$! sleep 0.5 @@ -230,49 +230,49 @@ test_serial_connector() { wait $ECHO_PID ' 2>/dev/null) || true - if [[ -n "$relay_string_output" ]] && echo "$relay_string_output" | grep -q "serial_test_string"; then - pass "serial connector: relay_string -> debug" - else - fail "serial connector: relay_string -> debug" - fi + if [[ -n $relay_string_output ]] && echo "$relay_string_output" | grep -q "serial_test_string"; then + pass "serial connector: relay_string -> debug" + else + fail "serial connector: relay_string -> debug" + fi - log "serial data transfer tests skipped (virtual pty limitation)" + log "serial data transfer tests skipped (virtual pty limitation)" - kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true - wait "$ANCHOR_PID" 2>/dev/null || true - ANCHOR_PID="" - kill -INT "$SOCAT_PID" 2>/dev/null || true - wait "$SOCAT_PID" 2>/dev/null || true - SOCAT_PID="" + kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true + wait "$ANCHOR_PID" 2>/dev/null || true + ANCHOR_PID="" + kill -INT "$SOCAT_PID" 2>/dev/null || true + wait "$SOCAT_PID" 2>/dev/null || true + SOCAT_PID="" } test_can_connector() { - log "testing CAN connector" + log "testing CAN connector" - log "starting anchor with CAN connector (override: vcan0)" - setsid ros2 run anchor_pkg anchor --ros-args -p connector:=can -p can_override:=vcan0 & - ANCHOR_PID=$! - sleep 2 + log "starting anchor with CAN connector (override: vcan0)" + setsid ros2 run anchor_pkg anchor --ros-args -p connector:=can -p can_override:=vcan0 & + ANCHOR_PID=$! + sleep 2 - if ! kill -0 "$ANCHOR_PID" 2>/dev/null; then - fail "CAN connector: anchor failed to start" - return 1 - fi + if ! kill -0 "$ANCHOR_PID" 2>/dev/null; then + fail "CAN connector: anchor failed to start" + return 1 + fi - if ! wait_for_topic "/anchor/to_vic/relay" 10; then - fail "CAN connector: topics not available" - kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true - return 1 - fi + if ! wait_for_topic "/anchor/to_vic/relay" 10; then + fail "CAN connector: topics not available" + kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true + return 1 + fi - log "anchor started successfully" - sleep 1 + log "anchor started successfully" + sleep 1 - # relay -> CAN bus - log "testing relay -> CAN bus" + # relay -> CAN bus + log "testing relay -> CAN bus" - local can_output - can_output=$(timeout 8 bash -c ' + local can_output + can_output=$(timeout 8 bash -c ' candump -n 1 vcan0 & DUMP_PID=$! sleep 1 @@ -282,18 +282,18 @@ test_can_connector() { wait $DUMP_PID ' 2>/dev/null) || true - # core=1, int16x4=2, cmd=30 -> id = (1<<8)|(2<<6)|30 = 0x19E - if echo "$can_output" | grep -qi "19E"; then - pass "CAN connector: relay -> CAN bus" - else - fail "CAN connector: relay -> CAN bus (got: $can_output)" - fi + # core=1, int16x4=2, cmd=30 -> id = (1<<8)|(2<<6)|30 = 0x19E + if echo "$can_output" | grep -qi "19E"; then + pass "CAN connector: relay -> CAN bus" + else + fail "CAN connector: relay -> CAN bus (got: $can_output)" + fi - # CAN -> from_vic/core - log "testing CAN bus -> from_vic/core" + # CAN -> from_vic/core + log "testing CAN bus -> from_vic/core" - local core_output - core_output=$(timeout 5 bash -c ' + local core_output + core_output=$(timeout 5 bash -c ' ros2 topic echo --once /anchor/from_vic/core & ECHO_PID=$! sleep 1 @@ -303,17 +303,17 @@ test_can_connector() { wait $ECHO_PID ' 2>/dev/null) || true - if echo "$core_output" | grep -q "mcu_name: core" && echo "$core_output" | grep -q "command_id: 15"; then - pass "CAN connector: CAN -> from_vic/core" - else - fail "CAN connector: CAN -> from_vic/core" - fi + if echo "$core_output" | grep -q "mcu_name: core" && echo "$core_output" | grep -q "command_id: 15"; then + pass "CAN connector: CAN -> from_vic/core" + else + fail "CAN connector: CAN -> from_vic/core" + fi - # CAN -> from_vic/arm - log "testing CAN bus -> from_vic/arm" + # CAN -> from_vic/arm + log "testing CAN bus -> from_vic/arm" - local arm_output - arm_output=$(timeout 5 bash -c ' + local arm_output + arm_output=$(timeout 5 bash -c ' ros2 topic echo --once /anchor/from_vic/arm & ECHO_PID=$! sleep 1 @@ -323,17 +323,17 @@ test_can_connector() { wait $ECHO_PID ' 2>/dev/null) || true - if echo "$arm_output" | grep -q "mcu_name: arm" && echo "$arm_output" | grep -q "command_id: 20"; then - pass "CAN connector: CAN -> from_vic/arm" - else - fail "CAN connector: CAN -> from_vic/arm" - fi + if echo "$arm_output" | grep -q "mcu_name: arm" && echo "$arm_output" | grep -q "command_id: 20"; then + pass "CAN connector: CAN -> from_vic/arm" + else + fail "CAN connector: CAN -> from_vic/arm" + fi - # double data type - log "testing CAN double data type" + # double data type + log "testing CAN double data type" - local double_output - double_output=$(timeout 8 bash -c ' + local double_output + double_output=$(timeout 8 bash -c ' ros2 topic echo --once /anchor/from_vic/core & ECHO_PID=$! sleep 1 @@ -345,17 +345,17 @@ test_can_connector() { wait $ECHO_PID ' 2>/dev/null) || true - if echo "$double_output" | grep -q "mcu_name: core" && echo "$double_output" | grep -q "command_id: 5"; then - pass "CAN connector: double data type" - else - fail "CAN connector: double data type" - fi + if echo "$double_output" | grep -q "mcu_name: core" && echo "$double_output" | grep -q "command_id: 5"; then + pass "CAN connector: double data type" + else + fail "CAN connector: double data type" + fi - # float32x2 data type - log "testing CAN float32x2 data type" + # float32x2 data type + log "testing CAN float32x2 data type" - local float_output - float_output=$(timeout 8 bash -c ' + local float_output + float_output=$(timeout 8 bash -c ' ros2 topic echo --once /anchor/from_vic/core & ECHO_PID=$! sleep 1 @@ -367,81 +367,81 @@ test_can_connector() { wait $ECHO_PID ' 2>/dev/null) || true - if echo "$float_output" | grep -q "mcu_name: core" && echo "$float_output" | grep -q "command_id: 10"; then - pass "CAN connector: float32x2 data type" - else - fail "CAN connector: float32x2 data type" - fi + if echo "$float_output" | grep -q "mcu_name: core" && echo "$float_output" | grep -q "command_id: 10"; then + pass "CAN connector: float32x2 data type" + else + fail "CAN connector: float32x2 data type" + fi - kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true - wait "$ANCHOR_PID" 2>/dev/null || true - ANCHOR_PID="" + kill -INT -- -"$ANCHOR_PID" 2>/dev/null || true + wait "$ANCHOR_PID" 2>/dev/null || true + ANCHOR_PID="" } check_prerequisites() { - log "checking prerequisites" - local missing=0 + log "checking prerequisites" + local missing=0 - if [[ ! -f install/setup.bash ]]; then - fail "install/setup.bash not found; run 'colcon build' first" - missing=1 - fi + if [[ ! -f install/setup.bash ]]; then + fail "install/setup.bash not found; run 'colcon build' first" + missing=1 + fi - if ! command -v socat &>/dev/null; then - fail "socat not found; install it or use 'nix develop'" - missing=1 - fi + if ! command -v socat &>/dev/null; then + fail "socat not found; install it or use 'nix develop'" + missing=1 + fi - if ! command -v cansend &>/dev/null || ! command -v candump &>/dev/null; then - fail "can-utils (cansend/candump) not found; install it or use 'nix develop'" - missing=1 - fi + if ! command -v cansend &>/dev/null || ! command -v candump &>/dev/null; then + fail "can-utils (cansend/candump) not found; install it or use 'nix develop'" + missing=1 + fi - if ! ip link show vcan0 &>/dev/null; then - fail "vcan0 interface not found" - log " create it with:" - log " sudo ip link add dev vcan0 type vcan" - log " sudo ip link set vcan0 up" - missing=1 - elif ! ip link show vcan0 | grep -q ",UP"; then - fail "vcan0 exists but is not UP" - log " enable it with: sudo ip link set vcan0 up" - missing=1 - fi + if ! ip link show vcan0 &>/dev/null; then + fail "vcan0 interface not found" + log " create it with:" + log " sudo ip link add dev vcan0 type vcan" + log " sudo ip link set vcan0 up" + missing=1 + elif ! ip link show vcan0 | grep -q ",UP"; then + fail "vcan0 exists but is not UP" + log " enable it with: sudo ip link set vcan0 up" + missing=1 + fi - if [[ $missing -eq 1 ]]; then - echo "" - log "prerequisites not met" - exit 1 - fi + if [[ $missing -eq 1 ]]; then + echo "" + log "prerequisites not met" + exit 1 + fi - log "all prerequisites met" + log "all prerequisites met" } main() { - echo "" - log "anchor connector test suite" - echo "" + echo "" + log "anchor connector test suite" + echo "" - check_prerequisites + check_prerequisites - log "sourcing ROS2 workspace" - source_ros2 + log "sourcing ROS2 workspace" + source_ros2 - test_mock_connector - test_serial_connector - test_can_connector + test_mock_connector + test_serial_connector + test_can_connector - echo "" - log "test summary" - echo -e "${BOLD}${GREEN}passed:${NC} $TESTS_PASSED" - echo -e "${BOLD}${RED}failed:${NC} $TESTS_FAILED" - echo "" + echo "" + log "test summary" + echo -e "${BOLD}${GREEN}passed:${NC} $TESTS_PASSED" + echo -e "${BOLD}${RED}failed:${NC} $TESTS_FAILED" + echo "" - if [[ $TESTS_FAILED -gt 0 ]]; then - exit 1 - fi - exit 0 + if [[ $TESTS_FAILED -gt 0 ]]; then + exit 1 + fi + exit 0 } main "$@" diff --git a/treefmt.nix b/treefmt.nix index 6bd693c..34578c5 100644 --- a/treefmt.nix +++ b/treefmt.nix @@ -1,8 +1,9 @@ -{ pkgs, ... }: +{ ... }: { projectRootFile = "flake.nix"; programs = { nixfmt.enable = true; black.enable = true; + shfmt.enable = true; }; }