<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Antoine Martin's Blog</title><link>https://martantoine.github.io/</link><description>Recent content on Antoine Martin's Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Wed, 01 Apr 2026 18:28:01 -0700</lastBuildDate><atom:link href="https://martantoine.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Bed frame</title><link>https://martantoine.github.io/posts/bed_frame/</link><pubDate>Wed, 01 Apr 2026 18:28:01 -0700</pubDate><guid>https://martantoine.github.io/posts/bed_frame/</guid><description>&lt;p&gt;TLDR; wood working is hard + time consuming, don&amp;rsquo;t do it unless you find it fun spend waste a month building it.&lt;/p&gt;
&lt;p&gt;Finally the happy renter of a non furnished flat, it was time to invest into good quality furniture.
The first mandatory acquisition is of course a matress, and a bed frame too even though many fellow men in their 20s believe the later is not a necessity but more a luxury.&lt;/p&gt;
&lt;p&gt;Unhappy with the state of the bed frame market that costs less than $1k, I decided to make my own after some stranger I met suggested me to do so.&lt;/p&gt;
&lt;h2 id="goals-and-inspirations-and-early-design"&gt;Goals and Inspirations and Early Design&lt;/h2&gt;
&lt;p&gt;Following requirement should be met:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Queen size matress&lt;/li&gt;
&lt;li&gt;Adequate bed height&lt;/li&gt;
&lt;li&gt;Fully wood&lt;/li&gt;
&lt;li&gt;Can serve as a coffee table when in bed (this rerquirement was partially met)&lt;/li&gt;
&lt;li&gt;Look cool&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I came across the brand Scandinavian Design quite randomly, and they turn out to make a bunch of mid century modern style furniture, bed frame included, see pic below:&lt;/p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/bed_frame/inspi.jpeg"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;p&gt;I then designed my bed in CAD, with the poor knowledge of what was feasible, trying to take into account the weird inch convention the US sells lumber and hardwood in (a 2x2 is actually a 1.75&amp;quot;x1.75&amp;quot;&amp;hellip;)
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/bed_frame/cad1.jpeg"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;With this very elaborate plan in mind and pretty much 0 wood working experience, I was now extremly confident in manufacturing it&lt;/p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/bed_frame/meme.webp"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;h2 id="hardware-mode"&gt;Hardware mode&lt;/h2&gt;
&lt;p&gt;After some brief introductionary wood working course at the Nexus makerspace in Sunnyvale, I got to work, sawing, filing, gluing my first pieces of wood:
&lt;div style="display: flex; flex-wrap: wrap; align-items: flex-start; gap: 1rem; justify-content: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/bed_frame/wip1.jpeg"
alt=""
loading="lazy"
style="flex: 1 1 0; min-width: 0; max-width: 100%; height: auto;"&gt;
&lt;img src="https://martantoine.github.io/posts/bed_frame/me.jpeg"
alt=""
loading="lazy"
style="flex: 1 1 0; min-width: 0; max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="display: flex; flex-wrap: wrap; align-items: flex-start; gap: 1rem; justify-content: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/bed_frame/room.jpeg"
alt=""
loading="lazy"
style="flex: 1 1 0; min-width: 0; max-width: 100%; height: auto;"&gt;
&lt;img src="https://martantoine.github.io/posts/bed_frame/wip2.jpeg"
alt=""
loading="lazy"
style="flex: 1 1 0; min-width: 0; max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;The most frustating piece was the jointure piece that linked the four main wood beams together. It needed to be glued to those beams while holding a fastened metal fixature. I first tried to make then in the same wood as the rest of the bed (redwood), but it turned out to be a very bad idea given the later is really soft and was nearly not strong enough for its purpose.
Hence I switched for these pieces to oak, a material that is painfully hard to work with..
&lt;div style="display: flex; flex-wrap: wrap; align-items: flex-start; gap: 1rem; justify-content: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/bed_frame/wip_hard2.jpeg"
alt=""
loading="lazy"
style="flex: 1 1 0; min-width: 0; max-width: 100%; height: auto;"&gt;
&lt;img src="https://martantoine.github.io/posts/bed_frame/wip_hard3.jpeg"
alt=""
loading="lazy"
style="flex: 1 1 0; min-width: 0; max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;Soon enough (a month later, or roughly 20 evenings where I would work 4hours straight) I was done!
&lt;div style="display: flex; flex-wrap: wrap; align-items: flex-start; gap: 1rem; justify-content: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/bed_frame/fga2.jpeg"
alt=""
loading="lazy"
style="flex: 1 1 0; min-width: 0; max-width: 100%; height: auto;"&gt;
&lt;img src="https://martantoine.github.io/posts/bed_frame/fga1.jpeg"
alt=""
loading="lazy"
style="flex: 1 1 0; min-width: 0; max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;</description></item><item><title>OptiMARS</title><link>https://martantoine.github.io/posts/optimars/</link><pubDate>Fri, 26 Sep 2025 00:00:00 +0000</pubDate><guid>https://martantoine.github.io/posts/optimars/</guid><description>&lt;h2 id="in-short"&gt;In short&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Dev. a Digital Twin to optimize tool dimensions &amp;amp; motions&lt;/li&gt;
&lt;li&gt;Dev. algorithms to improve the collaborative capabilities of the KUKA arms&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="abstract"&gt;Abstract&lt;/h2&gt;
&lt;p&gt;The MARS surgical system enhances minimally invasive procedures through magnetic fields and robotic automation. The system&amp;rsquo;s surgical effectiveness is directly tied to the robot kinematics behavior. For this reason, this research refines the target controller to improve positional consistency, a solution already tested and awaiting deployment. Additionally, OptiMARS, a Monte Carlo-based simulator, was developed to optimize kinematic parameters such as cart placement and tool dimensions. This simulator incorporates patient-specific variations (e.g. BMI, incision location) and replicates the real system’s motion controller behavior, enabling relevant kinematic optimization. Initial optimization efforts have yielded a set of optimized cart placement positions that can be used during a new alignment procedure. The work delivers immediate improvements while establishing a scalable framework for future enhancements, ensuring the MARS system can evolve alongside clinical advancements.&lt;/p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/optimars/editor.png"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;h2 id="key-achievements"&gt;Key Achievements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Creation of a high-fidelity digital twin model of the operating room&lt;/li&gt;
&lt;li&gt;Simulation of the physical environment, including collision detection and Jacobian evaluation&lt;/li&gt;
&lt;li&gt;GUI-based editing and visualization of the digital twin&lt;/li&gt;
&lt;li&gt;Implementation of inverse kinematics for the robotic arms&lt;/li&gt;
&lt;li&gt;Execution of non-linear optimization algorithms to optimize cart placement and tool dimensions&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Quadruped Robot with Tensegrity Joints actuated via Pneumatic Artificial Muscles</title><link>https://martantoine.github.io/posts/quadruped/</link><pubDate>Sat, 01 Jun 2024 18:28:01 -0700</pubDate><guid>https://martantoine.github.io/posts/quadruped/</guid><description>&lt;p&gt;The design of a quadruped robot with tensegrity joints and McKibbens artificial muscles is a complex challenge, as it involves the intricate task of designing a multi-axis compliant joint integrated with compliant actuation.
Analytical resolutions, simulations, and real-world measurement were necessary to solve this complex design problem.
The demonstrator itself was first tested in Mujoco simulation before actually building it.&lt;/p&gt;
&lt;p&gt;It was possible to eliminate the need for antagonistic pairs of muscles thanks to the introduction of a restoring force in every joint, hence reducing by a factor of two the number of actuators when compared with the antagonistic approach, eventually making the robot lighter. The pneumatic actuators are controlled by onboard valves and a microcontroller. The tensegrity joints are an assembly of 3d printed thermoplastic polyurethane and 3d printed PETG.&lt;/p&gt;
&lt;p&gt;Thanks to the joints&amp;rsquo; restoring force, the quadruped has the ability to stand by itself without active actuator control. This follows the idea of a compliant quadruped robot with minimal sensory feedback.
So far, the robot has been shown to be capable of walking forward in simulation and on a flat surface with the demonstrator (while being supported by a rail).&lt;/p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;video controls style="max-width: 100%;"&gt;
&lt;source src="https://martantoine.github.io/posts/quadruped/walking.mp4" type="video/mp4"&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;object data="quadsegrity.pdf" type="application/pdf" width="100%" height="1000px"&gt;
&lt;p&gt;Unable to display PDF file. &lt;a href="quadsegrity.pdf"&gt;Download&lt;/a&gt; instead.&lt;/p&gt;
&lt;/object&gt;</description></item><item><title>DuploBuster</title><link>https://martantoine.github.io/posts/duplobuster/</link><pubDate>Wed, 14 Jun 2023 00:00:00 +0000</pubDate><guid>https://martantoine.github.io/posts/duplobuster/</guid><description>&lt;h2 id="competition-specifications"&gt;Competition Specifications&lt;/h2&gt;
&lt;p&gt;The goal of this competition is to create an autonomous robot able to gather Duplo toys and drop them in the collection zone of the 8x8 meters arena that features obstacles and different terrains.
The room have four different regions with different color LEDs in every corner. The robot have 10 minutes inside the room to collect as many Duplo as it can.&lt;/p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/duplobuster/Arena.png"
alt=""
loading="lazy"
style="max-width: 700px; height: auto;"&gt;
&lt;/div&gt;
&lt;h2 id="how-the-robot-collects-duplo"&gt;How the robot collects Duplo&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A claw grips the toy and elevates it into it&amp;rsquo;s compartment&lt;/li&gt;
&lt;li&gt;Once the Duplo has picked up enough toys it releases them at the dropping zone by opening it&amp;rsquo;s door&lt;/li&gt;
&lt;li&gt;The front camera uses machine learning to recognize Duplos while a LIDAR scans the environment for obstacles&lt;/li&gt;
&lt;li&gt;A 360° top camera gives the position and angle while an A* algorithm deduces it&amp;rsquo;s trajectory&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="object-detection"&gt;Object Detection&lt;/h2&gt;
&lt;h3 id="problem-introduction"&gt;Problem Introduction&lt;/h3&gt;
&lt;p&gt;The duplo are localized using deep learning. In fact the Duplo comes in big variety of colors and shapes, making feature detection algorithm impractical in this situation.&lt;/p&gt;
&lt;h3 id="dataset"&gt;Dataset&lt;/h3&gt;
&lt;p&gt;Pictures of Duplo in the arena were captured using the same camera (Raspberry Pi Camera V2.1) that would then eventually be used for the inference.&lt;/p&gt;
&lt;p&gt;A total of &lt;strong&gt;600&lt;/strong&gt; pictures were capture, after deleting the non usable one, &lt;strong&gt;523&lt;/strong&gt; remained.&lt;/p&gt;
&lt;p&gt;The dataset was labelled on the free to use online platform &lt;em&gt;Roboflow&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id="policy-training"&gt;Policy Training&lt;/h3&gt;
&lt;p&gt;The framework used for target identification is &lt;strong&gt;YoloV6&lt;/strong&gt; (&lt;strong&gt;YOLOv6-N&lt;/strong&gt; to be exact), it is the lightest and fastest to run model among all others (works with \textbf{640x640} pixels pictures). The policy was trained on &lt;em&gt;Google Colab&lt;/em&gt; and exported to the &lt;em&gt;ONNX&lt;/em&gt; format for inference.&lt;/p&gt;
&lt;h3 id="results"&gt;Results&lt;/h3&gt;
&lt;p&gt;The raw inference performance are the following:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;True positive&lt;/th&gt;
&lt;th&gt;False positive&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;83%&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/duplobuster/input.jpg"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/duplobuster/output.png"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h2 id="electronics"&gt;Electronics&lt;/h2&gt;
&lt;h3 id="sensor-list"&gt;Sensor list&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Ultrasonic Distance Sensor HCS04 x 2&lt;/li&gt;
&lt;li&gt;Microswitch Sensor x 4&lt;/li&gt;
&lt;li&gt;MPU-9150&lt;/li&gt;
&lt;li&gt;RPLIDAR A1M8&lt;/li&gt;
&lt;li&gt;Raspberry Pi Camera V2.1&lt;/li&gt;
&lt;li&gt;Webcam Logitech C720&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="actuator-list"&gt;Actuator list&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Maxon EC 32 flat (15 W), 1:60 gearbox&lt;/li&gt;
&lt;li&gt;DC motor x 2&lt;/li&gt;
&lt;li&gt;Stepper motor&lt;/li&gt;
&lt;li&gt;Buzzer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most of those sensors and actuators are interfaced through &lt;strong&gt;I2C&lt;/strong&gt;, &lt;strong&gt;SPI&lt;/strong&gt;, &lt;strong&gt;PWM&lt;/strong&gt; and &lt;strong&gt;Serial&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A STM32F4 is used for interfacing with the sensors and actuators in realtime.&lt;/p&gt;
&lt;p&gt;A Raspberry Pi 4 Model B is used for more resource intensive task (e.g. computer vision).&lt;/p&gt;
&lt;h3 id="connections-diagram"&gt;Connections diagram&lt;/h3&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/duplobuster/electronic.png"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;h3 id="electronic-assembly"&gt;Electronic assembly&lt;/h3&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/duplobuster/result_elec.png"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Maxon 24/2 controller&lt;/li&gt;
&lt;li&gt;DC Driver 15x2 Lite&lt;/li&gt;
&lt;li&gt;Raspberry Pi Camera V2.1&lt;/li&gt;
&lt;li&gt;Raspberry Pi 4 Model B&lt;/li&gt;
&lt;li&gt;Nucleo F446&lt;/li&gt;
&lt;li&gt;Breadboard + IMU + AMIS-30543&lt;/li&gt;
&lt;li&gt;Power Board&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="custom-pcb"&gt;Custom PCB&lt;/h3&gt;
&lt;p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/duplobuster/aci_pcb.jpeg"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
connects sensors and actuators with the MCU and Raspberry Pi.&lt;/p&gt;
&lt;h2 id="some-hardware-details"&gt;Some hardware details&lt;/h2&gt;
&lt;h3 id="lidar"&gt;LIDAR&lt;/h3&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/duplobuster/LIDAR.jpg"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;h3 id="the-claw-grasps-the-duplo"&gt;The claw (grasps the Duplo)&lt;/h3&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/duplobuster/claws.jpeg"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;h3 id="driving-wheels"&gt;Driving wheels&lt;/h3&gt;
&lt;p&gt;The front wheels are 3D printed using TPU
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/duplobuster/front_wheel.png"
alt=""
loading="lazy"
style="max-width: 700px; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/duplobuster/coupler.jpeg"
alt=""
loading="lazy"
style="max-width: 700px; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;</description></item><item><title>Sensor Acquisition System</title><link>https://martantoine.github.io/posts/sas/</link><pubDate>Sat, 11 Sep 2021 00:00:00 +0000</pubDate><guid>https://martantoine.github.io/posts/sas/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;h3 id="requirements"&gt;Requirements:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Support up to 16 sensors simultaneous&lt;/li&gt;
&lt;li&gt;Support different kind of sensors, must be easily upgradable to support new ones&lt;/li&gt;
&lt;li&gt;Independent conditioning of the signal for each sensor (1 board per sensor)&lt;/li&gt;
&lt;li&gt;Transmit the data to the computer which will log it&lt;/li&gt;
&lt;li&gt;Settings must be set from the computer&lt;/li&gt;
&lt;li&gt;Sampling rate of 1kHz&lt;/li&gt;
&lt;li&gt;Resolution of 16bits&lt;/li&gt;
&lt;li&gt;Required supported sensors:
&lt;ul&gt;
&lt;li&gt;force sensor using Wheastone bridge&lt;/li&gt;
&lt;li&gt;Thermocouple&lt;/li&gt;
&lt;li&gt;Pressure sensor&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="project-architecture"&gt;Project Architecture&lt;/h2&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/sas/architecture.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;h2 id="components"&gt;Components&lt;/h2&gt;
&lt;p&gt;The list of components used has changed quite a lot thorough the design, I will for the sake of clarity only talk about the final design choice.&lt;/p&gt;
&lt;h3 id="analog-to-digital-converter"&gt;Analog to Digital Converter&lt;/h3&gt;
&lt;p&gt;Accordingly to the requirements, the ADC must have 16 physical pins to which the sensors would be always connected.
Moreover it has to sample each 16 sensors at a resolution of 16 bits at 1kHz.&lt;/p&gt;
&lt;h3 id="mcu"&gt;MCU&lt;/h3&gt;
&lt;p&gt;The MCU must validates the following requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2 SPI interface of at least 256 kbits/s (one for the ADC, the other for the USB port)&lt;/li&gt;
&lt;li&gt;be of the STM32 family (since it&amp;rsquo;s the one mostly used at the ERT)&lt;/li&gt;
&lt;li&gt;handle a SPI data traffic of 256 kbits/s from the ADC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In order to reduce the workload on the PCB design, the MCU must be already assembled on a board featuring :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;USB interface for transmitting data/debugging/programming of the MCU&lt;/li&gt;
&lt;li&gt;Header pins such that it can plugged as a shield on the main PCB board&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The chosen MCU is the Nucleo STM32 F446RE.&lt;/p&gt;
&lt;h3 id="power-supply"&gt;Power Supply&lt;/h3&gt;
&lt;p&gt;Many voltages are needed : 5V, 3.3V, 9V, 12V.&lt;/p&gt;
&lt;h2 id="hostboard-a"&gt;Hostboard A&lt;/h2&gt;
&lt;p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/sas/Hostboard_A_schema.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/sas/Hostboard_A_pcb3D_1.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/sas/Hostboard_A_pcb3D_2.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
PCBs assembly
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/sas/hostboard_raw.JPG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
Assembled PCBs with test pcb
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/sas/hostboard_assembled.JPG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h2 id="daugtherboard"&gt;Daugtherboard&lt;/h2&gt;
&lt;p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/sas/Daughterboard_schema.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/sas/Daughterboard_pcb3D_1.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/sas/Daughterboard_pcb3D_2.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h2 id="pcbs-assembly"&gt;PCBs assembly&lt;/h2&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/sas/PCBs_assembly.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;</description></item><item><title>Rocket Tripoli Lvl 1</title><link>https://martantoine.github.io/posts/tripoli_lvl1/</link><pubDate>Sun, 20 Jun 2021 00:00:00 +0000</pubDate><guid>https://martantoine.github.io/posts/tripoli_lvl1/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Tripoli rocket certification level 1 is obtained by successfully manufacturing, launching and recovering (using a single parachute) a rocket of a certain power.
I choose to design the rocket myself for budget and experience reasons.
So far, I have completed the structure design and started manufacturing it.&lt;/p&gt;
&lt;p&gt;I wanted my rocket to be able to pass the level 1 and level 2 certifications (level 2 requires a drog chute and a main chute) with only slight modifications to do on the rocket.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s all for the introduction, let&amp;rsquo;s dive in the design phase.&lt;/p&gt;
&lt;h2 id="design"&gt;Design&lt;/h2&gt;
&lt;h3 id="dimensions"&gt;Dimensions&lt;/h3&gt;
&lt;p&gt;The rocket was design on &lt;a href="https://openrocket.info/"&gt;OpenRocket&lt;/a&gt;, the main specs are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tube diameter : 10.2cm&lt;/li&gt;
&lt;li&gt;rocket length : 159cm&lt;/li&gt;
&lt;li&gt;fin number : 4&lt;/li&gt;
&lt;li&gt;level 1&amp;rsquo;s stability: 2.33&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/tripoli_lvl1/open_rocket_2d.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/tripoli_lvl1/open_rocket_3d.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h3 id="nose-cone"&gt;Nose cone&lt;/h3&gt;
&lt;p&gt;The nose cone is a Von Kármán profile (except the nose-tip which is a sphere) specificaly designed to minimize the drag for a given length and diameter.
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/tripoli_lvl1/cad_nose_cone.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h3 id="choc-cord-and-their-fixation"&gt;Choc cord and their fixation&lt;/h3&gt;
&lt;p&gt;The best choc cords are made out of kevlar but cost money, thus I wanted them to be interchangeable.
Moreover, it would then be possible to switch the chute without having to undo the knot between the cord and the chute but rather unlock the karabiner between the cord and the rocket&amp;rsquo;s structure.&lt;/p&gt;
&lt;h3 id="propulsion-sub-assembly"&gt;Propulsion sub-assembly&lt;/h3&gt;
&lt;p&gt;The fins must be strongly fixed to the rocket because of the heavily loads a slight angle in the rocket trajectory would produce.&lt;/p&gt;
&lt;p&gt;The fixation I came up with is a mix of interlocking and gluing to have the maximum rigidity.
The interlocking takes place on each fins at 3 contacts : the contact between the fin and the middle-centering-ring, the bottom-centering-ring and the retainer-ring.
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/tripoli_lvl1/propulsion_sub-assembly_full.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/tripoli_lvl1/propulsion_sub-assembly_fixation.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h3 id="avionic-bay"&gt;Avionic bay&lt;/h3&gt;
&lt;p&gt;Avionic is necessary to trigger the explosive charges needed to deploy the chutes&lt;/p&gt;
&lt;p&gt;Moreover, the electronic must be easily put in and out of the avionic bay (the electronic is fastened on the long rods)&lt;/p&gt;
&lt;p&gt;The bottom bulkhead is glued to the bay&amp;rsquo;s tube in opposite to the top bulkhead which is just matted with the tube.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s thus possible to remove the whole avionic by just unscrewing the bolts under the bottom bulkhead (pictures below).
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/tripoli_lvl1/avionic_bay.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/tripoli_lvl1/avionic_bay_dissassembled.PNG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h2 id="manufacturing"&gt;Manufacturing&lt;/h2&gt;
&lt;h3 id="nose-cone-1"&gt;Nose Cone&lt;/h3&gt;
&lt;p&gt;The nose cone is a complex shape, I choose to 3d print on the Prusa i3 mk3 as a one layer shell with a continuous rising of the Z axis (vase mode).
Once printed, the nose-cone wasn&amp;rsquo;t strong enough and the surface roughness was very high (I want the smoothest surface possible to have a nice glossy paint).
I applied epoxy usualy used for lamination on the inner and outer side of the shell, making it stronger and smoother (require some grinding though).&lt;/p&gt;
&lt;p&gt;Still it is not strong enough, to make it sturdier, I could :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pour foam in the inner shell&lt;/li&gt;
&lt;li&gt;add some renforcements on the inner shell and pour foam in the inner shell&lt;/li&gt;
&lt;li&gt;add layer(s) of fiber glass in the nose cone
I haven&amp;rsquo;t definitively choose yet the solution, but I&amp;rsquo;m pretty sure I will go for the third one (most of the people in the EPFL Rocket Team uses this solution, moreover I have at last a mask for composite)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="tube"&gt;Tube&lt;/h3&gt;
&lt;p&gt;The tube are made out of phenolic cardboard, some kind of super cardboard
I use one tube of 91cm long and another of 45.5cm long I cut from a 91cm long tube.
I then roughly cut the slot for the 4 fins and grind to get the desired width and length.&lt;/p&gt;
&lt;h3 id="bulkheads"&gt;Bulkheads&lt;/h3&gt;
&lt;p&gt;In order to rigidify the rocket and other function, bulkheads (which are cylindrical sections glued to the tubes) need to be cut.&lt;/p&gt;
&lt;p&gt;For this I used a cnc laser cut (this one), and use as the raw material various MDF width plank (3mm, 5mm and 8mm).
I think I should have make one of the top-centering ring (its a hollow bulkhead) widder in order to prevent its fracture during chute deploying&lt;/p&gt;
&lt;h3 id="gluing"&gt;Gluing&lt;/h3&gt;
&lt;p&gt;The bulkheads and tube are glued with epoxy Alderine of cure time 90mn.&lt;/p&gt;</description></item><item><title>Rocket Avionics - EPFL Rocket Team</title><link>https://martantoine.github.io/posts/io_rocket_avionic/</link><pubDate>Sat, 22 Feb 2020 00:00:00 +0000</pubDate><guid>https://martantoine.github.io/posts/io_rocket_avionic/</guid><description>&lt;h2 id="project-description"&gt;Project Description&lt;/h2&gt;
&lt;p&gt;The IO Rocket was a ~ 1.8 meters rocket made by members of the [https://epflrocketteam.ch/our-projects/io/](EPFL Rocket Team - ERT).&lt;/p&gt;
&lt;p&gt;It wasn&amp;rsquo;t designed for competition purposed but rather to let us learn new skills as many of us building the rocket were in their first or second year of bachelor.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve personnaly worked under the avionic sub-system, more precisely I was tasked to build to PCBs responsible for telemetry and triggering the second explosive charge (to deploy the second chute).&lt;/p&gt;
&lt;p&gt;It was for me the opportunity to learn the software Altium Designer, a schematic and PCB design software&lt;/p&gt;
&lt;p&gt;Due to the COVID-19 pandemic, the IO project was ended sooner than expected and we never had the opportunity to rebuild a second enhanced version.&lt;/p&gt;
&lt;p&gt;In fact, the only IO rocket we&amp;rsquo;ve launched was really rough, see below ;)
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;video controls style="max-width: 100%;"&gt;
&lt;source src="https://martantoine.github.io/posts/io_rocket_avionic/20200222_170717.mp4" type="video/mp4"&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h2 id="some-insights-of-the-avionic"&gt;Some insights of the avionic&lt;/h2&gt;
&lt;p&gt;Components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IMU : attitude&lt;/li&gt;
&lt;li&gt;BMP180 : pressure, altitude, temperature&lt;/li&gt;
&lt;li&gt;Arduino nano : MCU&lt;/li&gt;
&lt;li&gt;Lora : Radio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="render_avionic_pcb.png"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/io_rocket_avionic/cover.png"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h2 id="memories"&gt;Memories..&lt;/h2&gt;
&lt;p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/io_rocket_avionic/20200222_164829.jpg"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/io_rocket_avionic/group.jpg"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;</description></item><item><title>5 DOFs Robotic Arm</title><link>https://martantoine.github.io/posts/5dofsarm/</link><pubDate>Fri, 01 Jun 2018 00:00:00 +0000</pubDate><guid>https://martantoine.github.io/posts/5dofsarm/</guid><description>&lt;h2 id="description"&gt;Description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;h3 id="-warning"&gt;⚠️ Warning&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;WARNING:&lt;/strong&gt; This post describes a project known to be of very low quality. You might experience nausea while reading it.&lt;/p&gt;
&lt;p&gt;.. This is an old project from high-school. Back then I had no idea about how to properly engineer anything, more specifically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;how to properly design a robot (e.g: torque balancing)&lt;/li&gt;
&lt;li&gt;concurrent motor control (everything runs in a single thread..)&lt;/li&gt;
&lt;li&gt;inverse kinematic, it is totally missing here -_-&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;This project is about designing and manufacturing a simple 5 DOFs robotic arm.&lt;/p&gt;
&lt;p&gt;It uses one servomotor for each degree of freedom, all controlled and powered by the Arduino Mega 2560.&lt;/p&gt;
&lt;p&gt;There are 4 push buttons that can be used to manually control each degree of freedom separately.&lt;/p&gt;
&lt;h2 id="final-result"&gt;Final result&lt;/h2&gt;
&lt;p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/5dofsarm/Vue%201.jpg"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/5dofsarm/Vue%202.jpg"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/5dofsarm/Vue%203.jpg"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h2 id="robots-ability-demonstration"&gt;Robot&amp;rsquo;s ability demonstration&lt;/h2&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/5dofsarm/cover.gif"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;h2 id="manual-control"&gt;Manual control&lt;/h2&gt;
&lt;p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/5dofsarm/manual.gif"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
Controlled by pressing on those 4 buttons&lt;/p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/5dofsarm/Vue%204.jpg"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;h2 id="a-few-3d-renders"&gt;A few 3d renders&lt;/h2&gt;
&lt;p&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/5dofsarm/FilaireFrontColored.png"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/5dofsarm/FilaireSideColored.png"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/5dofsarm/Perspective_1.JPG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center; margin: 1.5rem 0;"&gt;
&lt;img src="https://martantoine.github.io/posts/5dofsarm/Perspective_2.JPG"
alt=""
loading="lazy"
style="max-width: 100%; height: auto;"&gt;
&lt;/div&gt;
&lt;/p&gt;</description></item></channel></rss>