<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.bespokerobotsociety.org/index.php?action=history&amp;feed=atom&amp;title=Software</id>
	<title>Software - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bespokerobotsociety.org/index.php?action=history&amp;feed=atom&amp;title=Software"/>
	<link rel="alternate" type="text/html" href="https://wiki.bespokerobotsociety.org/index.php?title=Software&amp;action=history"/>
	<updated>2026-04-25T09:03:13Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.bespokerobotsociety.org/index.php?title=Software&amp;diff=81&amp;oldid=prev</id>
		<title>John: Created page with &quot;{{Competency |name=Software |description=Programming robots to perform tasks and managing their behavior |difficulty_range=Beginner to Advanced |time_to_basic=2-3 weeks |essential_tools=Text editor or IDE (Thonny), USB cable, microcontroller |optional_tools=Debugger, serial monitor, version control (Git) |beginner_tutorial=MicroPython Basics |unlocks_basic=All robot capabilities (software is required for every robot) |unlocks_advanced=Capability:IMU Sensing, Ca...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.bespokerobotsociety.org/index.php?title=Software&amp;diff=81&amp;oldid=prev"/>
		<updated>2025-10-11T20:14:50Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{Competency |name=Software |description=Programming robots to perform tasks and managing their behavior |difficulty_range=Beginner to Advanced |time_to_basic=2-3 weeks |essential_tools=Text editor or IDE (Thonny), USB cable, microcontroller |optional_tools=Debugger, serial monitor, version control (Git) |beginner_tutorial=&lt;a href=&quot;/wiki/MicroPython_Basics&quot; title=&quot;MicroPython Basics&quot;&gt;MicroPython Basics&lt;/a&gt; |unlocks_basic=All robot capabilities (software is required for every robot) |unlocks_advanced=&lt;a href=&quot;/wiki/Capability:IMU_Sensing&quot; title=&quot;Capability:IMU Sensing&quot;&gt;Capability:IMU Sensing&lt;/a&gt;, Ca...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Competency&lt;br /&gt;
|name=Software&lt;br /&gt;
|description=Programming robots to perform tasks and managing their behavior&lt;br /&gt;
|difficulty_range=Beginner to Advanced&lt;br /&gt;
|time_to_basic=2-3 weeks&lt;br /&gt;
|essential_tools=Text editor or IDE (Thonny), USB cable, microcontroller&lt;br /&gt;
|optional_tools=Debugger, serial monitor, version control (Git)&lt;br /&gt;
|beginner_tutorial=[[MicroPython Basics]]&lt;br /&gt;
|unlocks_basic=All robot capabilities (software is required for every robot)&lt;br /&gt;
|unlocks_advanced=[[Capability:IMU Sensing]], [[Capability:Camera Vision]], [[Activity:Autonomous Navigation]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Software&amp;#039;&amp;#039;&amp;#039; is the competency of programming robots and managing their behavior. In robotics, software is the brain that coordinates sensors, actuators, and decision-making logic. It encompasses writing code, debugging programs, using libraries, and managing complex multi-process systems.&lt;br /&gt;
&lt;br /&gt;
Software is distinct from [[Electronics]] (the hardware interface) and [[Mechanics]] (the physical structure). This competency focuses on &amp;#039;&amp;#039;&amp;#039;programming&amp;#039;&amp;#039;&amp;#039;: writing algorithms, controlling hardware through code, and building intelligent behaviors.&lt;br /&gt;
&lt;br /&gt;
== Why Software Matters for Robotics ==&lt;br /&gt;
&lt;br /&gt;
Software brings robots to life:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Sensors&amp;#039;&amp;#039;&amp;#039; provide data, but software interprets it&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Actuators&amp;#039;&amp;#039;&amp;#039; can move, but software decides when and how&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Behaviors&amp;#039;&amp;#039;&amp;#039; emerge from code that combines sensing and action&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Intelligence&amp;#039;&amp;#039;&amp;#039; comes from algorithms, state machines, and decision logic&lt;br /&gt;
&lt;br /&gt;
Without software knowledge, you&amp;#039;re limited to pre-programmed behaviors and cannot create custom robot capabilities.&lt;br /&gt;
&lt;br /&gt;
== Skill Progression ==&lt;br /&gt;
&lt;br /&gt;
=== Beginner (SimpleBot Level) ===&lt;br /&gt;
&lt;br /&gt;
Skills you need to program [[SimpleBot]]:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;MicroPython basics&amp;#039;&amp;#039;&amp;#039; - Variables, functions, loops, conditionals&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Flashing firmware&amp;#039;&amp;#039;&amp;#039; - Install MicroPython on Raspberry Pi Pico&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Using an IDE&amp;#039;&amp;#039;&amp;#039; - Write and upload code with Thonny&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;REPL interaction&amp;#039;&amp;#039;&amp;#039; - Interactive Python shell for testing&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GPIO control&amp;#039;&amp;#039;&amp;#039; - Read sensors, control motors with digital I/O&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Simple programs&amp;#039;&amp;#039;&amp;#039; - Blink LED, read button, control motor direction&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Debugging&amp;#039;&amp;#039;&amp;#039; - Print statements, LED indicators, REPL error messages&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Unlocks&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* [[Capability:Line Sensing]] (read digital sensors)&lt;br /&gt;
* [[Capability:Differential Drive]] (control motor directions)&lt;br /&gt;
* [[Activity:Line Following]] (combine sensing + control in a loop)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tutorials&amp;#039;&amp;#039;&amp;#039;: [[MicroPython Basics]], [[MicroPython Programming]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;At this level you can&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* Write simple MicroPython programs for Raspberry Pi Pico&lt;br /&gt;
* Control LEDs, buttons, and motors with GPIO&lt;br /&gt;
* Read sensor values and make decisions based on them&lt;br /&gt;
* Debug basic program errors&lt;br /&gt;
* Implement simple robot behaviors (line following, obstacle detection)&lt;br /&gt;
&lt;br /&gt;
=== Intermediate (Expanding Capabilities) ===&lt;br /&gt;
&lt;br /&gt;
Skills for implementing complex robot behaviors:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Interrupts&amp;#039;&amp;#039;&amp;#039; - Hardware interrupts for encoder counting, timing-critical events&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PWM generation&amp;#039;&amp;#039;&amp;#039; - Precise motor speed control, servo positioning&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Timers&amp;#039;&amp;#039;&amp;#039; - Periodic tasks, non-blocking delays&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Communication protocols&amp;#039;&amp;#039;&amp;#039; - I2C and SPI libraries for sensors&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;State machines&amp;#039;&amp;#039;&amp;#039; - Organize complex behaviors with states and transitions&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Sensor fusion&amp;#039;&amp;#039;&amp;#039; - Combine multiple sensors for robust perception&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Asynchronous programming&amp;#039;&amp;#039;&amp;#039; - Use asyncio for concurrent tasks&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Calibration&amp;#039;&amp;#039;&amp;#039; - Tune sensor thresholds, motor speeds, PID parameters&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Unlocks&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* [[Capability:Encoder Sensing]] (interrupt-driven quadrature encoders)&lt;br /&gt;
* [[Capability:IMU Sensing]] (I2C communication with accelerometer/gyroscope)&lt;br /&gt;
* [[Capability:Time-of-Flight Sensing]] (I2C distance sensors)&lt;br /&gt;
* [[Activity:Dead Reckoning]] (encoder integration, coordinate tracking)&lt;br /&gt;
* [[Behavior:PID Control]] (closed-loop motor control)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tutorials&amp;#039;&amp;#039;&amp;#039;: [[MicroPython Programming]], [[State Machine Design]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;At this level you can&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* Implement interrupt-driven encoder counting&lt;br /&gt;
* Control motor speeds with PWM&lt;br /&gt;
* Read I2C and SPI sensors using libraries&lt;br /&gt;
* Design state machines for complex behaviors&lt;br /&gt;
* Write asynchronous code for concurrent tasks&lt;br /&gt;
* Calibrate sensors and tune control parameters&lt;br /&gt;
* Debug timing and concurrency issues&lt;br /&gt;
&lt;br /&gt;
=== Advanced (Autonomous Systems) ===&lt;br /&gt;
&lt;br /&gt;
Skills for building sophisticated autonomous robots:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Computer vision&amp;#039;&amp;#039;&amp;#039; - OpenCV for camera-based perception&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ROS (Robot Operating System)&amp;#039;&amp;#039;&amp;#039; - Distributed system for complex robots&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Path planning&amp;#039;&amp;#039;&amp;#039; - A*, Dijkstra, RRT algorithms&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SLAM&amp;#039;&amp;#039;&amp;#039; - Simultaneous Localization and Mapping&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Multi-process systems&amp;#039;&amp;#039;&amp;#039; - Separate processes for perception, planning, control&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Docker containers&amp;#039;&amp;#039;&amp;#039; - Portable, reproducible software environments&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Real-time systems&amp;#039;&amp;#039;&amp;#039; - Guarantee timing constraints for safety-critical tasks&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Machine learning&amp;#039;&amp;#039;&amp;#039; - Neural networks for perception and control&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Unlocks&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* [[Capability:Camera Vision]] (image processing, object detection)&lt;br /&gt;
* [[Capability:LIDAR Sensing]] (point cloud processing)&lt;br /&gt;
* [[Activity:Autonomous Navigation]] (mapping, path planning, obstacle avoidance)&lt;br /&gt;
* [[Activity:Object Manipulation]] (vision-guided grasping)&lt;br /&gt;
* Multi-robot coordination and swarm behaviors&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tutorials&amp;#039;&amp;#039;&amp;#039;: [[ROS Basics]], [[OpenCV for Robotics]], [[Docker for Robots]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;At this level you can&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* Build ROS-based systems with multiple nodes&lt;br /&gt;
* Implement computer vision algorithms with OpenCV&lt;br /&gt;
* Deploy robot software in Docker containers&lt;br /&gt;
* Design path planning and navigation algorithms&lt;br /&gt;
* Integrate machine learning models for perception&lt;br /&gt;
* Build real-time control systems&lt;br /&gt;
* Manage complex multi-process robotic systems&lt;br /&gt;
&lt;br /&gt;
== Learning Paths ==&lt;br /&gt;
&lt;br /&gt;
=== Path 1: MicroPython Beginner (SimpleBot) ===&lt;br /&gt;
# Start with [[MicroPython Basics]] - Learn Python, GPIO, and basic control&lt;br /&gt;
# Build [[SimpleBot]] - Apply programming to a real robot&lt;br /&gt;
# Complete [[MicroPython Programming]] - Learn interrupts, PWM, and I2C&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Result&amp;#039;&amp;#039;&amp;#039;: You can program SimpleBot and implement basic robot behaviors.&lt;br /&gt;
&lt;br /&gt;
=== Path 2: Embedded Systems Developer (Intermediate) ===&lt;br /&gt;
# Complete Path 1 (MicroPython Beginner)&lt;br /&gt;
# Study [[State Machine Design]] - Organize complex behaviors&lt;br /&gt;
# Implement [[Behavior:PID Control]] - Closed-loop motor control&lt;br /&gt;
# Add advanced sensors (IMU, encoders) to your robot&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Result&amp;#039;&amp;#039;&amp;#039;: You can write sophisticated control algorithms and handle multiple sensors.&lt;br /&gt;
&lt;br /&gt;
=== Path 3: Autonomous Robotics Engineer (Advanced) ===&lt;br /&gt;
# Complete Path 2 (Embedded Systems Developer)&lt;br /&gt;
# Learn [[ROS Basics]] - Distributed robotics framework&lt;br /&gt;
# Study [[OpenCV for Robotics]] - Computer vision for perception&lt;br /&gt;
# Build a robot with camera-based navigation&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Result&amp;#039;&amp;#039;&amp;#039;: You can build autonomous robots with vision, mapping, and planning capabilities.&lt;br /&gt;
&lt;br /&gt;
== Essential Concepts ==&lt;br /&gt;
&lt;br /&gt;
=== Programming Fundamentals ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Variables&amp;#039;&amp;#039;&amp;#039; - Store sensor readings, motor states, calculated values&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Functions&amp;#039;&amp;#039;&amp;#039; - Organize code into reusable blocks (read_sensor, drive_forward)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Loops&amp;#039;&amp;#039;&amp;#039; - Repeat actions (while True: read sensors, decide, act)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Conditionals&amp;#039;&amp;#039;&amp;#039; - Make decisions (if line_detected: turn_left)&lt;br /&gt;
&lt;br /&gt;
=== Hardware Control ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Digital I/O&amp;#039;&amp;#039;&amp;#039; - Read HIGH/LOW from sensors, write HIGH/LOW to motors&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Analog I/O&amp;#039;&amp;#039;&amp;#039; - Read variable voltages with ADC (battery level, photoresistor)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PWM&amp;#039;&amp;#039;&amp;#039; - Generate pulse-width modulation for motor speed, servo position&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Interrupts&amp;#039;&amp;#039;&amp;#039; - Respond immediately to events (encoder pulse, button press)&lt;br /&gt;
&lt;br /&gt;
=== Communication Protocols ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;I2C&amp;#039;&amp;#039;&amp;#039; - Communicate with sensors (IMU, distance sensor, OLED display)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SPI&amp;#039;&amp;#039;&amp;#039; - High-speed communication (SD card, some sensors)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;UART/Serial&amp;#039;&amp;#039;&amp;#039; - Debug output, GPS modules, Bluetooth communication&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;State machines&amp;#039;&amp;#039;&amp;#039; - Organize behaviors with states (SEARCHING, FOLLOWING, TURNING)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PID control&amp;#039;&amp;#039;&amp;#039; - Closed-loop control for speed, position, line following&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Sensor fusion&amp;#039;&amp;#039;&amp;#039; - Combine multiple sensors for robust measurements&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Event-driven programming&amp;#039;&amp;#039;&amp;#039; - Respond to interrupts, timers, external events&lt;br /&gt;
&lt;br /&gt;
=== Debugging Techniques ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Print debugging&amp;#039;&amp;#039;&amp;#039; - Print sensor values, state transitions to serial console&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;LED indicators&amp;#039;&amp;#039;&amp;#039; - Visual feedback for program state (blinking patterns)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;REPL testing&amp;#039;&amp;#039;&amp;#039; - Test functions interactively before running full program&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Oscilloscope/logic analyzer&amp;#039;&amp;#039;&amp;#039; - Visualize PWM signals, I2C communication&lt;br /&gt;
&lt;br /&gt;
== Tools and Equipment ==&lt;br /&gt;
&lt;br /&gt;
=== Essential Tools (Start Here) ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Text editor or IDE&amp;#039;&amp;#039;&amp;#039; (Free) - Thonny (recommended for beginners), VS Code, Mu Editor&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;USB cable&amp;#039;&amp;#039;&amp;#039; ($2-5) - Connect microcontroller to computer&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Microcontroller&amp;#039;&amp;#039;&amp;#039; ($4-10) - Raspberry Pi Pico (MicroPython), ESP32, Arduino&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Serial terminal&amp;#039;&amp;#039;&amp;#039; (Free, built into IDE) - View debug output, REPL interaction&lt;br /&gt;
&lt;br /&gt;
=== Intermediate Tools ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Version control&amp;#039;&amp;#039;&amp;#039; (Free) - Git and GitHub for code management&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Logic analyzer&amp;#039;&amp;#039;&amp;#039; ($10-60) - Debug I2C, SPI, UART communication&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Oscilloscope&amp;#039;&amp;#039;&amp;#039; ($100-400) - Visualize PWM, timing, analog signals&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Debugger&amp;#039;&amp;#039;&amp;#039; ($10-50) - Hardware debugger for stepping through code&lt;br /&gt;
&lt;br /&gt;
=== Advanced Tools ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Single-board computer&amp;#039;&amp;#039;&amp;#039; ($35-100) - Raspberry Pi for ROS, OpenCV&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Development board&amp;#039;&amp;#039;&amp;#039; ($50-200) - Jetson Nano for computer vision, neural networks&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Docker&amp;#039;&amp;#039;&amp;#039; (Free) - Container platform for reproducible environments&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ROS&amp;#039;&amp;#039;&amp;#039; (Free) - Robot Operating System for distributed robotics&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Blocking delays&amp;#039;&amp;#039;&amp;#039; - Using time.sleep() prevents interrupt handling and responsiveness&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Floating-point errors&amp;#039;&amp;#039;&amp;#039; - Use integers for encoder counts, careful with division&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Race conditions&amp;#039;&amp;#039;&amp;#039; - Interrupts can modify variables during main loop calculations&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Uninitialized variables&amp;#039;&amp;#039;&amp;#039; - Always initialize variables before using them&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Infinite loops without exit&amp;#039;&amp;#039;&amp;#039; - Always include a way to stop or reset your program&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ignoring hardware timing&amp;#039;&amp;#039;&amp;#039; - I2C/SPI require specific timing, PWM frequency affects motors&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Memory leaks&amp;#039;&amp;#039;&amp;#039; - MicroPython has limited RAM; avoid creating objects in tight loops&lt;br /&gt;
&lt;br /&gt;
== Programming Environments ==&lt;br /&gt;
&lt;br /&gt;
=== MicroPython (Beginner-Friendly) ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Platforms&amp;#039;&amp;#039;&amp;#039;: Raspberry Pi Pico, ESP32, PyBoard&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Pros&amp;#039;&amp;#039;&amp;#039;: Easy to learn, interactive REPL, extensive libraries&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cons&amp;#039;&amp;#039;&amp;#039;: Slower than C/C++, limited RAM&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Best for&amp;#039;&amp;#039;&amp;#039;: SimpleBot, learning robotics, rapid prototyping&lt;br /&gt;
&lt;br /&gt;
=== Arduino (C/C++) (Popular) ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Platforms&amp;#039;&amp;#039;&amp;#039;: Arduino Uno, Nano, Mega, ESP32, Teensy&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Pros&amp;#039;&amp;#039;&amp;#039;: Fast execution, huge community, extensive libraries&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cons&amp;#039;&amp;#039;&amp;#039;: Steeper learning curve, less interactive&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Best for&amp;#039;&amp;#039;&amp;#039;: Performance-critical tasks, larger community support&lt;br /&gt;
&lt;br /&gt;
=== Python on SBC (Advanced) ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Platforms&amp;#039;&amp;#039;&amp;#039;: Raspberry Pi, Jetson Nano, Rock Pi&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Pros&amp;#039;&amp;#039;&amp;#039;: Full Python ecosystem (NumPy, OpenCV, ROS), multitasking&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cons&amp;#039;&amp;#039;&amp;#039;: Not real-time, more expensive hardware&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Best for&amp;#039;&amp;#039;&amp;#039;: Computer vision, ROS, complex algorithms&lt;br /&gt;
&lt;br /&gt;
=== ROS (Robot Operating System) (Advanced) ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Platforms&amp;#039;&amp;#039;&amp;#039;: Linux on SBC (Raspberry Pi, Jetson, x86)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Pros&amp;#039;&amp;#039;&amp;#039;: Distributed system, reusable nodes, rich ecosystem&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cons&amp;#039;&amp;#039;&amp;#039;: Steep learning curve, complex setup&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Best for&amp;#039;&amp;#039;&amp;#039;: Multi-sensor robots, navigation, manipulation&lt;br /&gt;
&lt;br /&gt;
== Tutorials and Resources ==&lt;br /&gt;
&lt;br /&gt;
=== BRS Tutorials ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[MicroPython Basics]]&amp;#039;&amp;#039;&amp;#039; (Beginner) - Start here if you&amp;#039;re new to programming&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[MicroPython Programming]]&amp;#039;&amp;#039;&amp;#039; (Intermediate) - Interrupts, PWM, I2C, state machines&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[State Machine Design]]&amp;#039;&amp;#039;&amp;#039; (Intermediate) - Organize complex behaviors&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[ROS Basics]]&amp;#039;&amp;#039;&amp;#039; (Advanced) - Distributed robotics framework&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[OpenCV for Robotics]]&amp;#039;&amp;#039;&amp;#039; (Advanced) - Computer vision for perception&lt;br /&gt;
&lt;br /&gt;
=== Implementation Pages ===&lt;br /&gt;
* [[SimpleBot:Line Following Implementation]] - Complete MicroPython code&lt;br /&gt;
* [[SimpleBot:Dead Reckoning Implementation]] - Encoder counting and odometry&lt;br /&gt;
&lt;br /&gt;
=== External Resources ===&lt;br /&gt;
* [https://docs.micropython.org/ MicroPython Documentation] - Official reference&lt;br /&gt;
* [https://projects.raspberrypi.org/en/projects/getting-started-with-the-pico Raspberry Pi Pico Guide] - Getting started&lt;br /&gt;
* [https://www.arduino.cc/reference/en/ Arduino Language Reference] - C/C++ for Arduino&lt;br /&gt;
* [https://wiki.ros.org/ROS/Tutorials ROS Tutorials] - Robot Operating System&lt;br /&gt;
* [https://docs.opencv.org/4.x/d6/d00/tutorial_py_root.html OpenCV Python Tutorials] - Computer vision&lt;br /&gt;
&lt;br /&gt;
== Related Competencies ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Electronics]]&amp;#039;&amp;#039;&amp;#039; - Understand the hardware that software controls&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Mechanics]]&amp;#039;&amp;#039;&amp;#039; - Design the physical systems that software commands&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Soldering]]&amp;#039;&amp;#039;&amp;#039; - Build the circuits that software interfaces with&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[3D Printing]]&amp;#039;&amp;#039;&amp;#039; - Create robot chassis to mount sensors and actuators&lt;br /&gt;
&lt;br /&gt;
== Example Programs ==&lt;br /&gt;
&lt;br /&gt;
=== Blink LED (Hello World) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import Pin&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
led = Pin(25, Pin.OUT)  # Raspberry Pi Pico onboard LED&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    led.toggle()&lt;br /&gt;
    time.sleep(0.5)  # 0.5 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Read Button, Control LED ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import Pin&lt;br /&gt;
&lt;br /&gt;
button = Pin(14, Pin.IN, Pin.PULL_UP)  # Active LOW button&lt;br /&gt;
led = Pin(25, Pin.OUT)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    if button.value() == 0:  # Button pressed (LOW)&lt;br /&gt;
        led.on()&lt;br /&gt;
    else:&lt;br /&gt;
        led.off()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PWM Motor Speed Control ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import Pin, PWM&lt;br /&gt;
&lt;br /&gt;
motor_pwm = PWM(Pin(16))&lt;br /&gt;
motor_pwm.freq(1000)  # 1 kHz PWM frequency&lt;br /&gt;
&lt;br /&gt;
# 50% speed&lt;br /&gt;
motor_pwm.duty_u16(32768)  # 50% of 65535 (16-bit)&lt;br /&gt;
&lt;br /&gt;
# 75% speed&lt;br /&gt;
motor_pwm.duty_u16(49152)  # 75% of 65535&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interrupt-Driven Encoder ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import Pin&lt;br /&gt;
&lt;br /&gt;
encoder_count = 0&lt;br /&gt;
&lt;br /&gt;
def encoder_callback(pin):&lt;br /&gt;
    global encoder_count&lt;br /&gt;
    encoder_count += 1&lt;br /&gt;
&lt;br /&gt;
encoder = Pin(15, Pin.IN, Pin.PULL_UP)&lt;br /&gt;
encoder.irq(trigger=Pin.IRQ_RISING, handler=encoder_callback)&lt;br /&gt;
&lt;br /&gt;
# Count pulses while doing other work&lt;br /&gt;
while True:&lt;br /&gt;
    print(f&amp;quot;Count: {encoder_count}&amp;quot;)&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Capabilities]] - Software enables all robot capabilities&lt;br /&gt;
* [[Behaviors]] - Algorithms that software implements&lt;br /&gt;
* [[SimpleBot]] - Apply software knowledge to build a robot&lt;br /&gt;
* [[Robotics Ontology]] - How software fits into the BRS knowledge structure&lt;br /&gt;
&lt;br /&gt;
[[Category:Competencies]]&lt;br /&gt;
[[Category:Skills]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
</feed>