Skip to content
Open
Show file tree
Hide file tree
Changes from 47 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
ca492ec
fix(StickProcessor): камера
tikhonsmovzh Feb 9, 2025
c9ce1d4
fix(Trajectoryes): убраны красные траектории
tikhonsmovzh Feb 11, 2025
23fbfbd
feat(CurrentSensor): датчик тока
tikhonsmovzh Feb 11, 2025
848cf58
fix(CurrentSensor): исправленое определения вольтожа
tikhonsmovzh Feb 11, 2025
63a97ea
fix(DeviceTest): новые устройства
tikhonsmovzh Feb 11, 2025
71d722a
fix(DeviceTest): забыл break
tikhonsmovzh Feb 11, 2025
2a6dab9
fix(HumanTrajectory): автоном на 4 повешанных
tikhonsmovzh Feb 12, 2025
8fb59cb
fix(currentSensor): датчик тока
tikhonsmovzh Feb 15, 2025
c7537fd
fix(Encoders): ресет всех инкдеров при старте
tikhonsmovzh Feb 17, 2025
c593ee7
fix(IntakeManager): дополнительная проверка для датчика тока
tikhonsmovzh Feb 17, 2025
24ca8fc
fix(Battery): задание частоты обновления батареи в герцах
tikhonsmovzh Feb 17, 2025
ea8b822
fix(currentSensor): рабочая защита на диф
tikhonsmovzh Feb 19, 2025
aa5140f
fix(IntakeManager): интэйк в нормальный вид
tikhonsmovzh Feb 19, 2025
2dfa7b1
feat(Gameapade): вибрация геймпда при защите от хватания
tikhonsmovzh Feb 19, 2025
24f39fb
fix(Trajectory)
tikhonsmovzh Feb 22, 2025
c1de5c8
feat(Trajectory): вынос ограничения ускорения в константу
tikhonsmovzh Feb 22, 2025
34d3741
fix(Trajectory)
tikhonsmovzh Feb 23, 2025
341bbe2
fix(Trajectory): рабочая ускореная траектория для каозины
tikhonsmovzh Feb 27, 2025
a1706ab
fix(Trajectory): рабочая ускореная траектория для каозины
tikhonsmovzh Feb 28, 2025
b7c932e
fix(BasketTrajectory): 5 в карзине
tikhonsmovzh Mar 1, 2025
04e8cee
fix(BasketTrajectory): 5 в карзине
tikhonsmovzh Mar 1, 2025
96e6529
fix(BasketTrajectory): 5 в карзине
tikhonsmovzh Mar 2, 2025
b3ef6f0
fix(BasketTrajectory): (почти) 6 в карзине
tikhonsmovzh Mar 4, 2025
7a41c12
fix(TeloOp): автоинит телеопа
tikhonsmovzh Mar 5, 2025
bf0e800
fix(IntakeManager): формула для более удобного хаванья из центра
tikhonsmovzh Mar 6, 2025
26c202b
fix(IntakeManager): автохаванье
tikhonsmovzh Mar 7, 2025
24f1ff3
fix(StickProcessor): учет отношение сторон
tikhonsmovzh Mar 7, 2025
fb10e92
fix(StickProcessor): рабочий автоном на 6
tikhonsmovzh Mar 8, 2025
33c16ed
fix(IntakeManager): чательно настроеный датчик тока
tikhonsmovzh Mar 12, 2025
c408692
fix(CameraTest): попытка переделать определение элемента
tikhonsmovzh Mar 12, 2025
9e5bdce
feat(OpenCV.py): продвинутый алгоритм распознования элементов, пока ч…
tikhonsmovzh Mar 13, 2025
16b9cdd
feat(StickProcessor): обновленый процессор элемнтов, даже частично на…
tikhonsmovzh Mar 15, 2025
ec41ca0
feat(StickProcessor.py): версия для быстрой проверки на питухоне
tikhonsmovzh Mar 15, 2025
a58bc9e
clear(IntakeManager): вынос конфигов
tikhonsmovzh Mar 15, 2025
fd36eaa
clear(IntakeManager): вынос конфигов
tikhonsmovzh Mar 15, 2025
74c1ff6
fix(CameraTest): ключение определение элементов
tikhonsmovzh Mar 16, 2025
5334466
fix(all): код не билдился
tikhonsmovzh Mar 16, 2025
187b9ba
fix(StickProcessor): настроеное определение элементов под реальный мир
tikhonsmovzh Mar 16, 2025
841284f
fix(IntakeManager): автохаванье
tikhonsmovzh Mar 16, 2025
1213141
fix(EventBus): оптимизация шины эвентов
tikhonsmovzh Mar 17, 2025
b0e5c27
fix(intakeManager): исправленое управление дифиринциалом
tikhonsmovzh Mar 17, 2025
20d9200
fix(Actions): оптимизированное ожидание
tikhonsmovzh Mar 17, 2025
cb7dc5f
fix(IntakeManager): рабочае автохаванье
tikhonsmovzh Mar 19, 2025
e06f7fa
fix(Trajectory): 4 в карзине за 15 секунд + 1 взят из центра (все оче…
tikhonsmovzh Mar 19, 2025
378a65c
feat(IntakeManager): сохранение второго ближайщего элемента
tikhonsmovzh Mar 19, 2025
fd42c9c
fix(Trajectory): 6 в карзине
tikhonsmovzh Mar 20, 2025
3a76e60
fix(Trajectory): все работает
tikhonsmovzh Mar 24, 2025
49375f6
fix(all): фиксы для пул регвеста
tikhonsmovzh Jun 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,7 @@ open class BaseCollector(val robot: LinearOpMode, private val gameSettings: Game
MergeOdometry(),
DriveTrain(),
IntakeManager(),
Camera(),
CVOdometry()
//CVOdometry()
))
}

Expand All @@ -65,12 +64,18 @@ open class BaseCollector(val robot: LinearOpMode, private val gameSettings: Game
enum class GameColor{ RED, BLUE }
enum class GameOrientation { HUMAN, BASKET }

enum class GameStartPosition(val position: Vec2, val angle: Angle, val color: GameColor, val orientation: GameOrientation){
RED_HUMAN(Vec2(80.0 - 28.8, -156.5 + 1.5), Angle.ofDeg(90.0), GameColor.RED, GameOrientation.HUMAN),
RED_BASKET(Vec2(-80.0, -156.0 + 1.5), Angle.ofDeg(90.0), GameColor.RED, GameOrientation.BASKET),
BLUE_HUMAN(Vec2(-40.0, 156.5 - 1.5), Angle.ofDeg(-90.0), GameColor.BLUE, GameOrientation.HUMAN),
BLUE_BASKET(Vec2(80.0, 156.5 - 1.5), Angle.ofDeg(-90.0), GameColor.BLUE, GameOrientation.BASKET),
NONE(Vec2.ZERO, Angle(0.0), GameColor.BLUE, GameOrientation.BASKET)
class TeammateSate(val brick: Boolean)

enum class GameStartPosition(val position: Vec2, val angle: Angle, val color: GameColor, val orientation: GameOrientation, val teammate: TeammateSate){
RED_HUMAN(Vec2(-40.0, 156.5 - 1.5 + 0.2 - 1.2), Angle.ofDeg(180.0), GameColor.RED, GameOrientation.HUMAN, TeammateSate(false)),
RED_BASKET(Vec2(80.0, 156.5 - 1.5 + 0.2 - 1.2), Angle.ofDeg(-90.0), GameColor.RED, GameOrientation.BASKET, TeammateSate(false)),
BLUE_HUMAN(Vec2(-40.0, 156.5 - 1.5 + 0.2 - 1.2), Angle.ofDeg(180.0), GameColor.BLUE, GameOrientation.HUMAN, TeammateSate(false)),
BLUE_BASKET(Vec2(80.0, 156.5 - 1.5 + 0.2 - 1.2), Angle.ofDeg(-90.0), GameColor.BLUE, GameOrientation.BASKET, TeammateSate(false)),
NONE(Vec2.ZERO, Angle(0.0), GameColor.BLUE, GameOrientation.BASKET, TeammateSate(false)),
RED_HUMAN_BRICK(Vec2(-40.0, 156.5 - 1.5 + 0.2 - 1.2), Angle.ofDeg(180.0), GameColor.RED, GameOrientation.HUMAN, TeammateSate(true)),
RED_BASKET_BRICK(Vec2(80.0, 156.5 - 1.5 + 0.2 - 1.2), Angle.ofDeg(-90.0), GameColor.RED, GameOrientation.BASKET, TeammateSate(true)),
BLUE_HUMAN_BRICK(Vec2(-40.0, 156.5 - 1.5 + 0.2 - 1.2), Angle.ofDeg(180.0), GameColor.BLUE, GameOrientation.HUMAN, TeammateSate(true)),
BLUE_BASKET_BRICK(Vec2(80.0, 156.5 - 1.5 + 0.2 - 1.2), Angle.ofDeg(-90.0), GameColor.BLUE, GameOrientation.BASKET, TeammateSate(true)),
}

fun init() {
Expand All @@ -81,6 +86,8 @@ open class BaseCollector(val robot: LinearOpMode, private val gameSettings: Game
i.init(this, _eventBus)

_updateHandler.init(InitContext(devices.battery))

devices.teamLED.power = 0.9
}

fun start() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ package org.firstinspires.ftc.teamcode.collectors.events
import kotlin.reflect.KClass

class EventBus {
private val _events = mutableMapOf<KClass<*>, ArrayList<(IEvent) -> Unit>>()
private val _events = hashMapOf<KClass<*>, ArrayList<(IEvent) -> Unit>>()
private val _anyCallbacks = mutableListOf<(IEvent) -> Unit>()

fun <T: IEvent> subscribe(event: KClass<T>, callback: (T) -> Unit){
if(_events[event] == null)
Expand All @@ -13,24 +14,21 @@ class EventBus {
}

fun <T: IEvent> invoke(event: T): T{
if(_events[Any::class] != null){
for(i in _events[Any::class]!!)
i.invoke(event)
}
for(i in _anyCallbacks)
i.invoke(event)

val callbacks = _events[event::class]

if(_events[event::class] == null)
if(callbacks == null)
return event

for(i in _events[event::class]!!)
for(i in callbacks)
i.invoke(event)

return event
}

fun anySubscribe(callback: (IEvent) -> Unit){
if(_events[Any::class] == null)
_events[Any::class] = arrayListOf()

_events[Any::class]?.add(callback)
_anyCallbacks.add(callback)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,20 @@ package org.firstinspires.ftc.teamcode.linearOpModes
import com.qualcomm.robotcore.eventloop.opmode.Autonomous
import org.firstinspires.ftc.teamcode.collectors.BaseCollector
import org.firstinspires.ftc.teamcode.collectors.BaseCollector.GameStartPosition
import org.firstinspires.ftc.teamcode.modules.camera.Camera
import org.firstinspires.ftc.teamcode.modules.mainControl.actions.ActionsRunner
import org.firstinspires.ftc.teamcode.modules.mainControl.runner.TrajectorySegmentRunner

open class AutoOpMode(val startPos: GameStartPosition): LinearOpModeBase() {
override fun getOpModeSettings() = OpModeSettings(isAutoStart = false, isPreInit = false, preInitOpModeName = "TeleOpMode")
override fun getOpModeSettings() = OpModeSettings(isAutoStart = false, isPreInit = true, preInitOpModeName = "TeleOpMode", gamepadStart = false)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cделать вместо джавовского getXxx котлинский val с переопределенным геттером


override fun getCollector(): BaseCollector {
val collector = BaseCollector(this,
BaseCollector.GameSettings(
startPosition = startPos,
),
isAuto = true,
mutableListOf(/*ся модули для автонома*/ TrajectorySegmentRunner(), ActionsRunner())
mutableListOf(/*ся модули для автонома*/ TrajectorySegmentRunner(), ActionsRunner(), Camera())
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Поправить коммент

)

return collector
Expand All @@ -25,11 +26,17 @@ open class AutoOpMode(val startPos: GameStartPosition): LinearOpModeBase() {
@Autonomous
class AutoOpModeRedBasket: AutoOpMode(GameStartPosition.RED_BASKET)

@Autonomous
class AutoOpModeRedBasketBrick: AutoOpMode(GameStartPosition.RED_BASKET_BRICK)

@Autonomous
class AutoOpModeRedHuman: AutoOpMode(GameStartPosition.RED_HUMAN)

@Autonomous
class AutoOpModeBlueHuman: AutoOpMode(GameStartPosition.BLUE_HUMAN)

@Autonomous
class AutoOpModeBlueBasket: AutoOpMode(GameStartPosition.BLUE_BASKET)
class AutoOpModeBlueBasket: AutoOpMode(GameStartPosition.BLUE_BASKET)

@Autonomous
class AutoOpModeBlueBasketBrick: AutoOpMode(GameStartPosition.BLUE_BASKET_BRICK)
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import org.firstinspires.ftc.teamcode.collectors.BaseCollector
import org.firstinspires.ftc.teamcode.utils.telemetry.StaticTelemetry
import org.firstinspires.ftc.teamcode.utils.units.Angle
import org.firstinspires.ftc.teamcode.utils.units.Vec2
import kotlin.math.abs

/**
* Класс для всех опмодов который запускает всю программу
Expand All @@ -18,11 +19,13 @@ open class LinearOpModeBase : LinearOpMode() {
data class OpModeSettings(
val isAutoStart: Boolean,
val isPreInit: Boolean,
val gamepadStart: Boolean,
val preInitOpModeName: String = "",
val initTime: Double = 1.5
)

protected open fun getOpModeSettings() = OpModeSettings(isAutoStart = false, isPreInit = false)
protected open fun getOpModeSettings() =
OpModeSettings(isAutoStart = false, isPreInit = false, gamepadStart = false)

protected open fun getCollector() = BaseCollector(
this,
Expand All @@ -46,6 +49,17 @@ open class LinearOpModeBase : LinearOpMode() {

while (!isStarted()) {
collector.initUpdate()
Thread.yield()

if ((gamepad1.options ||
abs(gamepad1.left_stick_x) > 0.01 ||
abs(gamepad1.left_stick_y) > 0.01 ||
abs(gamepad1.right_stick_x) > 0.01 ||
abs(gamepad1.right_stick_y) > 0.01 ||
gamepad1.touchpad) && settings.gamepadStart
)
OpModeManagerImpl.getOpModeManagerOfActivity(AppUtil.getInstance().getActivity())
.startActiveOpMode()
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Обернуть в { }

}

resetRuntime()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ import org.firstinspires.ftc.teamcode.modules.mainControl.gamepad.Gamepad
@TeleOp
class TeleOpMode : LinearOpModeBase() {
override fun getOpModeSettings() = OpModeSettings(
isAutoStart = true,
isPreInit = false
isAutoStart = false,
isPreInit = false,
gamepadStart = true
)

override fun getCollector(): BaseCollector {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,54 +5,63 @@ import org.firstinspires.ftc.teamcode.collectors.BaseCollector
import org.firstinspires.ftc.teamcode.collectors.IRobotModule
import org.firstinspires.ftc.teamcode.collectors.events.EventBus
import org.firstinspires.ftc.teamcode.collectors.events.IEvent
import org.firstinspires.ftc.teamcode.utils.configs.Configs
import org.firstinspires.ftc.teamcode.utils.units.Orientation
import org.firstinspires.ftc.vision.VisionPortal
import org.firstinspires.ftc.vision.VisionProcessor


class Camera : IRobotModule {
class RequestAllianceDetectedSticks(var sticks: Array<Orientation>? = null): IEvent
class RequestYellowDetectedSticks(var sticks: Array<Orientation>? = null): IEvent
class SetStickDetectEnable(val enable: Boolean): IEvent
class AddCameraProcessor(val processor: VisionProcessor): IEvent
class RequestAllianceDetectedSticks(var sticks: Array<Orientation>? = null) : IEvent
class RequestYellowDetectedSticks(var sticks: Array<Orientation>? = null) : IEvent
class AddCameraProcessor(val processor: VisionProcessor) : IEvent
class WaitFrameProcessed: IEvent

private lateinit var _processor: StickProcessor
private lateinit var _visionPortal: VisionPortal

private var _visionPortalBuilder = VisionPortal.Builder()

override fun init(collector: BaseCollector, bus: EventBus) {
bus.subscribe(RequestAllianceDetectedSticks::class){
bus.subscribe(WaitFrameProcessed::class){
_processor.waitFrame()
}

bus.subscribe(RequestAllianceDetectedSticks::class) {
it.sticks = _processor.allianceSticks.get()
}

bus.subscribe(RequestYellowDetectedSticks::class){
bus.subscribe(RequestYellowDetectedSticks::class) {
it.sticks = _processor.yellowSticks.get()
}

bus.subscribe(SetStickDetectEnable::class){
_processor.enableDetect.set(it.enable)
}

bus.subscribe(AddCameraProcessor::class){
bus.subscribe(AddCameraProcessor::class) {
_visionPortalBuilder.addProcessor(it.processor)
}

_processor = StickProcessor()

_processor.gameColor.set(collector.parameters.oldStartPosition.color)

_visionPortalBuilder = _visionPortalBuilder.addProcessor(_processor).setCamera(collector.devices.camera)
_visionPortalBuilder =
_visionPortalBuilder.addProcessor(_processor).setCamera(collector.devices.camera)
}

override fun start() {
_visionPortal = _visionPortalBuilder.build()
FtcDashboard.getInstance().startCameraStream(_processor, 30.0)
_processor.enableDetect.set(true)

if (Configs.TelemetryConfig.ENABLE)
FtcDashboard.getInstance().startCameraStream(_processor, 15.0)
}

override fun stop() {
_visionPortal.stopStreaming()
FtcDashboard.getInstance().stopCameraStream()
if (Configs.TelemetryConfig.ENABLE)
try {
_visionPortal.stopStreaming()
FtcDashboard.getInstance().stopCameraStream()
} catch (_: Exception) {

}
}
}
Loading
Loading