drawing-robot-ros2
This repository contains ROS2 packages which make up a system used for drawing SVG images on different robots. These packages are in 'src/'.
Documentation and build scripts for the entire project are at the top level.
The simplest way to run the project currently is by building and running the docker container.
Docker
Build container
bash .docker/build.bash
Run built container
bash .docker/run.bash
If active changes are being made, run:
bash .docker/devel.bash
This will mount the host drawing-robot-ros2 directory in the container at src/drawing-robot-ros2.
TODO Building locally
Requirements:
- python3-pip
- python3-pil.imagetk
- ros-humble-moveit
- ros-humble-ros-gz
- ignition-fortress
./rebuild.sh
source src/install/local_setup.bash
Running
RobotController
One of the following RobotControllers should be started:
DummyController echoes Motion messages to the terminal.
ros2 run robot_controller dummy_controller
AxidrawController draws on the axidraw robot
ros2 launch axidraw_controller axidraw_controller
This starts the simulated lite6
ros2 launch lite6_controller lite6_gazebo.launch.py
This runs the real lite6
ros2 launch lite6_controller lite6_real.launch.py
This runs the real lite6 without Rviz (can be run on headless device over ssh)
ros2 launch lite6_controller lite6_real_no_gui.launch.py
DrawingController
Once a RobotController is running, simultaneously (using tmux or another terminal) run
ros2 run drawing_controller drawing_controller svg/test.svg
This will draw the svg image given as the last argument.
SVG compatibility info
Tested with SVG from the following programs
- Inkscape
- Inkpad
- Affinitydraw
- vtracer
Delimiter characters seem to vary somewhat. The following examples work: TODO ADD EXAMPLES OF SVG PATHS
The following SVG primitives are supported:
| Primitive | Support |
|---|---|
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| no | |
| yes | |
| no | |
| no | |
| no | |
| yes | |
| no | |
| no | |
| no | |
| no | |
| no | |
| partial | |
| no | |
| yes | |
| yes | |
| no | |
| no | |
| <script> | no |
| no | |
| no | |
| <style> | no |
| no | |
| no | |
| no | |
| no | |
| no | |