Compare commits
No commits in common. "f1261819f619fa6ed8cdbaf8aa5b7a9aaf08f03f" and "25bea1aab318c9cbcef7e82a313152a5fe4b694e" have entirely different histories.
f1261819f6
...
25bea1aab3
2
.gitignore
vendored
2
.gitignore
vendored
@ -284,5 +284,3 @@ local.properties
|
|||||||
|
|
||||||
./build/
|
./build/
|
||||||
|
|
||||||
pkg/steering/test_result/
|
|
||||||
|
|
||||||
|
136
build-docker.sh
136
build-docker.sh
@ -1,134 +1,50 @@
|
|||||||
#! /bin/bash
|
#! /bin/bash
|
||||||
|
|
||||||
IMAGE_NAME=robocar-steering
|
IMAGE_NAME=robocar-steering
|
||||||
BINARY_NAME=rc-steering
|
|
||||||
TAG=$(git describe)
|
TAG=$(git describe)
|
||||||
FULL_IMAGE_NAME=docker.io/cyrilix/${IMAGE_NAME}:${TAG}
|
FULL_IMAGE_NAME=docker.io/cyrilix/${IMAGE_NAME}:${TAG}
|
||||||
OPENCV_VERSION=4.6.0
|
BINARY=rc-steering
|
||||||
SRC_CMD=./cmd/$BINARY_NAME
|
|
||||||
GOLANG_VERSION=1.19
|
GOTAGS="-tags netgo"
|
||||||
|
|
||||||
image_build(){
|
image_build(){
|
||||||
local containerName=builder
|
local platform=$1
|
||||||
|
|
||||||
GOPATH=/go
|
|
||||||
|
|
||||||
buildah from --name ${containerName} docker.io/cyrilix/opencv-buildstage:${OPENCV_VERSION}
|
|
||||||
buildah config --label maintainer="Cyrille Nofficial" "${containerName}"
|
|
||||||
|
|
||||||
buildah copy --from=docker.io/library/golang:${GOLANG_VERSION} "${containerName}" /usr/local/go /usr/local/go
|
|
||||||
buildah config --env GOPATH=/go \
|
|
||||||
--env PATH=/usr/local/go/bin:$GOPATH/bin:/usr/local/go/bin:/usr/bin:/bin \
|
|
||||||
"${containerName}"
|
|
||||||
|
|
||||||
buildah run \
|
|
||||||
--env GOPATH=${GOPATH} \
|
|
||||||
"${containerName}" \
|
|
||||||
mkdir -p /src "$GOPATH/src" "$GOPATH/bin"
|
|
||||||
|
|
||||||
buildah run \
|
|
||||||
--env GOPATH=${GOPATH} \
|
|
||||||
"${containerName}" \
|
|
||||||
chmod -R 777 "$GOPATH"
|
|
||||||
|
|
||||||
|
|
||||||
buildah config --env PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig "${containerName}"
|
GOOS=$(echo $platform | cut -f1 -d/) && \
|
||||||
buildah config --workingdir /src/ "${containerName}"
|
GOARCH=$(echo $platform | cut -f2 -d/) && \
|
||||||
|
GOARM=$(echo $platform | cut -f3 -d/ | sed "s/v//" )
|
||||||
|
VARIANT="--variant $(echo $platform | cut -f3 -d/ )"
|
||||||
|
if [[ -z "$GOARM" ]] ;
|
||||||
|
then
|
||||||
|
VARIANT=""
|
||||||
|
fi
|
||||||
|
|
||||||
buildah add "${containerName}" . .
|
local binary_suffix="$GOARCH$(echo $platform | cut -f3 -d/ )"
|
||||||
|
|
||||||
for platform in "linux/amd64" "linux/arm64" "linux/arm/v7"
|
local containerName="$IMAGE_NAME-$GOARCH$GOARM"
|
||||||
do
|
|
||||||
|
|
||||||
GOOS=$(echo "$platform" | cut -f1 -d/) && \
|
|
||||||
GOARCH=$(echo "$platform" | cut -f2 -d/) && \
|
|
||||||
GOARM=$(echo "$platform" | cut -f3 -d/ | sed "s/v//" )
|
|
||||||
|
|
||||||
case $GOARCH in
|
printf "\n\nBuild go binary %s\n\n" "${BINARY}.${binary_suffix}"
|
||||||
"amd64")
|
mkdir -p build
|
||||||
ARCH=amd64
|
CGO_ENABLED=0 GOOS=${GOOS} GOARCH=${GOARCH} GOARM=${GOARM} go build -mod vendor -a ${GOTAGS} -o "build/${BINARY}.${binary_suffix}" ./cmd/${BINARY}/
|
||||||
ARCH_LIB_DIR=/usr/lib/x86_64-linux-gnu
|
|
||||||
EXTRA_LIBS=""
|
|
||||||
CC=gcc
|
|
||||||
CXX=g++
|
|
||||||
;;
|
|
||||||
"arm64")
|
|
||||||
ARCH=arm64
|
|
||||||
ARCH_LIB_DIR=/usr/lib/aarch64-linux-gnu
|
|
||||||
EXTRA_LIBS="-ltbb"
|
|
||||||
CC=aarch64-linux-gnu-gcc
|
|
||||||
CXX=aarch64-linux-gnu-g++
|
|
||||||
;;
|
|
||||||
"arm")
|
|
||||||
ARCH=armhf
|
|
||||||
ARCH_LIB_DIR=/usr/lib/arm-linux-gnueabihf
|
|
||||||
EXTRA_LIBS="-ltbb"
|
|
||||||
CC=arm-linux-gnueabihf-gcc
|
|
||||||
CXX=arm-linux-gnueabihf-g++
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
printf "Build binary for %s\n\n" "${platform}"
|
buildah --os "$GOOS" --arch "$GOARCH" $VARIANT --name "$containerName" from gcr.io/distroless/static
|
||||||
|
buildah config --user 1234 "$containerName"
|
||||||
|
buildah copy "$containerName" "build/${BINARY}.${binary_suffix}" /go/bin/$BINARY
|
||||||
|
buildah config --entrypoint '["/go/bin/'$BINARY'"]' "${containerName}"
|
||||||
|
|
||||||
buildah run \
|
buildah commit --rm --manifest $IMAGE_NAME "${containerName}" "${containerName}"
|
||||||
--env CGO_ENABLED=1 \
|
|
||||||
--env CC=${CC} \
|
|
||||||
--env CXX=${CXX} \
|
|
||||||
--env GOOS=${GOOS} \
|
|
||||||
--env GOARCH=${GOARCH} \
|
|
||||||
--env GOARM=${GOARM} \
|
|
||||||
--env CGO_CPPFLAGS="-I/opt/opencv/${ARCH}/include/opencv4/" \
|
|
||||||
--env CGO_LDFLAGS="-L/opt/opencv/${ARCH}/lib -L${ARCH_LIB_DIR} ${EXTRA_LIBS} -lopencv_core -lopencv_face -lopencv_videoio -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lopencv_objdetect -lopencv_features2d -lopencv_video -lopencv_dnn -lopencv_xfeatures2d -lopencv_calib3d -lopencv_photo -lopencv_flann" \
|
|
||||||
--env CGO_CXXFLAGS="--std=c++1z" \
|
|
||||||
"${containerName}" \
|
|
||||||
go build -tags customenv -a -o ${BINARY_NAME}.${ARCH} ${SRC_CMD}
|
|
||||||
|
|
||||||
done
|
|
||||||
buildah commit --rm ${containerName} ${IMAGE_NAME}-builder
|
|
||||||
}
|
|
||||||
|
|
||||||
image_final(){
|
|
||||||
local containerName=runtime
|
|
||||||
|
|
||||||
for platform in "linux/amd64" "linux/arm64" "linux/arm/v7"
|
|
||||||
do
|
|
||||||
|
|
||||||
GOOS=$(echo $platform | cut -f1 -d/) && \
|
|
||||||
GOARCH=$(echo $platform | cut -f2 -d/) && \
|
|
||||||
GOARM=$(echo $platform | cut -f3 -d/ | sed "s/v//" )
|
|
||||||
VARIANT="--variant $(echo $platform | cut -f3 -d/ )"
|
|
||||||
|
|
||||||
if [[ -z "$GOARM" ]] ;
|
|
||||||
then
|
|
||||||
VARIANT=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${GOARCH}" == "arm" ]]
|
|
||||||
then
|
|
||||||
BINARY="${BINARY_NAME}.armhf"
|
|
||||||
else
|
|
||||||
BINARY="${BINARY_NAME}.${GOARCH}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
buildah from --name "${containerName}" --os "${GOOS}" --arch "${GOARCH}" ${VARIANT} docker.io/cyrilix/opencv-runtime:${OPENCV_VERSION}
|
|
||||||
|
|
||||||
buildah copy --from ${IMAGE_NAME}-builder "$containerName" "/src/${BINARY}" /usr/local/bin/${BINARY_NAME}
|
|
||||||
|
|
||||||
buildah config --label maintainer="Cyrille Nofficial" "${containerName}"
|
|
||||||
buildah config --user 1234 "$containerName"
|
|
||||||
buildah config --cmd '' "$containerName"
|
|
||||||
buildah config --entrypoint '[ "/usr/local/bin/'${BINARY_NAME}'" ]' "$containerName"
|
|
||||||
|
|
||||||
buildah commit --rm --manifest ${IMAGE_NAME} ${containerName}
|
|
||||||
done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buildah rmi localhost/$IMAGE_NAME
|
buildah rmi localhost/$IMAGE_NAME
|
||||||
buildah manifest rm localhost/${IMAGE_NAME}
|
buildah manifest rm localhost/${IMAGE_NAME}
|
||||||
|
|
||||||
image_build
|
image_build linux/amd64
|
||||||
|
image_build linux/arm64
|
||||||
|
image_build linux/arm/v7
|
||||||
|
|
||||||
|
|
||||||
# push image
|
# push image
|
||||||
image_final
|
|
||||||
printf "\n\nPush manifest to %s\n\n" ${FULL_IMAGE_NAME}
|
printf "\n\nPush manifest to %s\n\n" ${FULL_IMAGE_NAME}
|
||||||
buildah manifest push --rm -f v2s2 "localhost/$IMAGE_NAME" "docker://$FULL_IMAGE_NAME" --all
|
buildah manifest push --rm -f v2s2 "localhost/$IMAGE_NAME" "docker://$FULL_IMAGE_NAME" --all
|
@ -160,7 +160,18 @@ func TestController_Start(t *testing.T) {
|
|||||||
objectsTopic := "topic/objects"
|
objectsTopic := "topic/objects"
|
||||||
|
|
||||||
type fields struct {
|
type fields struct {
|
||||||
|
client mqtt.Client
|
||||||
|
steeringTopic string
|
||||||
|
muDriveMode sync.RWMutex
|
||||||
driveMode events.DriveMode
|
driveMode events.DriveMode
|
||||||
|
cancel chan interface{}
|
||||||
|
driveModeTopic string
|
||||||
|
rcSteeringTopic string
|
||||||
|
tfSteeringTopic string
|
||||||
|
objectsTopic string
|
||||||
|
muObjects sync.RWMutex
|
||||||
|
objects []*events.Object
|
||||||
|
corrector *GridCorrector
|
||||||
enableCorrection bool
|
enableCorrection bool
|
||||||
enableCorrectionOnUser bool
|
enableCorrectionOnUser bool
|
||||||
}
|
}
|
||||||
@ -182,10 +193,9 @@ func TestController_Start(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "On user drive mode, none correction",
|
name: "On user drive mode, none correction",
|
||||||
|
|
||||||
fields: fields{
|
fields: fields{
|
||||||
driveMode: events.DriveMode_USER,
|
driveMode: events.DriveMode_USER,
|
||||||
enableCorrection: false,
|
|
||||||
enableCorrectionOnUser: false,
|
|
||||||
},
|
},
|
||||||
msgEvents: msgEvents{
|
msgEvents: msgEvents{
|
||||||
driveMode: events.DriveModeMessage{DriveMode: events.DriveMode_USER},
|
driveMode: events.DriveModeMessage{DriveMode: events.DriveMode_USER},
|
||||||
@ -197,91 +207,6 @@ func TestController_Start(t *testing.T) {
|
|||||||
// Get rc value without correction
|
// Get rc value without correction
|
||||||
want: events.SteeringMessage{Steering: 0.3, Confidence: 1.0},
|
want: events.SteeringMessage{Steering: 0.3, Confidence: 1.0},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "On pilot drive mode, none correction",
|
|
||||||
fields: fields{
|
|
||||||
driveMode: events.DriveMode_PILOT,
|
|
||||||
enableCorrection: false,
|
|
||||||
enableCorrectionOnUser: false,
|
|
||||||
},
|
|
||||||
msgEvents: msgEvents{
|
|
||||||
driveMode: events.DriveModeMessage{DriveMode: events.DriveMode_PILOT},
|
|
||||||
rcSteering: events.SteeringMessage{Steering: 0.3, Confidence: 1.0},
|
|
||||||
tfSteering: events.SteeringMessage{Steering: 0.4, Confidence: 1.0},
|
|
||||||
objects: events.ObjectsMessage{Objects: []*events.Object{&objectOnMiddleNear}},
|
|
||||||
},
|
|
||||||
correctionOnObject: 0.5,
|
|
||||||
// Get rc value without correction
|
|
||||||
want: events.SteeringMessage{Steering: 0.4, Confidence: 1.0},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "On pilot drive mode, correction enabled",
|
|
||||||
fields: fields{
|
|
||||||
driveMode: events.DriveMode_PILOT,
|
|
||||||
enableCorrection: true,
|
|
||||||
enableCorrectionOnUser: false,
|
|
||||||
},
|
|
||||||
msgEvents: msgEvents{
|
|
||||||
driveMode: events.DriveModeMessage{DriveMode: events.DriveMode_PILOT},
|
|
||||||
rcSteering: events.SteeringMessage{Steering: 0.3, Confidence: 1.0},
|
|
||||||
tfSteering: events.SteeringMessage{Steering: 0.4, Confidence: 1.0},
|
|
||||||
objects: events.ObjectsMessage{Objects: []*events.Object{&objectOnMiddleNear}},
|
|
||||||
},
|
|
||||||
correctionOnObject: 0.5,
|
|
||||||
// Get rc value without correction
|
|
||||||
want: events.SteeringMessage{Steering: 0.5, Confidence: 1.0},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "On pilot drive mode, all corrections enabled",
|
|
||||||
fields: fields{
|
|
||||||
driveMode: events.DriveMode_PILOT,
|
|
||||||
enableCorrection: true,
|
|
||||||
enableCorrectionOnUser: true,
|
|
||||||
},
|
|
||||||
msgEvents: msgEvents{
|
|
||||||
driveMode: events.DriveModeMessage{DriveMode: events.DriveMode_PILOT},
|
|
||||||
rcSteering: events.SteeringMessage{Steering: 0.3, Confidence: 1.0},
|
|
||||||
tfSteering: events.SteeringMessage{Steering: 0.4, Confidence: 1.0},
|
|
||||||
objects: events.ObjectsMessage{Objects: []*events.Object{&objectOnMiddleNear}},
|
|
||||||
},
|
|
||||||
correctionOnObject: 0.5,
|
|
||||||
// Get rc value without correction
|
|
||||||
want: events.SteeringMessage{Steering: 0.5, Confidence: 1.0},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "On user drive mode, only correction PILOT enabled",
|
|
||||||
fields: fields{
|
|
||||||
driveMode: events.DriveMode_PILOT,
|
|
||||||
enableCorrection: true,
|
|
||||||
enableCorrectionOnUser: false,
|
|
||||||
},
|
|
||||||
msgEvents: msgEvents{
|
|
||||||
driveMode: events.DriveModeMessage{DriveMode: events.DriveMode_USER},
|
|
||||||
rcSteering: events.SteeringMessage{Steering: 0.3, Confidence: 1.0},
|
|
||||||
tfSteering: events.SteeringMessage{Steering: 0.4, Confidence: 1.0},
|
|
||||||
objects: events.ObjectsMessage{Objects: []*events.Object{&objectOnMiddleNear}},
|
|
||||||
},
|
|
||||||
correctionOnObject: 0.5,
|
|
||||||
// Get rc value without correction
|
|
||||||
want: events.SteeringMessage{Steering: 0.3, Confidence: 1.0},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "On user drive mode, all corrections enabled",
|
|
||||||
fields: fields{
|
|
||||||
driveMode: events.DriveMode_USER,
|
|
||||||
enableCorrection: true,
|
|
||||||
enableCorrectionOnUser: true,
|
|
||||||
},
|
|
||||||
msgEvents: msgEvents{
|
|
||||||
driveMode: events.DriveModeMessage{DriveMode: events.DriveMode_USER},
|
|
||||||
rcSteering: events.SteeringMessage{Steering: 0.3, Confidence: 1.0},
|
|
||||||
tfSteering: events.SteeringMessage{Steering: 0.4, Confidence: 1.0},
|
|
||||||
objects: events.ObjectsMessage{Objects: []*events.Object{&objectOnMiddleNear}},
|
|
||||||
},
|
|
||||||
correctionOnObject: 0.5,
|
|
||||||
// Get rc value without correction
|
|
||||||
want: events.SteeringMessage{Steering: 0.5, Confidence: 1.0},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
@ -292,7 +217,7 @@ func TestController_Start(t *testing.T) {
|
|||||||
WithCorrector(&StaticCorrector{delta: tt.correctionOnObject}),
|
WithCorrector(&StaticCorrector{delta: tt.correctionOnObject}),
|
||||||
)
|
)
|
||||||
go c.Start()
|
go c.Start()
|
||||||
time.Sleep(1 * time.Millisecond)
|
defer c.Stop()
|
||||||
|
|
||||||
// Publish events and wait generation of new steering message
|
// Publish events and wait generation of new steering message
|
||||||
waitPublish.Add(1)
|
waitPublish.Add(1)
|
||||||
|
Loading…
Reference in New Issue
Block a user