The resilient robotics framework
See the code
Beam Bots is a framework for building resilient robotics projects in Elixir.
bb is the core of a wider ecosystem of packages — servo drivers, sensors,
inverse kinematics solvers, visualisation tooling and more — that work together
so you can build your robot with exactly the features you want. Browse the full
list at github.com/beam-bots.
~u sigil with automatic SI conversion (e.g., ~u(90 degree), ~u(0.1 meter))defmodule MyRobot.Robot do
use BB
topology do
link :base_link do
joint :shoulder do
type(:revolute)
origin do
z(~u(0.1 meter))
end
axis do
end
limit do
effort(~u(10 newton_meter))
velocity(~u(1 radian_per_second))
end
link :upper_arm do
joint :elbow do
type(:revolute)
origin do
z(~u(0.3 meter))
end
axis do
roll(~u(-90 degree))
end
limit do
effort(~u(10 newton_meter))
velocity(~u(1 radian_per_second))
end
link :forearm do
end
end
end
end
end
end
end
# Start the supervision tree
{:ok, _pid} = BB.Supervisor.start_link(MyRobot.Robot)
# Compute forward kinematics
robot = MyRobot.Robot.robot()
positions = %{shoulder: :math.pi() / 4, elbow: 0.0}
{x, y, z} = BB.Robot.Kinematics.link_position(robot, positions, :forearm)
# Export to URDF
mix bb.to_urdf MyRobot.Robot -o robot.urdf
Guided introduction to Beam Bots:
Task-oriented guides for common operations:
Understanding the architecture:
Core functionality is implemented. The companion packages that build on bb
live alongside it at github.com/beam-bots,
and proposals tracks planned features.
If your project uses Igniter:
mix igniter.install bb
This will:
{YourApp}.Robot module with arm/disarm commands and a base linkTo add additional robots later:
mix bb.add_robot --robot MyApp.Robots.SecondRobot
Add Beam Bots to your dependencies:
def deps do
[
{:bb, "~> 0.1"}
]
end
Then create a robot module manually (see Your First Robot).
This project is made possible by the generous support of our sponsors:
Elixir
100.0%
The resilient robotics framework
See the code
Beam Bots is a framework for building resilient robotics projects in Elixir.
bb is the core of a wider ecosystem of packages — servo drivers, sensors,
inverse kinematics solvers, visualisation tooling and more — that work together
so you can build your robot with exactly the features you want. Browse the full
list at github.com/beam-bots.
~u sigil with automatic SI conversion (e.g., ~u(90 degree), ~u(0.1 meter))defmodule MyRobot.Robot do
use BB
topology do
link :base_link do
joint :shoulder do
type(:revolute)
origin do
z(~u(0.1 meter))
end
axis do
end
limit do
effort(~u(10 newton_meter))
velocity(~u(1 radian_per_second))
end
link :upper_arm do
joint :elbow do
type(:revolute)
origin do
z(~u(0.3 meter))
end
axis do
roll(~u(-90 degree))
end
limit do
effort(~u(10 newton_meter))
velocity(~u(1 radian_per_second))
end
link :forearm do
end
end
end
end
end
end
end
# Start the supervision tree
{:ok, _pid} = BB.Supervisor.start_link(MyRobot.Robot)
# Compute forward kinematics
robot = MyRobot.Robot.robot()
positions = %{shoulder: :math.pi() / 4, elbow: 0.0}
{x, y, z} = BB.Robot.Kinematics.link_position(robot, positions, :forearm)
# Export to URDF
mix bb.to_urdf MyRobot.Robot -o robot.urdf
Guided introduction to Beam Bots:
Task-oriented guides for common operations:
Understanding the architecture:
Core functionality is implemented. The companion packages that build on bb
live alongside it at github.com/beam-bots,
and proposals tracks planned features.
If your project uses Igniter:
mix igniter.install bb
This will:
{YourApp}.Robot module with arm/disarm commands and a base linkTo add additional robots later:
mix bb.add_robot --robot MyApp.Robots.SecondRobot
Add Beam Bots to your dependencies:
def deps do
[
{:bb, "~> 0.1"}
]
end
Then create a robot module manually (see Your First Robot).
This project is made possible by the generous support of our sponsors:
Elixir
100.0%