

Encoder pcb
Imperial College London Department of Mechanical Engineering
- Size
- 22.8 × 15.6 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 12
- Nets
- 26
- Pads
- 52
- Tracks, vias
- 60, 0
- Pours
- 2
- Routed
- Yes
- KiCad
- KiCad 5 (file 20171130)
- Created
- 16 Jan 2020
- Updated
- 9 Jun 2020
Overview
Encoder 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 22.8 × 15.6 mm with 12 parts on 26 nets, routed with 60 tracks and 0 vias.
It is built around the AS5047P-ATSM. Its parts include 6 resistors, 2 capacitors, 2 ICs and 2 connectors.
Main components
1README
README.mdPuLSAR - 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:
catkin_ws
-> srcRun
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
12| Qty | Value | Footprint | References |
|---|---|---|---|
| 6 | 4.7k | Resistor_SMD:R_0805_2012Metric | R1, R2, R3, R4, R5, R6 |
| 2 | 100nF | Capacitor_SMD:C_0805_2012Metric | C1, C2 |
| 2 | AS5047P-ATSM | RS_Downloads:SOP65P640X120-14N | IC1, IC2 |
| 2 | Conn_01x04 | RS_Downloads:Connector_Pad_4x2.0x2.0mm | J1, J2 |
More from Nickick-ICRS/PuLSAR
2- 2 layers30.2 × 50.1 mm

- 2 layers11 × 16.2 mm

Laser range PCB
Nickick-ICRS/PuLSAR
Imperial College London Department of Mechanical Engineering
6 parts
Similar boards
- 6 layers69.7 × 76.7 mm

Amulet controller
EPFLXplore/XRE_LeggedRobot_HW
PCB designs for Xplore Research's robot dog project
414 parts348Apache-2.0 - 4 layers42 × 42 mm

- 6 layers56.7 × 54.7 mm

Better md80
darshp848/bldc-controller-60v
60 V, 20 A / 80 A peak BLDC motor controller that fits the MD80 v3.0 mounting. KiCad 10, 6 layers.
144 parts1 - 2 layers92.9 × 54.5 mm

- 2 layers84 × 58 mm

SmartKnobController ME507
Larson-Nick/SmartKnobController
This folder contains all mechanical and electrical design files for the Smart Knob Controller, created using KiCAD v9.0 and SolidWorks 2024.
90 parts1 - 2 layers18.4 × 9 mm

- 2 layers47.4 × 64 mm

TORANEKO.Mk3
Tokoro0917/ToraNeko.Mk3
KiCadプロジェクト本体(TORANEKO.Mk3.kicadpro / .kicadsch / .kicadpcb)を作成済みです(現状は空、これから回路図を起こしていきます)。 このディレクトリには、実際に回路図を起こす前に固めておいた機能ブロック構成・ペリフェラル割り当て案・BOMドラフトも一緒に置いています。
93 parts1MIT - 6 layers69.7 × 76.7 mm

Amulet controller
aidanbrzezinski/Prism-test
ΛMULET is a high-power brushless motor controller, compatible with the moteus firmware. It was specifically designed to be integrated in EPFL Xplore's Legged Robot actuators.
414 parts
Questions
How big is the Encoder pcb PCB?
It measures 22.8 × 15.6 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Encoder pcb use?
12 parts, built around the AS5047P-ATSM. 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 Encoder 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/encoder_pcb/encoder_pcb.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Can I use the Encoder pcb design in my own project?
Its repository states no licence, so its author keeps all rights: ask Nickick-ICRS before reusing the design.