Inkscape/FreeCAD/CNC Router "Hello World"

Hello!

I recently got a CNC router, and I’m seeking to document & perform the process of getting “Hello World” (“Hola Mundo”, as I’m in Colombia) etched into a piece of wood.

The high level process is:

(1) Draw “Hello world” / “Hola mundo” onto a piece of paper using a thick permanent marker

(2) Take a picture of the text, and vectorize it (anyone have suggestions on good, open source vectorizing tools?)

(3) Cleanup in Inkscape, export to SVG

[ This is where I need your help ]

(4) Import SVG into FreeCAD

(5) Generate the CAD & CAM objects, design, settings etc

(6) Export from FreeCAD to G-code

(7) Use UGS (Universal G-code Sender) to send & operate the CNC router, and carve the shapes into wood.


The past several nights, I’ve been reading about FreeCAD, watching tutorials - and I just haven’t found a video or text tutorial which has this simple “Here’s a (2D) shape in SVG, and here’s how to etch it into wood”. Perhaps you know such a guide?

What I’d love to do is pair (as in pair-program, pair-collaborate) with someone, who could walk me through this process, so I can get my “MVP” done, and also document it (screenshots, video, etc), so others can benefit too.

Hopefully some folks can kindly share their workflow & steps here, along with helpful guides/videos.

If you’re interested in the pairing mission, I’ll pay you for your time, and hopefully we can create something useful. You can message me directly.

Thank you!

// JRO

1 Like

There are a number of links found when I searched for “SVG import sketcher” so it’s likely just a matter of some more research. example: https://www.youtube.com/watch?v=A5VU6zehTdI

I would also tend to use GIMP to clean up a photo before using Inkscape edge detection to “vectorize” a drawing. I’ve also imported the image into FreeCAD’s Sketcher itself and then use sketcher to outline the lettering, extrude, manipulate and create the 3D design.

I opted for using Kiri:Moto at the time because I didn’t know of the FreeCAD CAM tool for generating toolpaths. There are likely lots of tutorials on the CAM toolpath generator for you to browse. On youtube, if Mango Jelly and/or Joko Engineering cover it then that’s where I would go first.

Also can’t help with UGS since I used CNCjs at the time, 4 years ago. It should be a great learning experience for you but can get overwhelming since there are so many options. Not that I’d want to push anyone away from learning CAD and CAM export using FreeCAD but there is also the F-engrave tool for V carving text.

http://www.scorchworks.com/Fengrave/fengrave.html

3 Likes

I’d echo @dougl’s recommendation of Kiri:Moto for this kind of work. I used it for an unusual object that gave FreeCAD (of the time, this was a few years ago!) fits and it did a great job.

Inkscape has excellent vectorising tools; check out Path->Trace Bitmap

LaserWeb can vectorise too.

3 Likes


“Hola Mundo” (“Hello World”) v2025-01-27

Designed using Kiri-Moto - thanks for the suggestion, that tool is cool :sunglasses:

Accomplishments & Issues

  • Created text using Inkscape, converted the text to path, saved as SVG
  • Imported SVG into Kiri-Moto. Wow! 3D text!
  • In Kiri-Moto, used a “Rough” operation, as that was the only operation where I could get it to carve the text. I couldn’t figure out Pocket
  • Issues: The design tool drilled out the holes in letters like “e”, “a”, “d”, “o”. In fact, it went extra deep on those holes - instead of (what I desired) leaving those areas un-carved. Anyone know why that is?
  • Issues: Confused on the relationships between stock depth, Z anchor (I did ''middle"), Origin Top, the height of the 3D text/object, and - on my CNc machine - where it’s zero’d. Definitely need to review the KM documentation & watch videos - if anyone has advice, please share!
  • Exported G-code file, and loaded it into Universal G-code sender (UGS).
  • Issue: I still must run UGS as root in order to connect to the router. I confirmed that my user is in the dialout group - thoughts?
  • I did several dry runs of the G-code/router, just to see what it would do - I zero’d it way higher than my wood board - just to keep it safely away. I ended up slowing down the feed rate by half, because it looked way too fast for the pine board / bit I’ve got - but was totally guessing. The dry run looked ok
  • Issue: The generated G-code file didn’t start up the spindle. I looked up codes on the internet, and saw the code in one of the manufacturer’s test files: “M3 S5000”. That turned on the spindle to 1000 RPM
  • Z-probed & zero’d the Z axis
  • (Drum-roll)
  • Pressed “Play” on UGS, and the router got to work!
  • Issue: I randomly guessed/chose a bit - evidently not an appropriate one. The edges of the cuts left tons of shredded wood. I’m learning about the different types of bits - guessing this should have been a down-cut…?
  • Timing: 20:30 minutes

How exciting!

For the next mission, I’ll try to figure out the SVG/hole drilling issue in Kiri-Moto, and try out a different bit.

Thanks for everyone’s suggestions, ideas!

// JRO

4 Likes

@stewart has a forum for KM support at https://forum.grid.space/

There, you can export a .kmz file of your project and post it on the forum there to ask for help with selecting the right operations.

Down cut can help with fuzzy edges, but not all wood acts the same. Pine can have a tendency for strings. Some wood has a tendency to tear out.

V bits are common for engraving text in wood. They let you get sharp inside corners on text.

2 Likes

Would you be willing to post the .svg file here? I think the removal of the letter centers is an artifact of how you have the paths grouped and combined…

For your permissions problem; what do you see if you look at the permissions, owner and group on the device driver specified in your software (usually /dev/ttyUSB0. You need to have read/write access to that file node.

4 Likes

(1) Attached is the SVG file, as saved regularly (as opposed to exported) by Inkscape.

(2) Permissions information about /dev/ttyACM0 which is my CNC device.

jro_cambria@iguana:~$ ls -al /dev/ttyACM0 
crw-rw---- 1 root dialout 166, 0 Jan 30 11:13 /dev/ttyACM0

jro_cambria@iguana:~$ stat /dev/ttyACM0 
  File: /dev/ttyACM0
  Size: 0         	Blocks: 0          IO Block: 4096   character special file
Device: 0,5	Inode: 923         Links: 1     Device type: 166,0
Access: (0660/crw-rw----)  Uid: (    0/    root)   Gid: (   20/ dialout)
Access: 2025-01-30 11:13:46.884325501 -0500
Modify: 2025-01-30 11:13:46.884325501 -0500
Change: 2025-01-30 11:13:46.884325501 -0500
 Birth: 2025-01-30 11:13:46.876325530 -0500


Here is my user group file. I manually added my username jro_cambria to the dialout group. I am thinking that may be the problem, because when I run groups in my terminal, I don’t see dialout group there…

cat /etc/group
...
dialout:x:20:jro_cambria
...

Here’s my current group membership:

jro_cambria@iguana:~$ groups
jro_cambria users

Who’s got knowledge on users & groups on Debian Linux?

For starters, a Debian Linux shell/terminal question -
In most documentation, users are able to run commands like usermod, however, when I run them, I’ve got to run it from the whole path (example: /user/sbin/usermod). I am aware that I can add this to my terminal shell’s path - I am curious though, did I miss/mess up a default somewhere?

I just ran /usr/sbin/usermod -a -G dialout jro_cambria and I am still not seeing my group. I restarted the terminal, but not the computer (that’s a next step after this post…)

UPDATE: I restarted the computer, and now my user is a member of dialout. I ran Universal G-code Sender (UGS) and was successfully able to connect to the CNC router - no longer requiring root user. Issue resolved - thank you!

Debugging the SVG 2D → causing Kiri-moto to put “drill holes” is my current issue.

Meanwhile, some next steps will be to

  • Hand-draw a “Hello World” / “Hola Mundo” (done)
  • Photograph the drawing (done)
  • Vectorize the drawing (next: Will attempt with Inkscape)
  • Add project files to source control, and share publicly in a repository (Codeberg) - will make it easier to get help, and expert contributors
  • Import vector graphic of hand-drawn “Hola Mundo” into Kiri:Moto, and create 3D carve out
  • CNC it, trying a different bit

Later missions will involve

  • Setting up a spoil-board
  • Cutting a shape
  • Carving design into a hardwood (example: oak, called “roble” en español)

Thanks for the assistance and camaraderie on this mission.

hola-mundo_2025-01-27_1350_paths
// JRO

I expect that will work.

You need to start a new ‘login session’, restarting a terminal just creates a new process from the existing login session…
If you are logged in graphically you need to exit the GUI then login again.
On the terminal exiit the shell back to the console login.

Be wary of ‘old’ advice and tricks for dealing with things like adding groups, it’s not as simple as adding the relevant entries to /etc files anymore.
There are specific commands ‘usermod’, ‘useradd’ etc… for this that will do it properly. but… not all distros are exactly the same in the names and syntax of commands…

My advice for any modern linux distro is to find the ‘official’ documentation for the release you have. Adding and modifying users is something that is well documented in all but the most cranky of distros…

1 Like

Thankyou!

I see absolutely zero problems with it, in fact it is very clean and totally what I would be aiming for when I generate a SVG.

I had wondered if the centers of the ‘o’ and ‘a’ were separate paths, which might have caused the ‘double cut’ you see. But they are correctly part of the letters path. And each letter is it’s own path, this is great.

This does maake me think the issue is in Kiri-Moto; it appears to be interpreting the inner paths as a seperate path and then ‘adding’ them to the outline? This may actually be a settings/option problem. Others need to advise on that…

For what it is worth; your file imports perfectly in LaserWeb and the mill-pocket job on it produces the correct paths:


The black line is the 2d tool ‘path’, the red line shows the actual path of the cutting bit tip.

(note; I have margin set to -1, without this the thinner parts of the letters (that are thinner than 3mm!) do not get cut with a 3mm diameter tool. This obviously makes the letters ‘bolder’ when carved.

3 Likes

Thanks for checking out the SVG! Glad to hear it was OK - I may need to start a thread over at Kiri-Moro forums, as I’m certain this is a common situation.

As an aside for LaserWeb, I had considered trying it, but the install for Linux seemed a bit complicated (nodeJS is not my forte, and bringing up the frontend/backend server seemed a bit much; etc) - are the install instructions for Linux posted on site the most recent recommendations? I’m fine with getting my hands dirty, but trying to keep the “Yak barber WIP” to a manageable level. Thanks!

Unfortunately there are conflicting instructions; mostly my fault.

I prefer the direct nodeJS install method. Node support in distros is vastly improved from the time LW was developed. (I’m just dumping thoughts here, sorry)

  • All the modern mainstream linux distros have suitable nodejs & npm ports available… And you can run LW directly from that, and connect via a web browser for the UI. It really is a very simple commandline job to run up a copy of lw.comm-server. (you dont need to download or install laserweb itself, the comm-server contains a precompiled copy of laserweb)
  • It doesnt even look that hard to do this on Windows these days, node has proper installers, and then you can run node from powershell, MS themselves describe this
  • All other methods involve basically wrapping node in another layer (eg: node in docker, or node in electron) and then serving that. Which is kinda pointless imho. and just adds a second compatibility/maintenence layer to support.

Thanks @easytarget . I’ll give it a try.

I started a forum topic at Kiri:Moto forums, asking how to setup Kiri:Moto to not drill out the holes in text (examples: O, A):

Design files are available on Codeberg source code repository:

1 Like

Got your message and GridSpace forum post. The roughing op is clearing the space above the letters then the insides. You can see this in the layers (use the slider). So in this case for just a cutout, you want to use trace or outline operations. But there are subtleties to both. And I just fixed a bug in trace going out in today’s release. I will add more more information to your GridSpace forum post.

5 Likes

Thank you @stewart. I’ll try those operations, and report back how it goes.

My understanding from briefly testing out Trace last time, was that it would trace the shape with a tool path, but I didn’t get the impression it would clear the “body” of the shape within it. Do I have that right?

I’ll check back when you’ve deployed the latest change, and can check it out.

PS @stewart since
you mentioned wanting to create more video tutorials, and I’m hoping to turn this Hola Mundo / Hello World into a newbie friendly, “CNC boot-up” tutorial, we might share some common goals - happy to help record/edit some vids. Message me if interested.

// JRO

1 Like

“trace” and “pocket” are really selection criteria. but both can clear the bounded area. trace has the option to only cut the trace, though. there are many permutations of settings.