Add Freerouting autoroute script

- autoroute.sh: Downloads and runs Freerouting in batch mode
- Updated README with complete PCB layout workflow
- Script handles DSN→SES conversion automatically

Usage: Export DSN from KiCad, run ./autoroute.sh, import SES
This commit is contained in:
2026-01-23 05:41:09 +01:00
parent a8e63aa45c
commit cd337b8718
2 changed files with 130 additions and 0 deletions
+19
View File
@@ -62,6 +62,25 @@ SN-L00/
Full BOM with LCSC part numbers in [hardware/BOM.md](hardware/BOM.md).
### PCB Layout (KiCad 8)
1. Open `hardware/kicad/SN-L00.kicad_pro`
2. Update PCB from schematic: **Tools → Update PCB from Schematic** (F8)
3. Place components using the script:
```python
# In KiCad Scripting Console (Tools → Scripting Console)
exec(open('scripts/place_components.py').read())
```
4. Autoroute using Freerouting:
```bash
# Export DSN from KiCad: File → Export → Specctra DSN
./hardware/kicad/scripts/autoroute.sh
# Import SES in KiCad: File → Import → Specctra Session
```
5. Fill zones: Press **B**
6. Run DRC: **Inspect → Design Rules Checker**
7. Export Gerbers: **File → Fabrication Outputs → Gerbers**
### Manufacturing
- PCB: 2-layer, 28×100mm
+111
View File
@@ -0,0 +1,111 @@
#!/bin/bash
#
# SN-L00 Autorouting Script using Freerouting
#
# Usage:
# ./autoroute.sh # Uses default paths
# ./autoroute.sh input.dsn # Custom input file
# ./autoroute.sh input.dsn output.ses
#
# Prerequisites:
# 1. Export DSN from KiCad: File → Export → Specctra DSN
# 2. Java runtime installed
#
# After running:
# Import the .ses file in KiCad: File → Import → Specctra Session
#
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
FREEROUTING_JAR="${FREEROUTING_JAR:-/tmp/freerouting.jar}"
FREEROUTING_URL="https://github.com/freerouting/freerouting/releases/download/v2.0.1/freerouting-2.0.1.jar"
# Default input/output paths
DSN_FILE="${1:-$PROJECT_DIR/SN-L00.dsn}"
SES_FILE="${2:-${DSN_FILE%.dsn}.ses}"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}SN-L00 Autorouting Script${NC}"
echo "=========================================="
# Check for Java
if ! command -v java &> /dev/null; then
echo -e "${RED}Error: Java is not installed${NC}"
echo "Install with: sudo apt install default-jre"
exit 1
fi
# Download Freerouting if not present
if [[ ! -f "$FREEROUTING_JAR" ]]; then
echo -e "${YELLOW}Downloading Freerouting...${NC}"
curl -sL -o "$FREEROUTING_JAR" "$FREEROUTING_URL"
echo -e "${GREEN}Downloaded to $FREEROUTING_JAR${NC}"
fi
# Check for input DSN file
if [[ ! -f "$DSN_FILE" ]]; then
echo -e "${RED}Error: DSN file not found: $DSN_FILE${NC}"
echo ""
echo "To create the DSN file:"
echo " 1. Open SN-L00.kicad_pcb in KiCad"
echo " 2. File → Export → Specctra DSN"
echo " 3. Save as: $DSN_FILE"
echo ""
echo "Then run this script again."
exit 1
fi
echo "Input: $DSN_FILE"
echo "Output: $SES_FILE"
echo ""
# Run Freerouting in batch mode
echo -e "${YELLOW}Running Freerouting (this may take a while)...${NC}"
echo ""
# Freerouting command-line options:
# -de <file> : Design input file (DSN)
# -do <file> : Design output file (SES)
# -mp <passes>: Max routing passes (default: unlimited)
# -mt <mins> : Max time in minutes (optional)
# -oit : Order of routing: inside to outside
# -us : Use saved rules from DSN file
java -jar "$FREEROUTING_JAR" \
-de "$DSN_FILE" \
-do "$SES_FILE" \
-mp 100 \
-oit \
2>&1 | while IFS= read -r line; do
# Filter and display progress
if [[ "$line" == *"Pass"* ]] || [[ "$line" == *"route"* ]] || [[ "$line" == *"via"* ]]; then
echo " $line"
fi
done
# Check if output was created
if [[ -f "$SES_FILE" ]]; then
echo ""
echo -e "${GREEN}Routing complete!${NC}"
echo ""
echo "Output saved to: $SES_FILE"
echo ""
echo "Next steps:"
echo " 1. Open SN-L00.kicad_pcb in KiCad"
echo " 2. File → Import → Specctra Session"
echo " 3. Select: $SES_FILE"
echo " 4. Press 'B' to fill copper zones"
echo " 5. Run DRC: Inspect → Design Rules Checker"
else
echo -e "${RED}Error: Routing failed - no output file created${NC}"
echo "Try running Freerouting interactively:"
echo " java -jar $FREEROUTING_JAR"
exit 1
fi