From d13f37efef99d39595a844c63e89428ab7abdc25 Mon Sep 17 00:00:00 2001 From: Naveen Michaud-Agrawal Date: Mon, 17 Jul 2023 22:52:58 -0400 Subject: Split out apriltag detection --- virtual-programs/apriltags.folk | 18 ++++++++++++++++++ virtual-programs/camera.folk | 11 ----------- 2 files changed, 18 insertions(+), 11 deletions(-) create mode 100644 virtual-programs/apriltags.folk (limited to 'virtual-programs') diff --git a/virtual-programs/apriltags.folk b/virtual-programs/apriltags.folk new file mode 100644 index 00000000..265610bb --- /dev/null +++ b/virtual-programs/apriltags.folk @@ -0,0 +1,18 @@ + +source pi/AprilTags.tcl + +AprilTags::init + +When the camera frame is /grayFrame/ { + set aprilTime [time { + set tags [AprilTags::detect $grayFrame] + }] + Commit { + Claim the AprilTag time is $aprilTime + + foreach tag $tags { + Claim tag [dict get $tag id] has center [dict get $tag center] size [dict get $tag size] + Claim tag [dict get $tag id] has corners [dict get $tag corners] + } + } +} diff --git a/virtual-programs/camera.folk b/virtual-programs/camera.folk index b865392e..919519fe 100644 --- a/virtual-programs/camera.folk +++ b/virtual-programs/camera.folk @@ -7,9 +7,7 @@ namespace eval ::Camera { On process { source pi/Camera.tcl - source pi/AprilTags.tcl Camera::init 1280 720 - AprilTags::init puts "Camera tid: [getTid]" @@ -17,20 +15,11 @@ On process { set cameraTime [time { set grayFrame [Camera::grayFrame] }] - set aprilTime [time { - set tags [AprilTags::detect $grayFrame] - }] Commit { Claim the camera frame is $grayFrame Claim the camera time is $cameraTime - Claim the AprilTag time is $aprilTime - - foreach tag $tags { - Claim tag [dict get $tag id] has center [dict get $tag center] size [dict get $tag size] - Claim tag [dict get $tag id] has corners [dict get $tag corners] - } } Step } -- cgit v1.2.3 From e222798c685893c1b9d6a5d01a7c29c47a3f7118 Mon Sep 17 00:00:00 2001 From: Naveen Michaud-Agrawal Date: Mon, 17 Jul 2023 23:36:15 -0400 Subject: Add laser detection --- virtual-programs/laser.folk | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 virtual-programs/laser.folk (limited to 'virtual-programs') diff --git a/virtual-programs/laser.folk b/virtual-programs/laser.folk new file mode 100644 index 00000000..af7fe44f --- /dev/null +++ b/virtual-programs/laser.folk @@ -0,0 +1,15 @@ + +source vendor/blobdetect/blobdetect.tcl + +When the camera frame is /grayFrame/ { + set blobTime [time { + set threshold 250 + set blobs [::BlobDetect::detect $grayFrame $threshold] + }] + Commit { + Claim the blob detection time is $blobTime + foreach blob $blobs { + Claim laser blob [dict get $blob id] has center [dict get $blob center] size [dict get $blob size] + } + } +} -- cgit v1.2.3 From 63655a3e2ab2c56c5cb9403a43d2a1d003f1a54a Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Tue, 18 Jul 2023 16:15:34 -0400 Subject: Temporarily disable laser detect --- virtual-programs/laser.folk | 1 + 1 file changed, 1 insertion(+) (limited to 'virtual-programs') diff --git a/virtual-programs/laser.folk b/virtual-programs/laser.folk index af7fe44f..e71cccc8 100644 --- a/virtual-programs/laser.folk +++ b/virtual-programs/laser.folk @@ -1,3 +1,4 @@ +return source vendor/blobdetect/blobdetect.tcl -- cgit v1.2.3 From 0549779f3070f239010c43d6aad9c484e10076d6 Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Tue, 18 Jul 2023 16:15:50 -0400 Subject: WIP: Move apriltag detector into subprocess --- virtual-programs/apriltags.folk | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'virtual-programs') diff --git a/virtual-programs/apriltags.folk b/virtual-programs/apriltags.folk index 265610bb..461d365a 100644 --- a/virtual-programs/apriltags.folk +++ b/virtual-programs/apriltags.folk @@ -1,18 +1,21 @@ +On process { + source pi/AprilTags.tcl + AprilTags::init -source pi/AprilTags.tcl + Wish $::thisProcess receives statements like \ + [list /someone/ claims the camera frame is /grayFrame/] -AprilTags::init + When the camera frame is /grayFrame/ { + set aprilTime [time { + set tags [AprilTags::detect $grayFrame] + }] + Commit { + Claim the AprilTag time is $aprilTime -When the camera frame is /grayFrame/ { - set aprilTime [time { - set tags [AprilTags::detect $grayFrame] - }] - Commit { - Claim the AprilTag time is $aprilTime - - foreach tag $tags { - Claim tag [dict get $tag id] has center [dict get $tag center] size [dict get $tag size] - Claim tag [dict get $tag id] has corners [dict get $tag corners] + foreach tag $tags { + Claim tag [dict get $tag id] has center [dict get $tag center] size [dict get $tag size] + Claim tag [dict get $tag id] has corners [dict get $tag corners] + } } } } -- cgit v1.2.3 From f620554851b11d1259e8959ac5834de5949dc060 Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Thu, 20 Jul 2023 15:14:04 -0400 Subject: camera: Use forever --- virtual-programs/camera.folk | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'virtual-programs') diff --git a/virtual-programs/camera.folk b/virtual-programs/camera.folk index 919519fe..b73398f5 100644 --- a/virtual-programs/camera.folk +++ b/virtual-programs/camera.folk @@ -11,16 +11,13 @@ On process { puts "Camera tid: [getTid]" - while true { + forever { set cameraTime [time { set grayFrame [Camera::grayFrame] }] - Commit { - Claim the camera frame is $grayFrame - Claim the camera time is $cameraTime + Claim the camera frame is $grayFrame } - Step } } -- cgit v1.2.3 From 203c6f5343e082cfa2ae9a47199ebfcd3f882ff6 Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Thu, 20 Jul 2023 15:14:51 -0400 Subject: Fix sharing behavior of AprilTag detector --- virtual-programs/apriltags.folk | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'virtual-programs') diff --git a/virtual-programs/apriltags.folk b/virtual-programs/apriltags.folk index 461d365a..75622fcd 100644 --- a/virtual-programs/apriltags.folk +++ b/virtual-programs/apriltags.folk @@ -2,8 +2,22 @@ On process { source pi/AprilTags.tcl AprilTags::init + # TODO: Clean this up. We retract these so that we don't bounce + # statements back to the main Folk process that it sends us. + Retract /anyone/ wishes $::thisProcess shares all wishes + Retract /anyone/ wishes $::thisProcess shares all claims Wish $::thisProcess receives statements like \ [list /someone/ claims the camera frame is /grayFrame/] + Wish $::thisProcess shares statements like \ + [list /someone/ wishes /process/ receives statements like /pattern/] + Wish $::thisProcess shares statements like \ + [list /someone/ claims tag /tag/ has center /center/ size /size/] + Wish $::thisProcess shares statements like \ + [list /someone/ claims tag /tag/ has corners /corners/] + Wish $::thisProcess shares statements like \ + [list /someone/ claims the AprilTag time is /aprilTime/] + Wish $::thisProcess shares statements like \ + [list /someone/ claims $::thisProcess has pid /pid/] When the camera frame is /grayFrame/ { set aprilTime [time { -- cgit v1.2.3 From ceac713ed90a174ad6f575056e8bf405c51ba978 Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Fri, 21 Jul 2023 10:50:49 -0400 Subject: Small optimization to label --- virtual-programs/label.folk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'virtual-programs') diff --git a/virtual-programs/label.folk b/virtual-programs/label.folk index bfc67ada..da149cbb 100644 --- a/virtual-programs/label.folk +++ b/virtual-programs/label.folk @@ -1,7 +1,7 @@ When /thing/ has region /region/ { lassign [region centroid $region] x y - set width [region width $region] - set height [region height $region] + # set width [region width $region] + # set height [region height $region] set radians [region angle $region] When the collected matches for [list /someone/ wishes $thing is labelled /text/] are /matches/ { -- cgit v1.2.3 From 8bad41ae77ec2365bc349fb2b952c947b39bd77b Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Fri, 21 Jul 2023 10:58:39 -0400 Subject: Gate AprilTag virtual program on whether is laptop --- virtual-programs/apriltags.folk | 2 ++ 1 file changed, 2 insertions(+) (limited to 'virtual-programs') diff --git a/virtual-programs/apriltags.folk b/virtual-programs/apriltags.folk index 75622fcd..01377b78 100644 --- a/virtual-programs/apriltags.folk +++ b/virtual-programs/apriltags.folk @@ -1,3 +1,5 @@ +if {$::isLaptop} return + On process { source pi/AprilTags.tcl AprilTags::init -- cgit v1.2.3 From 4db3c7b7c63f2ccba662f1d769d15696578fe097 Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Sun, 23 Jul 2023 11:32:36 -0400 Subject: Revert "Calculate image slice from bottom left corner to top" This reverts commit 29d621df6f7808c99a1fe3dac8599de8055f633e. --- virtual-programs/images.folk | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'virtual-programs') diff --git a/virtual-programs/images.folk b/virtual-programs/images.folk index 89dbcb23..ae40769a 100644 --- a/virtual-programs/images.folk +++ b/virtual-programs/images.folk @@ -93,12 +93,10 @@ When /someone/ wishes /p/ has camera slice & \ the camera frame is /f/ & \ /p/ has region /r/ { - # okay, need to get top & bottom - set top [region top $r] - lassign [lindex $r 0] a b c d - - lassign [projectorToCamera $top] px0 py0 - lassign [projectorToCamera $a] px1 py1 + # Convert region in projector coordinates to camera + lassign [regionToBbox $r] minX minY maxX maxY + lassign [projectorToCamera [list $minX $minY]] px0 py0 + lassign [projectorToCamera [list $maxX $maxY]] px1 py1 # Clamp to image bounds set x [expr {int(max(min($px0, $px1), 0))}] -- cgit v1.2.3 From 158fd4e4dbeee5b439c5db61a477b387d757e6ce Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Sun, 23 Jul 2023 11:52:54 -0400 Subject: Shrink camera slice --- virtual-programs/images.folk | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'virtual-programs') diff --git a/virtual-programs/images.folk b/virtual-programs/images.folk index ae40769a..6846975e 100644 --- a/virtual-programs/images.folk +++ b/virtual-programs/images.folk @@ -117,6 +117,8 @@ When when /p/ has camera slice /slice/ /lambda/ with environment /e/ { # Display a camera slice When /someone/ wishes /p/ displays camera slice /slice/ & /p/ has region /r/ { set origin [lindex $r 0 0] - set scale [expr {$Display::WIDTH / $Camera::WIDTH}] - Wish display runs [list Display::image {*}$origin $slice $scale] + # set scale [expr {$Display::WIDTH / $Camera::WIDTH}] + # Use 1x scale instead of $scale so the projected tag doesn't redetect. + # TODO: Mask the tag out? + Wish display runs [list Display::image {*}$origin $slice 1] } -- cgit v1.2.3