Skip to the content
2 layers30.2 × 50.1 mmMain pcb, the printed circuit board in 3D

Imperial College London Department of Mechanical Engineering

Size
30.2 × 50.1 mm
Copper layers
2
Thickness
1.6 mm
Parts
43
Nets
72
Pads
198
Tracks, vias
607, 78
Pours
2
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
16 Jan 2020
Updated
9 Jun 2020

Overview

Main pcb is an open-source printed circuit board by Nickick-ICRS, from the Nickick-ICRS/PuLSAR repository on GitHub. It is a 2-layer board of 30.2 × 50.1 mm with 43 parts on 72 nets, routed with 607 tracks and 78 vias.

It is built around the ESP32-WROOM-32D, BMX055 and S-1170B33UC-OTSTFG, with the TCA9544APW among its other parts. Its parts include 18 resistors, 6 capacitors and 3 diodes. It belongs with the ESP32 boards of this library.

Main components

4

README

README.md

PuLSAR - Probabilistic Localisation of SwArm Robots

ME4 Master's Project of Nick Hafner

Supervised by Dr Ravi Vaidyanathan

Imperial College London Department of Mechanical Engineering

Overview of repository

This repository contains the code to localise a swarm of PuLSARs. The code is research code and no liability can be taken for any losses owing to the direct or indirect usage of this code.

The repository also contains CAD files for the Kicad PCB and Solidworks models.

Example Usage

First follow the installation instructions below.

Running Gazebo

(In a new terminal) To launch a Gazebo-simulated swarm of 20 robots with the Group Motion state machine:

$ roslaunch pulsar_gazebo multiple_robots.launch num_robots:=20 state_machine_type:=group_target.

To launch a Gazebo-simulated swarm of 10 robots with no state machine running:

$ roslaunch pulsar_gazebo multiple_robots.launch num_robots:=10 run_state_machine:=false

Running Localisation Algorithms

(With Gazebo running, in a new terminal) To launch PSOSwarmPoseEstimator with a swarm of 20 robots:

$ roslaunch pulsar_localisation localisation.launch num_robots:=20 localiser:=pso robot_model:=scan_matching.

To launch AverageMCLSwarmPoseEstimator with a swarm of 10 robots and the odometry robot model:

$ roslaunch pulsar_localisation localisation.launch num_robots:=10 localiser:=average_swarm_mcl robot_model:=odometry.

To launch MCLSwarmPoseEstimator with a swarm of 5 robots and the scan matching robot model, debugging using Valgrind//KCacheGrind:

$roslaunch pulsar_localisation localisation.launch num_robots:=5 localiser:=mcl robot_model:=scan_matching valgrind:=true.

etc...

Changing Algorithm Parameters

Edit pulsar_localisation's localisation.launch file. See the package README or file comments for details on what parameters do.

Requirements

Building

This repository used Catkin to build the sub-components. This is installed along with ROS - this set of packages has been written to run with ROS Melodic on Ubuntu 18.04 with Bash. Please start by installing ROS Melodic before attempting to install any of these packages.

Create the following directory layout:

text
catkin_ws
  -> src

Run

cd catkin_ws/src && catkin_init_workspace && cd .. && catkin_make

to generate the initial workspace. After this, clone this repository into the src folder:

cd src && git clone <this package url>

Install the required dependencies:

cd PuLSAR && ./install_dependencies.sh

Finally build the full set of packages:

cd ../.. && catkin_make

Package Layout

pulsar_cad

This package contains the CAD files needed to manufacture the PuLSAR robots. Solidworks and Kicad were used for mechanical and electrical design respectively. Kicad is free, however Solidworks will require a license to view files.

pulsar_description

This package contains the stl meshes and urdf files required for the robot description in the ROS ecosystem. URDF has been split up into multiple files, with urdf/pulsar.urdf.xacro the top level URDF file.

pulsar_gazebo

This package contains files relevant to simulating PuLSAR in the Gazebo robot simulator.

Launch

The launch folder contains the roslaunch files necessary to launch the simulation environment. one_robot.launch launches a single robot, while multiple_robots.launch will spawn multiple robots.

One Robot

This launch file spawns one pulsar robot with accompanying nodes (not localisation) in the Gazebo simulator, optionally starting the simulator. It is supposed to be called recursively from multiple_robots.launch, but exposes the following parameters if a user wishes to use it:

  • robot_ns - The name(space) of the robot. String. Default is 'pulsar_0'.
  • launch_gazebo - Whether to launch gazebo or not. Boolean. Default is true.
  • start_x - The starting x position of the robot. Decimal. Default is 0.
  • start_y - The starting y position of the robot. Decimal. Default is 0.
  • start_yaw - The starting yaw position of the robot in radians. Decimal. Default is 0.
  • start_z - The starting z height of the robot. Useful for preventing robots from clipping through the floor. Decimal. Default is 0.02.
  • run_state_machine - Should the launch file spawn a state machine for the robot. Boolean. Default is true.
  • state_machine_type - Which state machine should be spawned (see pulsar_state_machines). String. Default is "default". Options are:
    • "default" - Random movement state machine.
    • "group_target" - State machine which attempts to group with other robots and move towards a target point.
  • map_file - Which map file to use. String. Default is "<location of pulsar_gazebo>/maps/map.yaml".
Multiple Robots

This launch file spawns a swarm of pulsar robots in the Gazebo simulator, and starts the simulator. The robots are spawned in random (valid) positions. It exposes the following parameters:

  • num_robots - The numberof robots to spawn. Integer. Default is 5.
  • run_state_machine - Should the launch file spawn a state machine for the robot. Boolean. Default is true.
  • state_machine_type - Which state machine should be spawned (see pulsar_state_machines). String. Default is "default". Options are:
    • "default" - Random movement state machine.
    • "group_target" - State machine which attempts to group with other robots and move towards a target point.
  • map_file - Which map file to use. String. Default is "<location of pulsar_gazebo>/maps/map.yaml".

pulsar_hardware

Contains code to be compiled for the ESP-32 on the robots. Note that due to the impacts of COVID-19 on the university and project, robots could not be tested. As such this package is unfinished and has been included for completion.

pulsar_lib

Contains custom libraries used both in simulation and in hardware such as EKF, PI controllers and Odometry.

pulsar_localisation

Contains the developed localisation algorithms and surrounding infrastructure. It also contains the localisation launch file.

Launch

The launch file will run one of the localisation algorithms developed as part of this project. This should only be launched once all the robots have successfully been loaded into Gazebo. It has the following command line parameters:

  • num_robots - The number of robots to localise. Should match the multiple robots launchfile parameter of the same name. Integer. Default is 1.
  • valgrind - Allows the node to be launched under Valgrind for intensive debugging (e.g. function call counts). Takes precedence over gdb. Boolean. Default is false.
  • gdb - Allows the node to be launched in gdb for debugging with breakpoints etc. Boolean. Default is false.
  • localiser - Which localisation algorithm to use. String. Default is "mcl". Options are:
    • mcl - Runs the MCLSwarmPoseEstimator algorithm.
    • average_swarm_mcl - Runs the AverageMCLSwarmPoseEstimator algorithm. This algorithm was found to perform best.
    • pso - Runs the PSOSwarmPoseEstimator algorithm.
  • robot_model - Picks which robot model to use. Note that PSO only supports scan_matching. String. Default is "odometry". Options are:
    • odometry - The odometry motion model (variant of Thrun et al.'s (2010) odometry_motion_model). Found to perform best.
    • scan_matching - The scan matching model.

For finer details on this launch file see the pulsar_localisation README.

pulsar_server

Contains code to connect to robots via TCP, effectively the bridge between ROS and individual robots. Unfinished due to COVID-19, but included for completion.

pulsar_state_machines

Contains robot state machines for swarm movement. Two state machines exist:

  • Random Movement - move randomly
  • Group Movement - form a group and move to a target
Node

The state_machine node runs a state machine for a given robot. It takes the following parameters:

  • state_machine - Which state machine to use. String. Default is "default". Options are:
    • default - The default, random movement state machine.
    • group_target - The group motion state machine.
  • robot_ns - The robot name(space). String. Default is "pulsar_0".
  • update_freq - The state machine update frequency in Hz. Decimal. Default is 10.
  • delay - Delay the start of state machine logic in seconds. Decimal. Default is 0.

Parts

43
QtyValueFootprintReferences
84k7Resistor_SMD:R_0805_2012MetricR7, R8, R10, R11, R12, R13, R14, R15
4100Resistor_SMD:R_0805_2012MetricR3, R4, R5, R6
4100nCapacitor_SMD:C_0805_2012MetricC1, C2, C3, C5
4Conn_01x01Connector_PinHeader_1.00mm:PinHeader_1x01_P1.00mm_VerticalMTR_1A1, MTR_1B1, MTR_2A1, MTR_2B1
310kResistor_SMD:R_0805_2012MetricR1, R2, R9
3470Resistor_SMD:R_0805_2012MetricR16, R17, R18
3Conn_02x03_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_HorizontalLASER1, LASER2, LASER3
3LEDDiode_SMD:D_0805_2012MetricD1, D2, D3
210uCapacitor_SMD:C_0805_2012MetricC4, C6
2Conn_01x04RS_Downloads:Connector_Pad_4x2.0x2.0mmENC1, ENC2
1BMX055RS_Downloads:LGA_PACKAGE_20_PINSIMU1
1Conn_01x02Connector_JST:JST_EH_B2B-EH-A_1x02_P2.50mm_VerticalJST1
1Conn_01x08Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalUART_PROG1
1DRV8847PWRRS_Downloads:SOP65P640X120-16NH-Bridge1
1ESP32-WROOM-32DRF_Module:ESP32-WROOM-32ESP32
1S-1170B33UC-OTSTFGPackage_TO_SOT_SMD:SOT-89-5REG_3v3
1TCA9544APackage_SO:TSSOP-20_4.4x6.5mm_P0.65mmMPLEX1

More from Nickick-ICRS/PuLSAR

2
  • 2 layers22.8 × 15.6 mmEncoder pcb, the printed circuit board in 3D

    Encoder pcb

    Nickick-ICRS/PuLSAR

    Imperial College London Department of Mechanical Engineering

    12 parts
  • 2 layers11 × 16.2 mmLaser range PCB, the printed circuit board in 3D

    Laser range PCB

    Nickick-ICRS/PuLSAR

    Imperial College London Department of Mechanical Engineering

    6 parts

Similar boards

  • 4 layers345 × 213.3 mmBoom-1-Top, the printed circuit board in 3D

    Boom-1-Top

    jdotw/OpInst-Bass-1

    Three-voice analog synth with a digital control surface using CEM3340, AS3320 and similar discrete analog components.

    1,029 parts4
  • 2 layers65 × 30 mmWRO-2025-Future Engineers Canada, the printed circuit board in 3D

    WRO-2025-Future Engineers Canada

    teostefan/WRO-2025-Future-Engineers-Canada

    Main repository for the joint uOttawa-CarletonU team competing in the WRO Future Engineers 2025 competition.

    36 parts2
  • 8 layers65 × 52 mmRouterCoreBaseRevA, the printed circuit board in 3D

    RouterCoreBaseRevA

    botblox/RouterCoreCore-Baseboard-Designs

    Open source design files for the breakout board (baseboard) for RouterCore.

    127 partsMIT
  • 2 layers95.3 × 95.3 mmCPU, the printed circuit board in 3D

    CPU

    f4deb/Kicad

    90 parts
  • 2 layers20.6 × 54.8 mmControlBreakout, the printed circuit board in 3D

    ControlBreakout

    jdotw/Breakout-LP5030

    Breakout board for LP5030, MP2359, and TCA9544A

    45 parts
  • 2 layers95 × 95 mmESP32-Hub, the printed circuit board in 3D

    ESP32-Hub

    land-boards/lb-boards

    land-boards - Board Designs

    54 parts31
  • 4 layers70 × 70 mmBioReactify, the printed circuit board in 3D

    BioReactify

    asaldivar93/lab_automation

    56 partsMIT

Questions

How big is the Main pcb PCB?

It measures 30.2 × 50.1 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Main pcb use?

43 parts, built around the ESP32-WROOM-32D, BMX055, S-1170B33UC-OTSTFG and TCA9544APW. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Main pcb KiCad files?

From the Nickick-ICRS/PuLSAR repository on GitHub, at the commit this page was made from: the board is pulsar_cad/kicad/main_pcb/main_pcb.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Main pcb design in my own project?

Its repository states no licence, so its author keeps all rights: ask Nickick-ICRS before reusing the design.