diff --git a/.canon.yaml b/.canon.yaml new file mode 100644 index 0000000..900ab0f --- /dev/null +++ b/.canon.yaml @@ -0,0 +1,21 @@ +# This file provides project-level configuration for the canon dev environment utility. https://github.com/viamrobotics/canon +viam-motion-testing: + default: true + image_amd64: ghcr.io/viamrobotics/rdk-devenv:amd64-cache + image_arm64: ghcr.io/viamrobotics/rdk-devenv:arm64-cache + image_arm: ghcr.io/viamrobotics/rdk-devenv:armhf-cache + minimum_date: 2023-10-26T20:00:00.0Z + update_interval: 168h0m0s + user: testbot + group: testbot + persistent: true + +viam-motion-testing-antique: + image_amd64: ghcr.io/viamrobotics/antique2:amd64-cache + image_arm64: ghcr.io/viamrobotics/antique2:arm64-cache + image_arm: ghcr.io/viamrobotics/antique2:armhf-cache + minimum_date: 2023-10-26T20:00:00.0Z + update_interval: 168h0m0s + user: testbot + group: testbot + persistent: true diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..47c79a6 --- /dev/null +++ b/Makefile @@ -0,0 +1,43 @@ +BIN_OUTPUT_PATH = bin/$(shell uname -s)-$(shell uname -m) + +TOOL_BIN = bin/gotools/$(shell uname -s)-$(shell uname -m) + +GIT_REVISION = $(shell git rev-parse HEAD | tr -d '\n') +DATE_COMPILED?=$(shell date +'%Y-%m-%d') +COMMON_LDFLAGS = -X 'go.viam.com/rdk/config.GitRevision=${GIT_REVISION}' -X 'go.viam.com/rdk/config.DateCompiled=${DATE_COMPILED}' +ifdef BUILD_DEBUG + GCFLAGS = -gcflags "-N -l" +else + COMMON_LDFLAGS += -s -w +endif +LDFLAGS = -ldflags "-extld=$(shell pwd)/etc/ld_wrapper.sh $(COMMON_LDFLAGS)" + +default: static + +setup: + bash etc/setup.sh + +GO_FILES=$(shell find . -name "*.go") + +GOOS ?= $(shell go env GOOS) +GOARCH ?= $(shell go env GOARCH) + +tool-install: + GOBIN=`pwd`/$(TOOL_BIN) go install \ + github.com/golangci/golangci-lint/cmd/golangci-lint \ + github.com/AlekSi/gocov-xml \ + github.com/axw/gocov/gocov \ + gotest.tools/gotestsum \ + github.com/rhysd/actionlint/cmd/actionlint \ + golang.org/x/tools/cmd/stringer + +static: + rm -f $(BIN_OUTPUT_PATH)/gen_plan + rm -f $(BIN_OUTPUT_PATH)/plan_motion + VIAM_STATIC_BUILD=1 GOFLAGS=$(GOFLAGS) go build $(GCFLAGS) $(LDFLAGS) -o $(BIN_OUTPUT_PATH)/gen_plan ./cmd/gen_plan/main.go + VIAM_STATIC_BUILD=1 GOFLAGS=$(GOFLAGS) go build $(GCFLAGS) $(LDFLAGS) -o $(BIN_OUTPUT_PATH)/plan_motion ./cmd/plan_motion/main.go + +clean-all: + git clean -fxd +# include *.make + diff --git a/arm_scenes.go b/arm_scenes.go index 4b09d6f..cfe21c1 100644 --- a/arm_scenes.go +++ b/arm_scenes.go @@ -1,4 +1,4 @@ -package main +package scenes import ( "context" @@ -320,7 +320,7 @@ func scene5(ctx context.Context, logger logging.Logger) (*armplanning.PlanReques }, err } -func scene6(ctx context.Context, logger logging.Logger) (*armplanning.PlanRequest, error) { +func Scene6(ctx context.Context, logger logging.Logger) (*armplanning.PlanRequest, error) { cfg, err := scene5(ctx, logger) if err != nil { return nil, err diff --git a/base_scenes.go b/base_scenes.go index cb52c8a..fc95b44 100644 --- a/base_scenes.go +++ b/base_scenes.go @@ -1,4 +1,4 @@ -package main +package scenes import ( "bytes" diff --git a/cmd/gen_plan/main.go b/cmd/gen_plan/main.go new file mode 100644 index 0000000..a1ad60d --- /dev/null +++ b/cmd/gen_plan/main.go @@ -0,0 +1,48 @@ +package main + +import ( + "context" + "encoding/json" + "fmt" + "log" + "maps" + "os" + "slices" + "strconv" + + scenes "go.viam.com/motion-testing" + "go.viam.com/rdk/logging" +) + +func main() { + ctx := context.Background() + logger := logging.NewDebugLogger("scene6") + if len(os.Args) != 2 { + fmt.Printf("usage: %s \n", os.Args[0]) + os.Exit(1) + } + i, err := strconv.Atoi(os.Args[1]) + if err != nil { + fmt.Printf("usage: %s , err: %s\n", os.Args[0], err.Error()) + os.Exit(1) + } + sceneFn, ok := scenes.AllScenes[i] + keys := slices.Collect(maps.Keys(scenes.AllScenes)) + + if !ok { + fmt.Printf("usage: %s <%d-%d>, err: s\n", os.Args[0], slices.Min(keys), slices.Max(keys)) + os.Exit(1) + } + scene, err := sceneFn(ctx, logger) + if err != nil { + log.Fatal(err.Error()) + } + b, err := json.Marshal(scene) + if err != nil { + log.Fatal(err.Error()) + } + + if _, err = os.Stdout.Write(b); err != nil { + log.Fatal(err.Error()) + } +} diff --git a/cmd/plan_motion/main.go b/cmd/plan_motion/main.go new file mode 100644 index 0000000..15d10c7 --- /dev/null +++ b/cmd/plan_motion/main.go @@ -0,0 +1,46 @@ +package main + +import ( + "context" + "encoding/json" + "fmt" + "log" + "os" + + "go.viam.com/rdk/logging" + "go.viam.com/rdk/motionplan/armplanning" +) + +func main() { + ctx := context.Background() + logger := logging.NewDebugLogger("scene6") + if len(os.Args) != 2 { + fmt.Printf("usage: %s plan_request.json\n", os.Args[0]) + os.Exit(1) + } + // scene, err := scenes.Scene6(ctx, logger) + // if err != nil { + // log.Fatal(err.Error()) + // } + // b, err := json.Marshal(scene) + // if err != nil { + // log.Fatal(err.Error()) + // } + // + // if _, err = os.Stdout.Write(b); err != nil { + // log.Fatal(err.Error()) + // } + b, err := os.ReadFile(os.Args[1]) + if err != nil { + log.Fatal(err.Error()) + } + var planRequest armplanning.PlanRequest + if err := json.Unmarshal(b, &planRequest); err != nil { + log.Fatal(err.Error()) + } + + _, err = armplanning.PlanMotion(ctx, logger, &planRequest) + if err != nil { + log.Fatal(err.Error()) + } +} diff --git a/etc/ld_wrapper.sh b/etc/ld_wrapper.sh new file mode 100755 index 0000000..e397379 --- /dev/null +++ b/etc/ld_wrapper.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +# find the real linker, from env or same defaults as go +REAL_LD="${CC}" +if [[ -z "${REAL_LD}" ]]; then + REAL_LD="$(which gcc)" +fi +if [[ -z "${REAL_LD}" ]]; then + REAL_LD="$(which clang)" +fi + + +ARGS=("$@") + +# add for 32-bit arm builds +if [[ `uname -m` =~ armv[6,7]l ]]; then + ARGS+=("-Wl,--long-plt") +fi + +# exec early if we're not actually filtering anything +if [[ -z "${VIAM_STATIC_BUILD}" ]]; then + exec "$REAL_LD" "${ARGS[@]}" +fi + +if [[ `uname` != "Linux" ]]; then + echo "Static building is currently only supported under Linux" + exit 1 +fi + +# list of linker arguments to ignore +STRIPPED_ARGS="-g -O2" + +# list of arguments to prefix with -Bstatic +STATIC_ARGS="-lx264 -lnlopt -lstdc++" + +# add explicit static standard library flags +FILTERED=("-static-libgcc" "-static-libstdc++") +# Loop through the arguments and filter +for ARG in "${ARGS[@]}"; do + if [[ "${STRIPPED_ARGS[@]}" =~ "${ARG}" ]]; then + # don't forward the arg + : + elif [[ "${STATIC_ARGS[@]}" =~ "${ARG}" ]]; then + # wrap the arg as a static one + FILTERED+=("-Wl,-Bstatic" "${ARG}" "-Wl,-Bdynamic") + else + # pass through with no filtering + FILTERED+=("${ARG}") + fi +done + +# add libstdc++ statically (and last) +FILTERED+=("-Wl,-Bstatic" "-lstdc++" "-Wl,-Bdynamic") + +# call the real linker with the filtered arguments +exec "$REAL_LD" "${FILTERED[@]}" diff --git a/evaluate.go b/evaluate.go index a05a79c..86baf29 100644 --- a/evaluate.go +++ b/evaluate.go @@ -1,4 +1,4 @@ -package main +package scenes import ( "context" @@ -23,20 +23,20 @@ var scene *armplanning.PlanRequest = &armplanning.PlanRequest{ PlannerOptions: armplanning.NewBasicPlannerOptions(), } -var allScenes = map[int]func(context.Context, logging.Logger) (*armplanning.PlanRequest, error){ +var AllScenes = map[int]func(context.Context, logging.Logger) (*armplanning.PlanRequest, error){ // arm scenes - 1: scene1, - 2: scene2, - 3: scene3, - 4: scene4, - 5: scene5, - 6: scene6, - 7: scene7, - 8: scene8, - 9: scene9, - 10: scene10, - 11: scene11, - 12: scene12, + // 1: scene1, + // 2: scene2, + // 3: scene3, + // 4: scene4, + // 5: scene5, + 6: Scene6, + // 7: scene7, + // 8: scene8, + // 9: scene9, + // 10: scene10, + // 11: scene11, + // 12: scene12, // base scenes // 13: scene13, @@ -56,7 +56,7 @@ const ptgDistEndIdx = 3 func initScene(sceneNum int) (err error) { ctx := context.Background() logger := logging.NewLogger(fmt.Sprintf("scene-%d", sceneNum)) - if sceneFn, ok := allScenes[sceneNum]; ok { + if sceneFn, ok := AllScenes[sceneNum]; ok { scene, err = sceneFn(ctx, logger) if err != nil { return @@ -133,6 +133,7 @@ func evaluateSolution(solution [][]float64, sceneNum int) (float64, float64, flo func L2Distance(q1, q2 []float64) float64 { diff := make([]float64, len(q1)) for i := 0; i < len(q1); i++ { + diff[i] = q1[i] - q2[i] } // 2 is the L value returning a standard L2 Normalization diff --git a/evaluate_test.go b/evaluate_test.go index d4a7bac..6a8384a 100644 --- a/evaluate_test.go +++ b/evaluate_test.go @@ -1,4 +1,4 @@ -package main +package scenes import ( "encoding/csv" diff --git a/extended_motion_test.go b/extended_motion_test.go index e0284d3..77737de 100644 --- a/extended_motion_test.go +++ b/extended_motion_test.go @@ -1,4 +1,4 @@ -package main +package scenes import ( "context" diff --git a/go.mod b/go.mod index faa6a90..92ad8c6 100644 --- a/go.mod +++ b/go.mod @@ -202,3 +202,6 @@ require ( google.golang.org/protobuf v1.36.6 nhooyr.io/websocket v1.8.10 // indirect ) + +// replace go.viam.com/rdk => github.com/nicksanford/rdk v0.0.0-20250729224448-d57517da8216 +replace go.viam.com/rdk => github.com/gvaradarajan/rdk v0.0.0-20250804154529-a14ccbe41081 diff --git a/go.sum b/go.sum index 6f55598..b830eca 100644 --- a/go.sum +++ b/go.sum @@ -281,6 +281,8 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre github.com/go-nlopt/nlopt v0.0.0-20230219125344-443d3362dcb5 h1:JlR5qQ/dy4NPpeKld/CJR6cIcL0ll4OQ7ieylY5kJ20= github.com/go-nlopt/nlopt v0.0.0-20230219125344-443d3362dcb5/go.mod h1:crLzNxWuUkZODn9zme0coCcBvPQrM3hnbQWR3uolF8o= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-pdf/fpdf v0.9.0 h1:PPvSaUuo1iMi9KkaAn90NuKi+P4gwMedWPHhj8YlJQw= github.com/go-pdf/fpdf v0.9.0/go.mod h1:oO8N111TkmKb9D7VvWGLvLJlaZUQVPM+6V42pp3iV4Y= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= @@ -437,6 +439,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= +github.com/gvaradarajan/rdk v0.0.0-20250804154529-a14ccbe41081 h1:jZ/BBuAW8e2DbPoQxbmN8Tj2qbm+v2+5DUPy2d8tcVk= +github.com/gvaradarajan/rdk v0.0.0-20250804154529-a14ccbe41081/go.mod h1:BOTaGc7FmUs+WwySQqrphKNwResLsGWLe5DFIyCspIM= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= @@ -554,6 +558,8 @@ github.com/lmittmann/ppm v1.0.2/go.mod h1:GObNM/dbtplb87+9xClwI9bZ+AOPMg0Ujf4k3i github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magefile/mage v1.10.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= @@ -724,6 +730,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/polyfloyd/go-errorlint v0.0.0-20201127212506-19bd8db6546f/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= @@ -790,6 +798,10 @@ github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil/v3 v3.21.1/go.mod h1:igHnfak0qnw1biGeI2qKQvu0ZkwvEkUcCLlYhZzdr/4= +github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= +github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= +github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= +github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= @@ -853,6 +865,10 @@ github.com/teambition/rrule-go v1.8.2 h1:lIjpjvWTj9fFUZCmuoVDrKVOtdiyzbzc93qTmRV github.com/teambition/rrule-go v1.8.2/go.mod h1:Ieq5AbrKGciP1V//Wq8ktsTXwSwJHDD5mD/wLBGl3p4= github.com/tetafro/godot v1.4.4/go.mod h1:FVDd4JuKliW3UgjswZfJfHq4vAx0bD/Jd5brJjGeaz4= github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tomarrell/wrapcheck v0.0.0-20201130113247-1683564d9756/go.mod h1:yiFB6fFoV7saXirUGfuK+cPtUh4NX/Hf5y2WC2lehu0= @@ -903,6 +919,8 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= github.com/zhuyie/golzf v0.0.0-20161112031142-8387b0307ade h1:bafvQukPrIYwYWcft4rl3WpHo3qO0/voaAgnCwgdhi0= @@ -972,8 +990,6 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.viam.com/api v0.1.455 h1:WY++sFAydRGcg/E1va85BFPi9U7IuEf2Dk0JrPZ1Wzs= go.viam.com/api v0.1.455/go.mod h1:gwJriv6EVWe97uFzzzWjzP3NPfpCrKtRAdWtYglUpqs= -go.viam.com/rdk v0.86.0-rc0.0.20250729152222-0c3bdf425098 h1:sR6wQO/8xRW0QnDiBTQPEOxRC2g3xjzRI40BQCVJ68Q= -go.viam.com/rdk v0.86.0-rc0.0.20250729152222-0c3bdf425098/go.mod h1:3B1qhH4wb422GylOJRULGvLPSyvMO6N1qVijxaFYFl8= go.viam.com/test v1.2.4 h1:JYgZhsuGAQ8sL9jWkziAXN9VJJiKbjoi9BsO33TW3ug= go.viam.com/test v1.2.4/go.mod h1:zI2xzosHdqXAJ/kFqcN+OIF78kQuTV2nIhGZ8EzvaJI= go.viam.com/utils v0.1.153 h1:p775C6WmfOgf0gGRuvlcWDRuNURYiSzzv20I86tIhlE= diff --git a/scenes_test.go b/scenes_test.go index 86bed06..14c79c9 100644 --- a/scenes_test.go +++ b/scenes_test.go @@ -1,8 +1,9 @@ -package main +package scenes import ( "context" "encoding/csv" + "encoding/json" "errors" "flag" "fmt" @@ -14,6 +15,7 @@ import ( "testing" "time" + "go.viam.com/rdk/logging" "go.viam.com/rdk/motionplan/armplanning" "go.viam.com/test" ) @@ -25,6 +27,22 @@ var nameFlag = flag.String("name", "", "name of test to run") var resultsDirectory = "results" +func TestPlanRequestRoundTrip(t *testing.T) { + pr, err := scene5(context.Background(), logging.NewLogger("test-nick")) + test.That(t, err, test.ShouldBeNil) + prBytes, err := json.Marshal(pr) + test.That(t, err, test.ShouldBeNil) + var pr2 armplanning.PlanRequest + test.That(t, json.Unmarshal(prBytes, &pr2), test.ShouldBeNil) + test.That(t, pr.BoundingRegions, test.ShouldResemble, pr2.BoundingRegions) + test.That(t, pr.Constraints, test.ShouldResemble, pr2.Constraints) + test.That(t, pr.Goals, test.ShouldResemble, pr2.Goals) + test.That(t, pr.PlannerOptions, test.ShouldResemble, pr2.PlannerOptions) + test.That(t, pr.StartState, test.ShouldResemble, pr2.StartState) + test.That(t, pr.WorldState, test.ShouldResemble, pr2.WorldState) + test.That(t, pr.FrameSystem, test.ShouldResemble, pr2.FrameSystem) +} + func TestDefault(t *testing.T) { name := *nameFlag if name == "" { @@ -92,6 +110,13 @@ func runScenes(t *testing.T, name string, options map[string]interface{}) error // TODO: these options need to be integrated into the planner options func runPlanner(fileName string, options map[string]interface{}) error { start := time.Now() + jsonBytes, err := json.Marshal(scene) + if err != nil { + return err + } + if err := os.WriteFile(fileName+"_plan.json", jsonBytes, 0o666); err != nil { + return err + } // run planning query plan, err := armplanning.PlanMotion(context.Background(), logger, scene)