Skip to content

Commit efbcf6e

Browse files
committed
Cubesat bringup startup scripts and yaml configs
1 parent 3cc0da3 commit efbcf6e

12 files changed

Lines changed: 392 additions & 4 deletions

File tree

src/cubesat_bringup/CMakeLists.txt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
cmake_minimum_required(VERSION 3.8)
2+
project(cubesat_bringup)
3+
4+
find_package(ament_cmake REQUIRED)
5+
6+
install(
7+
DIRECTORY launch config
8+
DESTINATION share/${PROJECT_NAME}
9+
)
10+
11+
install(
12+
PROGRAMS scripts/start_flight.py
13+
DESTINATION lib/${PROJECT_NAME}
14+
)
15+
16+
ament_package()
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**:
2+
ros__parameters:
3+
# TODO: Figure out real pins
4+
# Sensor polling rates (Hz)
5+
accel_poll_rate_hz: 100.0
6+
gps_poll_rate_hz: 10.0
7+
power_poll_rate_hz: 5.0
8+
9+
# GPIO mappings
10+
gpio_camera_power_pin: 17
11+
gpio_boost_detect_pin: 27
12+
gpio_arm_enable_pin: 22
13+
gpio_led_status_pin: 18
14+
15+
# INA260 power monitor
16+
ina260_i2c_bus: 1
17+
ina260_i2c_address: 0x40
18+
ina260_avg_samples: 4
19+
20+
# LIS3DH accelerometer
21+
lis3dh_spi_bus: 0
22+
lis3dh_spi_device: 0
23+
lis3dh_spi_freq_hz: 1000000
24+
lis3dh_range_g: 16
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
radio_node:
2+
ros__parameters:
3+
4+
# LoRa primary profile
5+
lora_frequency_hz: 915000000
6+
lora_bandwidth_hz: 125000
7+
lora_spreading_factor: 9
8+
lora_coding_rate: 5
9+
lora_tx_power_dbm: 17
10+
lora_preamble_length: 8
11+
12+
# SPI transport
13+
spi_device: "/dev/spidev0.0"
14+
spi_freq_hz: 8000000
15+
reset_pin: 25 # TODO: Figure out real pins
16+
dio0_pin: 24
17+
18+
# Fallback profile (used if primary fails to TX)
19+
fallback_spreading_factor: 12
20+
fallback_bandwidth_hz: 125000
21+
fallback_tx_power_dbm: 20
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
stm_bridge_node:
2+
ros__parameters:
3+
4+
# SPI transport
5+
spi_device: "/dev/spidev0.1"
6+
spi_freq_hz: 5000000
7+
spi_mode: 0
8+
9+
# Protocol timing
10+
packet_timeout_ms: 50
11+
max_retries: 3
12+
retry_delay_ms: 10
13+
14+
# Frame settings
15+
max_packet_bytes: 64
16+
crc_enabled: true
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
vision_node:
2+
ros__parameters:
3+
4+
# Capture resolution
5+
image_width: 1920
6+
image_height: 720
7+
8+
# Default crop (pixels)
9+
crop_x: 0
10+
crop_y: 0
11+
crop_width: 1640
12+
crop_height: 720
13+
14+
# SSDV encoding
15+
ssdv_quality: 6
16+
ssdv_packet_bytes: 256
17+
ssdv_callsign: "KD2YIE"
18+
19+
# Camera interface
20+
camera_device: "/dev/video0"
21+
camera_warmup_ms: 500
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import os
2+
3+
from ament_index_python.packages import get_package_share_directory
4+
from launch import LaunchDescription
5+
from launch.actions import DeclareLaunchArgument
6+
from launch.substitutions import LaunchConfiguration
7+
from launch_ros.actions import Node
8+
9+
10+
def generate_launch_description():
11+
pkg = get_package_share_directory("cubesat_bringup")
12+
13+
pi_zero_cfg = os.path.join(pkg, "config", "pi_zero.yaml")
14+
stm_bridge_cfg = os.path.join(pkg, "config", "stm_bridge.yaml")
15+
16+
flight_dir_arg = DeclareLaunchArgument(
17+
"flight_dir",
18+
default_value="/tmp/bench_flight",
19+
description="Flight data directory (defaults to /tmp for bench runs)",
20+
)
21+
flight_dir = LaunchConfiguration("flight_dir")
22+
23+
shared = {"flight_dir": flight_dir}
24+
25+
# flight_manager = Node(
26+
# package="cubesat_flight",
27+
# executable="flight_manager_node",
28+
# name="flight_manager_node",
29+
# parameters=[pi_zero_cfg, shared],
30+
# respawn=False,
31+
# arguments=["--ros-args", "--log-level", "DEBUG"],
32+
# )
33+
34+
# pi_io = Node(
35+
# package="cubesat_pi_io",
36+
# executable="pi_io_node",
37+
# name="pi_io_node",
38+
# parameters=[pi_zero_cfg, shared],
39+
# respawn=False,
40+
# arguments=["--ros-args", "--log-level", "DEBUG"],
41+
# )
42+
43+
# stm_bridge = Node(
44+
# package="cubesat_stm_bridge",
45+
# executable="stm_bridge_node",
46+
# name="stm_bridge_node",
47+
# parameters=[stm_bridge_cfg, shared],
48+
# respawn=False,
49+
# arguments=["--ros-args", "--log-level", "DEBUG"],
50+
# )
51+
52+
# control = Node(
53+
# package="cubesat_control",
54+
# executable="control_node",
55+
# name="control_node",
56+
# parameters=[pi_zero_cfg, shared],
57+
# respawn=False,
58+
# arguments=["--ros-args", "--log-level", "DEBUG"],
59+
# )
60+
61+
# Radio and vision are excluded from bench
62+
63+
return LaunchDescription(
64+
[
65+
flight_dir_arg,
66+
# flight_manager,
67+
# pi_io,
68+
# stm_bridge,
69+
# control,
70+
]
71+
)
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import os
2+
from launch import LaunchDescription
3+
from launch.actions import DeclareLaunchArgument
4+
from launch.substitutions import LaunchConfiguration
5+
from launch_ros.actions import Node
6+
from ament_index_python.packages import get_package_share_directory
7+
8+
9+
def generate_launch_description():
10+
pkg = get_package_share_directory("cubesat_bringup")
11+
12+
pi_zero_cfg = os.path.join(pkg, "config", "pi_zero.yaml")
13+
stm_bridge_cfg = os.path.join(pkg, "config", "stm_bridge.yaml")
14+
radio_cfg = os.path.join(pkg, "config", "radio.yaml")
15+
vision_cfg = os.path.join(pkg, "config", "vision.yaml")
16+
17+
flight_dir_arg = DeclareLaunchArgument(
18+
"flight_dir",
19+
description="Absolute path to the active flight data directory",
20+
)
21+
flight_dir = LaunchConfiguration("flight_dir")
22+
23+
shared = {"flight_dir": flight_dir}
24+
25+
# flight_manager = Node(
26+
# package="cubesat_flight",
27+
# executable="flight_manager_node",
28+
# name="flight_manager_node",
29+
# parameters=[pi_zero_cfg, shared],
30+
# respawn=True,
31+
# respawn_delay=2.0,
32+
# arguments=["--ros-args", "--log-level", "WARN"],
33+
# )
34+
35+
# pi_io = Node(
36+
# package="cubesat_pi_io",
37+
# executable="pi_io_node",
38+
# name="pi_io_node",
39+
# parameters=[pi_zero_cfg, shared],
40+
# respawn=True,
41+
# respawn_delay=2.0,
42+
# arguments=["--ros-args", "--log-level", "WARN"],
43+
# )
44+
45+
# stm_bridge = Node(
46+
# package="cubesat_stm_bridge",
47+
# executable="stm_bridge_node",
48+
# name="stm_bridge_node",
49+
# parameters=[stm_bridge_cfg, shared],
50+
# respawn=True,
51+
# respawn_delay=2.0,
52+
# arguments=["--ros-args", "--log-level", "WARN"],
53+
# )
54+
55+
# control = Node(
56+
# package="cubesat_control",
57+
# executable="control_node",
58+
# name="control_node",
59+
# parameters=[pi_zero_cfg, shared],
60+
# respawn=True,
61+
# respawn_delay=2.0,
62+
# arguments=["--ros-args", "--log-level", "WARN"],
63+
# )
64+
65+
# radio = Node(
66+
# package="cubesat_radio",
67+
# executable="radio_node",
68+
# name="radio_node",
69+
# parameters=[radio_cfg, shared],
70+
# respawn=True,
71+
# respawn_delay=2.0,
72+
# arguments=["--ros-args", "--log-level", "WARN"],
73+
# )
74+
75+
# vision = Node(
76+
# package="cubesat_vision",
77+
# executable="vision_node",
78+
# name="vision_node",
79+
# parameters=[vision_cfg, shared],
80+
# respawn=True,
81+
# respawn_delay=2.0,
82+
# arguments=["--ros-args", "--log-level", "WARN"],
83+
# )
84+
85+
return LaunchDescription(
86+
[
87+
flight_dir_arg,
88+
# flight_manager,
89+
# pi_io,
90+
# stm_bridge,
91+
# control,
92+
# radio,
93+
# vision,
94+
]
95+
)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import os
2+
from launch import LaunchDescription
3+
from launch.actions import DeclareLaunchArgument
4+
from launch.substitutions import LaunchConfiguration
5+
from launch_ros.actions import Node
6+
from ament_index_python.packages import get_package_share_directory
7+
8+
9+
def generate_launch_description():
10+
pkg = get_package_share_directory("cubesat_bringup")
11+
12+
pi_zero_cfg = os.path.join(pkg, "config", "pi_zero.yaml")
13+
stm_bridge_cfg = os.path.join(pkg, "config", "stm_bridge.yaml")
14+
15+
flight_dir_arg = DeclareLaunchArgument(
16+
"flight_dir",
17+
default_value="/tmp/sensor_debug",
18+
description="Flight data directory for sensor debug output",
19+
)
20+
flight_dir = LaunchConfiguration("flight_dir")
21+
22+
shared = {"flight_dir": flight_dir}
23+
24+
# pi_io = Node(
25+
# package="cubesat_pi_io",
26+
# executable="pi_io_node",
27+
# name="pi_io_node",
28+
# parameters=[pi_zero_cfg, shared],
29+
# respawn=False,
30+
# arguments=["--ros-args", "--log-level", "DEBUG"],
31+
# )
32+
33+
# stm_bridge = Node(
34+
# package="cubesat_stm_bridge",
35+
# executable="stm_bridge_node",
36+
# name="stm_bridge_node",
37+
# parameters=[stm_bridge_cfg, shared],
38+
# respawn=False,
39+
# arguments=["--ros-args", "--log-level", "DEBUG"],
40+
# )
41+
42+
return LaunchDescription(
43+
[
44+
flight_dir_arg,
45+
pi_io,
46+
stm_bridge,
47+
]
48+
)

src/cubesat_bringup/package.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0"?>
2+
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
3+
<package format="3">
4+
<name>cubesat_bringup</name>
5+
<version>0.1.0</version>
6+
<description>Launch and configuration bringup for the CubeSat robotic arm flight system.</description>
7+
<maintainer email="aarchan108@gmail.com">Aaron Chan</maintainer>
8+
<license>MIT</license>
9+
10+
<buildtool_depend>ament_cmake</buildtool_depend>
11+
12+
<exec_depend>cubesat_flight</exec_depend>
13+
<exec_depend>cubesat_pi_io</exec_depend>
14+
<exec_depend>cubesat_stm_bridge</exec_depend>
15+
<exec_depend>cubesat_control</exec_depend>
16+
<exec_depend>cubesat_radio</exec_depend>
17+
<exec_depend>cubesat_vision</exec_depend>
18+
<exec_depend>launch_ros</exec_depend>
19+
20+
<export>
21+
<build_type>ament_cmake</build_type>
22+
</export>
23+
</package>

0 commit comments

Comments
 (0)