<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://salvius.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://salvius.org/" rel="alternate" type="text/html" /><updated>2026-08-13T01:07:10+00:00</updated><id>https://salvius.org/feed.xml</id><title type="html">Salvius the Robot</title><subtitle>Salvius is a robotic prototype designed for learning. The robot&apos;s design is centered around a comprehensive API which makes it possible to get up and running in mere minutes. Developers can easily experiment with machine learning and kinematics for humanoid robots. A wide selection of plug and play hardware additions can be installed as well. Salvius has been built using a variety of recycled materials, making it simple and inexpensive to start developing.
</subtitle><entry><title type="html">Primitive TTS</title><link href="https://salvius.org/updates/2025/02/primitive-tts/" rel="alternate" type="text/html" title="Primitive TTS" /><published>2025-02-02T00:00:00+00:00</published><updated>2025-02-02T00:00:00+00:00</updated><id>https://salvius.org/updates/2025/02/primitive-tts</id><content type="html" xml:base="https://salvius.org/updates/2025/02/primitive-tts/"><![CDATA[<p>In the <a href="/updates/2024/09/the-rise/">last update</a> I posted, I mentioned that alongside the process of revisiting designs for Salvius, I also wanted to incorporate some form of story telling. An important aspect of any compelling story is the voice of the narrative. And so today I released a Python package called <code class="language-plaintext highlighter-rouge">primitive-tts</code> with a few objects including:</p>

<ol>
  <li>Creating a distinctive voice for Salvius</li>
  <li>Highlighting some of the downsides of a number of existing text-to-speech libraries</li>
</ol>

<p><a href="https://github.com/gunthercox/primitive-tts">https://github.com/gunthercox/primitive-tts</a></p>]]></content><author><name></name></author><summary type="html"><![CDATA[Introducing primitive-tts, a Python text-to-speech package for creating distinctive robot voices. A new approach to TTS that addresses limitations in existing libraries.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://salvius.org/images/vectors/head.svg" /><media:content medium="image" url="https://salvius.org/images/vectors/head.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The Rise</title><link href="https://salvius.org/updates/2024/09/the-rise/" rel="alternate" type="text/html" title="The Rise" /><published>2024-09-21T00:00:00+00:00</published><updated>2024-09-21T00:00:00+00:00</updated><id>https://salvius.org/updates/2024/09/the-rise</id><content type="html" xml:base="https://salvius.org/updates/2024/09/the-rise/"><![CDATA[<p>One aspect of building robots specifically in “humanoid” form emerges from how humans relate to them. Amidst the many different facets of is this is an opportunity for story-telling. Stories let us engage, understand, and think about information with context and structure that is significantly different from other forms of presentation. To explore this, in 2025 I’m going to be getting back into making YouTube videos, and create a handful of them that focus on creating a story around Salvius. I’m kicking off this process with the following YouTube Short:</p>

<p><br /></p>

<div class="text-center">
    <iframe width="auto" height="576" src="https://www.youtube.com/embed/aouN5mvoROM?si=3uo3hZQNV4yTzfq2" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="">
    </iframe>
</div>

<p><br /></p>

<p>Those interested in following along can check out Salvius’s YouTube page:</p>

<p><a href="https://www.youtube.com/@SalviusRobot/shorts">https://www.youtube.com/@SalviusRobot/shorts</a></p>]]></content><author><name></name></author><summary type="html"><![CDATA[Exploring storytelling through humanoid robotics. Salvius returns with new YouTube videos in 2025, creating narratives around robot development and human-robot interaction.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://salvius.org/images/vectors/head.svg" /><media:content medium="image" url="https://salvius.org/images/vectors/head.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Get local IP in Python</title><link href="https://salvius.org/updates/2017/01/get-local-ip/" rel="alternate" type="text/html" title="Get local IP in Python" /><published>2017-01-01T00:00:00+00:00</published><updated>2017-01-01T00:00:00+00:00</updated><id>https://salvius.org/updates/2017/01/get-local-ip</id><content type="html" xml:base="https://salvius.org/updates/2017/01/get-local-ip/"><![CDATA[This is a cool code snippet I have used on several occasions for Python
projects that need to figure out what the IP of the device they are running
on is.

<figure class="highlight"><pre><code class="language-python" data-lang="python"><span class="kn">import</span> <span class="n">socket</span>
<span class="kn">import</span> <span class="n">fcntl</span>
<span class="kn">import</span> <span class="n">struct</span>


<span class="k">def</span> <span class="nf">get_ip_address</span><span class="p">(</span><span class="n">ifname</span><span class="p">):</span>

    <span class="n">s</span> <span class="o">=</span> <span class="n">socket</span><span class="p">.</span><span class="nf">socket</span><span class="p">(</span><span class="n">socket</span><span class="p">.</span><span class="n">AF_INET</span><span class="p">,</span> <span class="n">socket</span><span class="p">.</span><span class="n">SOCK_DGRAM</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">socket</span><span class="p">.</span><span class="nf">inet_ntoa</span><span class="p">(</span><span class="n">fcntl</span><span class="p">.</span><span class="nf">ioctl</span><span class="p">(</span>
        <span class="n">s</span><span class="p">.</span><span class="nf">fileno</span><span class="p">(),</span>
        <span class="mh">0x8915</span><span class="p">,</span> <span class="c1"># SIOCGIFADDR
</span>        <span class="n">struct</span><span class="p">.</span><span class="nf">pack</span><span class="p">(</span><span class="sh">'</span><span class="s">256s</span><span class="sh">'</span><span class="p">,</span> <span class="n">ifname</span><span class="p">[:</span><span class="mi">15</span><span class="p">])</span>
    <span class="p">)[</span><span class="mi">20</span><span class="p">:</span><span class="mi">24</span><span class="p">])</span>

<span class="n">ip_address</span> <span class="o">=</span> <span class="nf">get_ip_address</span><span class="p">(</span><span class="sh">'</span><span class="s">wlan0</span><span class="sh">'</span><span class="p">)</span>

<span class="nf">print</span><span class="p">(</span><span class="n">ip_address</span><span class="p">)</span></code></pre></figure>]]></content><author><name></name></author><summary type="html"><![CDATA[This is a cool code snippet I have used on several occasions for Python projects that need to figure out what the IP of the device they are running on is.]]></summary></entry><entry><title type="html">Gathering Parts For Your Project</title><link href="https://salvius.org/updates/2015/12/gathering-parts/" rel="alternate" type="text/html" title="Gathering Parts For Your Project" /><published>2015-12-12T00:00:00+00:00</published><updated>2015-12-12T00:00:00+00:00</updated><id>https://salvius.org/updates/2015/12/gathering-parts</id><content type="html" xml:base="https://salvius.org/updates/2015/12/gathering-parts/"><![CDATA[<p>Recycling used electronic gadgets is a fantastic way to build a parts inventory for your projects. It is extremely useful to always have a few parts on hand for when you need them. However, when salvaging parts, some devices prove more bountiful than others.</p>

<h2 id="vcrs-cassette-players-walkmans-cd-players">VCRs, Cassette players, Walkmans, CD players</h2>

<p>Devices like these are a goldmine of parts. In all of these items you will be able to recover small gears, motors, sensors and switches, not to mention a plethora of circuit boards with components that can easily be unsoldered for use in other projects.</p>

<h2 id="pagers-cell-phones">Pagers, Cell phones</h2>

<p>These devices usually have a few useful parts that can be extracted. The parts used in the circuit boards for cell phones are typically too small to unsolder from the circuit board. The only useful parts that can be recovered are speakers, microphones and vibrator motors. Cell phones may also contain a tiny CMOS camera which is usually too small to be able to easily integrate into other projects.</p>

<h2 id="televisions-computer-monitors-air-conditioners-calculators-television-remotes">Televisions, Computer monitors, Air conditioners, Calculators, Television remotes</h2>

<p>Items like these typically have nothing of value in them for our robotics projects. You will probably only find one useful item.</p>

<p>In addition to the items listed above there are some rare items which you do not want to pass up if you have the opportunity to get. These items include electronic children’s toys, treadmills, and power wheelchairs. Any children’s toy with electronic parts is going to have a bountiful selection of high quality parts. In addition, treadmills have a selection of motors in them. As for power wheelchairs, if you can get one of these you pretty much have a mobile robot base already. All that needs to be done is to set up a remote connected to the control panel on the chair and you’re good to go.</p>

<h2 id="know-when-to-stop">Know When To Stop</h2>

<p>Gear boxes are gold for robotics projects and if you strip one down to just a motor and a pile of gears then you have lost a valuable part. Gear boxes make it very easy to move parts on your robot and you will find that many times just a motor on its own will not suffice. Circuit boards are another valuable resource. There will be times when you can tap into a circuit board and use it, as well as other times when you may just need one capacitor from the board. Some parts are more useful as a whole.</p>

<h2 id="dangerous-items">Dangerous Items</h2>

<p>Some electronic devices contain components or materials which can be potentially hazardous. All electronic devices contain the toxic element Lead. Lead is used for the solder which attaches electronic parts to the circuit board.</p>

<p>Be careful not to damage batteries, batteries contain acid and other toxic chemicals. Some batteries contain Cadmium, an extremely toxic metal.</p>

<p>Most smoke detectors contain a artificially produced radioisotope, americium-241. You’re not at risk for radiation poisoning from standing near a smoke detector but don’t take these items apart.</p>

<p>Infrared lasers are used in cd and dvd players, be careful if testing a part from one of these devices. Shining any laser into your eye will damage it, but the human eye can’t see infrared light so you can damage your eyes without you even being aware of it.</p>

<p>Capacitors in old monitors and televisions can store a charge of several hundred volts without even being plugged into an electrical socket.</p>

<p>Most devices are completely safe to take apart. It is better to be safe than sorry so do research on the devices you are taking apart. You will soon learn to quickly identify what gadgets contain useful parts and what ones you don’t need to waste your time with. Stay safe and learn what these used devices have to offer.</p>

<h2 id="raw-materials">Raw Materials</h2>

<p>Large sheets or blocks of various types of metal and polymers. These items can be machined or milled into nearly anything.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[A comprehensive guide to salvaging electronic parts for robotics projects. Learn which devices provide the best components and which to avoid, plus safety tips.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://salvius.org/images/vectors/head.svg" /><media:content medium="image" url="https://salvius.org/images/vectors/head.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">2015 Head Redesign</title><link href="https://salvius.org/updates/2015/06/head-design/" rel="alternate" type="text/html" title="2015 Head Redesign" /><published>2015-06-15T00:00:00+00:00</published><updated>2015-06-15T00:00:00+00:00</updated><id>https://salvius.org/updates/2015/06/head-design</id><content type="html" xml:base="https://salvius.org/updates/2015/06/head-design/"><![CDATA[<p><img src="/images/posts/head_sketch.jpg" alt="Robot head sketch" /></p>

<p>Redesign of where the camera mounts.</p>

<p>Simplification of the neck rotation mechanism.</p>

<p>Allow new face panels to be easily attached.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Redesigning the Salvius robot head with improved camera mounting, simplified neck rotation, and modular face panel attachment system.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://salvius.org/images/posts/head_sketch.jpg" /><media:content medium="image" url="https://salvius.org/images/posts/head_sketch.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">New torso design</title><link href="https://salvius.org/updates/2015/01/torso-design/" rel="alternate" type="text/html" title="New torso design" /><published>2015-01-07T00:00:00+00:00</published><updated>2015-01-07T00:00:00+00:00</updated><id>https://salvius.org/updates/2015/01/torso-design</id><content type="html" xml:base="https://salvius.org/updates/2015/01/torso-design/"><![CDATA[<p>I finished up with a major change to the robot’s torso design
last fall and never got around to writing a post about it until
now.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Major redesign of the Salvius robot torso structure completed in fall 2014, featuring improved structural integrity and component integration.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://salvius.org/images/vectors/head.svg" /><media:content medium="image" url="https://salvius.org/images/vectors/head.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Response generation via ChatterBot</title><link href="https://salvius.org/updates/2015/01/chatterbot/" rel="alternate" type="text/html" title="Response generation via ChatterBot" /><published>2015-01-02T00:00:00+00:00</published><updated>2015-01-02T00:00:00+00:00</updated><id>https://salvius.org/updates/2015/01/chatterbot</id><content type="html" xml:base="https://salvius.org/updates/2015/01/chatterbot/"><![CDATA[<p><a href="https://github.com/gunthercox/ChatterBot">ChatterBot’s source code on GitHub</a>.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Implementing conversational AI for Salvius using ChatterBot, an open-source Python library for creating chatbot responses and natural language interactions.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://salvius.org/images/vectors/head.svg" /><media:content medium="image" url="https://salvius.org/images/vectors/head.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Speech Synthesis Options for Robotics</title><link href="https://salvius.org/updates/2014/11/speech/" rel="alternate" type="text/html" title="Speech Synthesis Options for Robotics" /><published>2014-11-04T00:00:00+00:00</published><updated>2014-11-04T00:00:00+00:00</updated><id>https://salvius.org/updates/2014/11/speech</id><content type="html" xml:base="https://salvius.org/updates/2014/11/speech/"><![CDATA[<p><big>
    Language can become a barrier for humans and robots when trying to communicate.
    The robot will have the ability to produce sounds in order to communicate with people,
    animals and other robots.
</big></p>

<h2 id="options-for-speech">Options for speech</h2>

<p>When I first started exploring ways to add speech to my robotics projects
I was using a small FM transmitter to send audio to the robot. However, it can probably be agreed that just sticking a radio in the robot isn’t that cool. Instead we are going to look at a few of the different software and hardware required make this conversion.</p>

<h2 id="operational-requirements">Operational requirements</h2>

<ul>
  <li>Can’t slow down other processes to generate the audio.</li>
  <li>Ability to stop speaking process on demand.</li>
  <li>Ability to queue tasks for processing.</li>
  <li>Ability to modify pronunciations as needed.</li>
</ul>

<h2 id="design-goal">Design goal</h2>

<p>We are going to set up a dedicated speech processor that will receive text data from the robot’s main computer which it will then process into audio signals that can be understood as words. The following options list various pros and cons for available solutions that can handle speech synthesis on either the hardware <strong>or</strong> software level.</p>

<h3 id="arduino-for-speech-synthesis">Arduino for speech synthesis</h3>

<p><strong>Pros</strong></p>
<ul>
  <li>Arduino board is low cost.</li>
  <li>Many programs for speech synthesis on an Arduino have already been created so very little needs to be created from scratch.</li>
</ul>

<p><strong>Cons</strong></p>
<ul>
  <li>Lowest quality audio output of all options</li>
</ul>

<h3 id="raspberry-pi-for-speech-synthesis">Raspberry Pi for speech synthesis</h3>

<p><strong>Pros</strong></p>

<ul>
  <li>Install commonly used (free) <code class="language-plaintext highlighter-rouge">espeak</code> package.</li>
</ul>

<p><strong>Cons</strong></p>

<ul>
  <li>The Raspberry Pi might be overkill for just speech synthesis processing tasks alone.</li>
</ul>

<h3 id="espeak-text-to-speech-module">eSpeak text to speech module</h3>

<p><strong>Pros</strong></p>

<ul>
  <li>Takes the load of speech synthesis off of the robot’s main processor.</li>
</ul>

<p><strong>Cons</strong></p>

<ul>
  <li>More expensive ($50 to $70)</li>
</ul>

<hr />

<p>An amplifier will be required in either case to amplify the audio you generate for output through speakers.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Exploring hardware and software options for robot speech synthesis. Comparison of Arduino, Raspberry Pi, and software-based text-to-speech solutions for robotics applications.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://salvius.org/images/vectors/head.svg" /><media:content medium="image" url="https://salvius.org/images/vectors/head.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Fast, Cheap, and Out of Control</title><link href="https://salvius.org/updates/2014/10/robot/" rel="alternate" type="text/html" title="Fast, Cheap, and Out of Control" /><published>2014-10-12T00:00:00+00:00</published><updated>2014-10-12T00:00:00+00:00</updated><id>https://salvius.org/updates/2014/10/robot</id><content type="html" xml:base="https://salvius.org/updates/2014/10/robot/"><![CDATA[<p>A hexapedal robot named Genghis was revealed by MIT in 1989. Genghis was famous for being made quickly and cheaply due to construction methods; Genghis used 4 microprocessors, 22 sensors, and 12 servo motors. Rodney Brooks and Anita M. Flynn published “Fast, Cheap, and Out of Control: A Robot Invasion of The Solar System”. The paper advocated creating smaller cheaper robots in greater numbers to increase production time and decrease the difficulty of launching robots into space.</p>

<p>https://people.csail.mit.edu/brooks/papers/fast-cheap.pdf</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Exploring Rodney Brooks' influential 1989 paper on building smaller, cheaper robots in greater numbers. The Genghis hexapedal robot and its impact on robotics philosophy.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://salvius.org/images/vectors/head.svg" /><media:content medium="image" url="https://salvius.org/images/vectors/head.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Endoskeleton</title><link href="https://salvius.org/updates/2014/10/endoskeleton/" rel="alternate" type="text/html" title="Endoskeleton" /><published>2014-10-01T00:00:00+00:00</published><updated>2014-10-01T00:00:00+00:00</updated><id>https://salvius.org/updates/2014/10/endoskeleton</id><content type="html" xml:base="https://salvius.org/updates/2014/10/endoskeleton/"><![CDATA[<p>An endoskeleton is an internal support structure of an animal, composed of mineralized tissue.</p>

<p>Endoskeleton develops within the skin or in the deeper body tissues. The vertebrate is basically an endoskeleton made up of two types of tissues (bone and cartilage). During early embryonic development the endoskeleton is composed of notochord and cartilage. The notochord in most vertebrates is replaced by vertebral column and cartilage is replaced by bone in most adults.In three phyla and one subclass of animals, endoskeletons of various complexity are found: Chordata, Echinodermata, Porifera, and Coleoidea. An endoskeleton may function purely for support (as in the case of sponges), but often serves as an attachment site for muscle and a mechanism for transmitting muscular forces. A true endoskeleton is derived from mesodermal tissue. Such a skeleton is present in echinoderms and chordates. The poriferan ‘skeleton’ consists of microscopic calcareous or siliceous spicules or a spongin network. The Coleoidae do not have a true endoskeleton in the evolutionary sense; here, a mollusk exoskeleton evolved into several sorts of internal structure, the “cuttlebone” of cuttlefish being the best-known version. Yet they do have cartilaginous tissue in their body, even if it is not mineralized, especially in the head, where it forms a primitive cranium.The endoskeleton gives shape,support and protection to the body and provides a means of locomotion.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Understanding endoskeletons in biology and their relevance to humanoid robot structural design. Exploring internal support structures in nature and robotics.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://salvius.org/images/vectors/head.svg" /><media:content medium="image" url="https://salvius.org/images/vectors/head.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>