Designing a new robot neck joint

No comments:

This weekend I finished up the new neck joint for Salvius. After traveling around last summer with the robot it quickly became apparent that a few modifications needed to be made. The main problem that I was facing was that the neck was too unstable to support the robot's head. As a result the head wobbled around quite a bit during transport and this led to some of the joints and connectors becoming damaged.

The new neck design I needed to create had two main requirements. First, it needed to fully support the weight of the robot's head. Second, I the new neck should allow the head to be easily detachable. I added the second design parameter for the purpose of making it easier for my self to disassemble the robot for transport and development when needed.

To accomplish this, I moved the universal joint in the robot's neck, which allows for left, right, forward and backwards tilting of the head, closer to the back of the robot. By increasing the distance between the universal joint and the linear supports that move the head I was able to improve its stability. The second major change I made was that I moved the neck rotation servo from the base of the neck, up into the head itself. This alteration was to help ensure a more modular design of the head and neck. Last, a metal axle with new bearings was added to the top of the universal joint to ensure a smooth movement as the neck servo rotates the head from side to side.

The new neck was finished just in time for Salvius to appear for a visit to the Tech Foundry for a talk about robotics.

Installing PIP on the Intel Edison

The Intel Edison comes ready to work with Python, but most Python developers would prefer to have access to PIP for managing their installed python packages. I've recently gone through the process of installing PIP on the Intel Edison and wanted to post the instructions for anyone who wants to do the same.

Connect to the Edison

Start by connecting to the Edison through the serial port. I'm running Ubuntu, hence the sudo screen.

sudo screen /dev/ttyUSB0 115200

Then you will want to make sure that your Edison is connected to the internet.

configure_edison --wifi

You will have to wait a few seconds, then select your network and enter your password.

Add Third Party Libraries

Intel Edison is powered by Yocto but pip is not in the official repositories, therefore we need to add the unofficial repositories. We began getting the latest Intel IoT Developer Kit libraries.

echo "src intel-iotdk" > /etc/opkg/intel-iotdk.conf

Begin by adding the repositories using vi.

vi /etc/opkg/base-feeds.conf

Add the following three lines:

src/gz all
src/gz edison
src/gz core2-32

Save and close the file. Then update the package list.

opkg update

PIP is now installed, however it requires setuptools to be installed before PIP can install any Python packages. The setuptools package is now included with the latest version of pip. To upgrade pip to the latest version you can now run

pip install --upgrade pip

Salvius gives a thumbs up to students at Tech Foundry

Students from the Tech Foundry worked to build a pair of robotic hands for Salvius at this weekends workshop. While working, students learned that the length of each digit in a finger follows the pattern of a Fibonacci sequence. The Fibonacci sequence occurs quite commonly in nature, however the significance of this pattern in the human hand is that it allow the fingers to curl into a fist shape which is why human hands are good at using a wide variety of tools. In addition, it was shown that the sum of the length of the distal, intermediate and proximal phalanges in the little finger equal the length of those in the thumb. This creates symmetry between these two fingers and improves the hand's ability to pick up small objects. By design, each finger has four degrees of freedom, except for the thumb which has five due to the added complexity of its saddle joint. Normally each finger has an additional three degrees of freedom, two for extension and flexion and one for abduction and adduction.

Salvius has been built using readily available materials and the design for the hands is no exception. Pens donated from +Western New England University were repurposed to construct the structural components of each finger. The hands are designed to compliantly grip objects by changing shape to match a surface instead of requiring each finger digit to be positioned individually. As a result, the hands use fewer servos and less processing power to control.

Grinspoon Entrepreneurship Conference

Salvius traveled to the MassMutual Center today as a part of the Grinspoon Entrepreneurship Initiative. This is an annual event designed to provide networking opportunities to local businesses and startups. This year was the 10th annual event with approximately 700 attendees and over 60 different organizations exhibiting.

The event, funded by the Harold Grinspoon Foundation, helps to support entrepreneurs and small businesses by allowing participants to showcase and even sell their products. In addition, students who attend have the opportunity to meet and hear from people who have already started various business endeavors.
Salvius's exhibit was set up to show attendees the new linear actuator that was developed to support the weight of the robot at its ankles. A video of the actuator working is available on Salvius's YouTube channel. There was also a sample of the construction guide available, which showed all of the instructions required to create the same linear actuator out of recycled materials. The future release of the finished construction guide will provide a complete set of instructions on how to build robots like Salvius. For students interested in learning how to fund their own projects, the poster at the exhibit also had several panels showing how Salvius has been funded through crowdsourcing so far. In the past, Salvius has been featured in newspapers and also on the Make Magazine blog. It is extremely important for anyone who wants to get funding for their ideas to put that idea out there so that others can learn about it and contribute.
Later on in the day, Salvius met Harold Grinspoon himself. Grinspoon is responsible for founding the Entrepreneurship Initiative and helping many individuals in their various entrepreneurial pursuits. As a part of this conference, a panel of speakers was invited to talk about their own experiences creating projects and startups. As a part of this panel, I focused on some of the strategies that I have used to fund and develop Salvius. One of the biggest successes was when Salvius made the front page of the Wilbraham Times during a fundraiser to help build him legs.

Part of the reason that I started building Salvius was because I wanted to be able to get up on stage like this to try to inspire people to learn about new technologies and to show them how they can make their own ideas a reality. For anyone looking to launch their own projects, robot-related or otherwise, I felt that there was two, really important items to know. The first is that technology is the most effective tool you have to scale your ideas. You can reach far more people online than you can through any other form of communication. It doesn't matter if you have created the most amazing new gadget, if nobody knows about it then it can not succeed. The second item is that your community is the energy supply for whatever project or startup you are creating. Your friends, family, teachers and co-workers, will be the first place you will turn to get the what you need to kickstart your idea.

Learning from chatterbot

Last week I started writing code for an open-source chat-bot program. My goal was to create something that was basically an open-source version of Cleverbot. There isn't a lot out there to choose from if someone were looking for a program like this so I thought it would be a cool idea to create.

I wrote a program that could respond to user input by finding the closest match based on past conversations. This worked well when a match existed, however when presented with a completely new conversation the program failed to reply with coherent responses. The simplest solution seemed to be to provide the program with more "conversation experience" so that it had a greater selection to choose a response from. In order to improve the program's database of conversations, I hooked it up to CleverBot's api and set it loose chatting away with CleverBot.

The communication between my program and CleverBot was really interesting to observe. The conversation started out awful and was totally incoherent. However, after about ten iterations of the two talking back and forward, my program started replying with some of the new replies it had "learned" from talking with CleverBot. This progressed to the point where they could have an almost completely coherent conversation with each other. The only problem is that my program was still only able to provide replies from the selection of statements that CleverBot had said to it.

I decided to extend the range of where my program could attain conversation data from. This is where I made the mistake. I decided that Twitter would be the optimal source to have the program pull data from. Tweets are short an sentence-like and there is plenty of people on Twitter constantly creating new messages and conversations that are all publicly available. Naturally this seemed like the perfect source of conversation data.

salvius: "hey mc, doing well. Thanks for sharing nmirz new video."
cleverbot: "Are you a dog?"
salvius: "lmao are you a dog person?"
cleverbot: "Who was the who?"
salvius: "Who? Who is but a form following the function of what and what I am is a man in a mask."
cleverbot: "It's not your powers of observation I doubt, but merely the paradoxical nature of asking a masked man who is. But tell me, do you like music?"
salvius: "I like seeing movies."
cleverbot: "I wish I was The Mad Hatter."
salvius: "You're entirely bonkers. But I'll tell you a secret. All the best people are."

The conversations that resulted from pulling conversation data from Twitter's api was not what I had expected. On the positive side, my chat bot was now amazingly up to date with popular culture, even being converse about recent television events that had just premiered (such as the latest Dr. Who episode). Talking with Cleverbot, the two stopped speaking English at one point, preferring to address each other in French. While the responses that the program returned were relevant and coherent, they also were extremely prone to reflect what is probably best described as the chatter of the internet's most profound trolls. A plethora of profanity ensued regularly whenever the subject of a conversation began to have anything to do with sports, various actors, or politics.

For anyone who is interested, I have published the code for my chat bot program in a repository on GitHub,

Robot status page

No comments:
Check out the robot's latest metrics from Salvius on the status page.

After creating the status page, I wanted to write a little bit about the technologies that went into creating it. The status page has been on my to-do list for a while now. I had originally considered having it be hosted on the robot's server, however the issue with doing that is if the server crashes, there is no way to access the status page. By having the status page be a simple static webpage which pulls from a variety of data sources, it makes it nearly impervious to complete failure. Even if the GitHub pages on which it is currently hosted were to become unavailable, the status page could be opened locally in a browser.

Many websites that provide online services provide useful status pages to display information about the sites performance and any potential service outages or problems. The idea for this page was to create a decentralized location to view statistics and data published by the robot. A few examples of status pages provided by different online services are from sites such as GitHub (, Disqus ( and Travis CI (

Salvius has a number of hardware items that report their status to various online sources. Out of an interest to see all of these metrics in one convenient location I created my own status page which graphs data published by the robot.

The page is 100% responsive thanks to Bootstrap and Chart.js. Chart.js is a HTML5 canvas graphing library which has awesome support for different kinds of graphs. Although I only use the line graph, Chart.js supports a total of six different graph types to choose from.

The robot's status page pulls from a variety of data sources including Travis.CI, Sparkfun's data service, and Twitter. Travis.CI provides code testing services which are run each time a change is made to the robot's source code.
I was very interested to try out Sparkfun's data service which uses an application called Phant to host streams of various data submitted by a variety of networked electronic devices. Sparkfun is currently hosting data streams from sources such as homemade weather stations, GPS logging robots and more. The data service is meant to expose the reality of the Internet of Things. The Internet of Things is a term that came into recent popularity which describes the fact that there is more electronic devices connected to the internet then there is humans on the planet Earth. This has been true since 2008 when the number of devices connected to the internet reached 12 billion with the world population only at 6.7 billion. There is no end in sight to the ever increasing usefulness of interconnected technologies.

I'm planning to add graphs and metrics to this page as Salvius evolves and more sources of data become available. Idea submissions for graphs are welcome. Issue tracker:

Update: I switched from Chart.js to chartist.js (see for details). My main reason for switching was that chartist provides support for different aspect ratios which is useful when placing charts within responsive webpages. The second reason is that chartist also uses svg elements which has better browser support, and allows css animations to be applied to the graphs.