AxiBot

AxiBot is an alternative control interface for the AxiDraw pen plotting robot from Evil Mad Scientist Labs.

The design goals are:

  • Maintainable, hackable, codebase with light dependencies and the ability to run on a wide variety of embedded platforms.
  • Excellent motion control, tuned to eliminate undesirable plotting artifacts.
  • Easy command-line and programmatic use.

Contents

Quick Start

Install

The recommended installation method is pip.:

$ pip install axibot

You can also download a source package here directly from the Python Package Index.

AxiBot can be used via the command line or Python code. Tasks like real-time control or plotting from sources other than SVG will generally require writing Python code.

Plot a File

A number of example files are included in the source distribution. With a typical rollerball pen and a sheet of US Letter paper (8.5” x 11”) you can plot the world map example:

$ axibot plot examples/worldmap.svg

Command Line Usage

The main way to use AxiBot is the axibot command-line utility. Some examples are shown here. You can also see the utility itself for more info:

$ axibot -h

Manual Control

Issue single manual commands:

$ axibot manual pen_up 1000
$ axibot manual disable_motors

Enter a shell to use the same commands:

$ axibot manual
(axibot) pen_down 1000
(axibot) xy_move 400 400 100

File Estimation

Print info about the motion plan that would be used to plot an SVG file:

$ axibot info examples/worldmap.svg

Plotting

Actually plot an SVG file:

$ axibot plot examples/worldmap.svg

By default, this will use an interface interface to prompt certain user actions.

Web Server

To start a webserver for remote control of the AxiDraw:

$ axibot server

API Reference

class axibot.action.ABMove(da, db, duration)[source]
name = u'ab_move'
time()[source]
class axibot.action.Move[source]
class axibot.action.PenDownMove(delay)[source]
name = u'pen_down'
time()[source]
class axibot.action.PenUpMove(delay)[source]
name = u'pen_up'
time()[source]
class axibot.action.XYAccelMove(dx, dy, v_initial, v_final)[source]
name = u'xy_accel_move'
time()[source]
class axibot.action.XYMove(m1, m2, duration)[source]
name = u'xy_move'
time()[source]

Contributing

Patches and suggestions are strongly encouraged! GitHub pull requests are preferred, but other mechanisms of feedback are welcome.

A test suite is included. To run the tests, simply run in the top level of the repo:

$ tox

This will also ensure that the Sphinx documentation builds correctly, and that there are no PEP8 or Pyflakes warnings in the codebase.

Any pull requests should preserve all of these things.

Indices and Tables