Files
drawing-robot-ros2/README.md
2023-03-09 13:44:47 +02:00

279 lines
8.2 KiB
Markdown

# 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
``` sh
bash .docker/build.bash
```
### Run built container
``` sh
bash .docker/run.bash
```
If active changes are being made, run:
``` sh
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
``` sh
./rebuild.sh
```
``` sh
source src/install/local_setup.bash
```
## Running
### RobotController
One of the following RobotControllers should be started:
DummyController echoes Motion messages to the terminal.
``` sh
ros2 run robot_controller dummy_controller
```
AxidrawController draws on the axidraw robot
``` sh
ros2 launch axidraw_controller axidraw_controller
```
This starts the simulated lite6
``` sh
ros2 launch lite6_controller lite6_gazebo.launch.py
```
This runs the real lite6
``` sh
ros2 launch lite6_controller lite6_real.launch.py
```
This runs the real lite6 without Rviz (can be run on headless device over ssh)
``` sh
ros2 launch lite6_controller lite6_real_no_gui.launch.py
```
### DrawingController
Once a RobotController is running, simultaneously (using tmux or another terminal) run
``` sh
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 |
|-------------------------------------|----------|
| <a> | no |
| <animate> | no |
| <animateMotion> | no |
| <animateTransform> | no |
| <circle> | no |
| <clipPath> | no |
| <defs> | no |
| <desc> | no |
| <discard> | no |
| <ellipse> | no |
| <feBlend> | no |
| <feColorMatrix> | no |
| <feComponentTransfer> | no |
| <feComposite> | no |
| <feConvolveMatrix> | no |
| <feDiffuseLighting> | no |
| <feDisplacementMap> | no |
| <feDistantLight> | no |
| <feDropShadow> | no |
| <feFlood> | no |
| <feFuncA> | no |
| <feFuncB> | no |
| <feFuncG> | no |
| <feFuncR> | no |
| <feGaussianBlur> | no |
| <feImage> | no |
| <feMerge> | no |
| <feMergeNode> | no |
| <feMorphology> | no |
| <feOffset> | no |
| <fePointLight> | no |
| <feSpecularLighting> | no |
| <feSpotLight> | no |
| <feTile> | no |
| <feTurbulence> | no |
| <filter> | no |
| <foreignObject> | no |
| <g> | yes |
| <hatch> | no |
| <hatchpath> | no |
| <image> | no |
| <line> | yes |
| <linearGradient> | no |
| <marker> | no |
| <mask> | no |
| <metadata> | no |
| <mpath> | no |
| <path> | partial |
| <pattern> | no |
| <polygon> | yes |
| <polyline> | yes |
| <radialGradient> | no |
| <rect> | no |
| <script> | no |
| <set> | no |
| <stop> | no |
| <style> | no |
| <svg> | no |
| <switch> | no |
| <symbol> | no |
| <text> | no |
| <textPath> | no |
| <title> | no |
| <tspan> | no |
| <use> | no |
| <view> | no |
And the following SVG path commands are supported:
| Command type | Supported | Unsupported |
|------------------------|-------------------|-------------|
| MoveTo | M, m | |
| LineTo | L, l, H, h, V, v | |
| Cubic Bézier Curve | C, c, S, s | |
| Quadratic Bézier Curve | | Q, q, T, t |
| Elliptical Arc Curve | | A, a |
| ClosePath | Z, z | |
## Axidraw concerns
## xArm concerns
TODO make TCP height diagram
The following paths work, notic
## Creating compatible SVG images
https://github.com/visioncortex/vtracer
Use single layer (g) SVGs
## ROS2 rpi4
https://github.com/ros-realtime/ros-realtime-rpi4-image/releases
After unpacking the tar file, flash it to sd card.
Log in with "ubuntu:ubuntu".
``` sh
sudo -i
loadkeys fi
passwd ubuntu #change from default 'ubuntu' to '1234'
apt-mark hold $(uname -r) linux-firmware u-boot-rpi u-boot-tools #prevent kernel updates
apt-mark hold libraspberrypi-bin libraspberrypi-dev libraspberrypi-doc libraspberrypi0
apt-mark hold raspberrypi-bootloader raspberrypi-kernel raspberrypi-kernel-headers
apt update && apt upgrade
apt install ros-dev-tools
```
``` sh
adduser ubuntu dialout #give access to serial devices (axidraw)
```
### Misc commands
``` sh
apt update
apt install git tmux python3-colcon-ros python3-pip ros-humble-moveit
```
``` sh
apt install colcon
apt search colcon
apt install ros-dev-tools
vi /etc/issue
systemctl stop wpa_supplicant
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
wpa_cli
ip link set wlan0 up
wpa_cli
dhclient wlan0
ping google.com
apt install ros-galactic-moveit
apt install xauth
vim /etc/ssh/sshd_config
systemctl restart sshd
colcon build --packages-select robot_interfaces robot_controller
```
sets priority for wlan0; uses it as gateway if connected.
/etc/netplan/50-cloud-init.yaml
``` sh
network:
wifis:
wlan0:
dhcp4: true
dhcp4-overrides:
route-metric: 100
optional: true
access-points:
"SSID":
password: "PSK"
ethernets:
eth0:
dhcp4: true
dhcp4-overrides:
route-metric: 200
optional: true
version: 2
```
/etc/ssh/sshd:
```
X11Forwarding yes
X11UseLocalhost no
```
### Access xarm webUI from different network
If connected to the pi on 192.168.22.199, one can forward the webUI to localhost:8080 with the following:
``` sh
ssh -L 8080:192.168.1.150:18333 ubuntu@192.168.22.199
```
## Moveit2 docs
``` sh
git clone https://github.com/ros-planning/moveit2.git
cd moveit2
git checkout humble
sudo apt-get install doxygen graphviz
DOXYGEN_OUTPUT_DIRECTORY=docs doxygen
firefox docs/index.html
```