aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2015-04-03 17:40:54 +0200
committerJakob Odersky <jodersky@gmail.com>2015-04-03 17:40:54 +0200
commit70e527dcfa26de0936adaf1e3c0e26ce673bc352 (patch)
treed68a19b5af56504ecba9661337a38b7cd5e46b17
parente144f8a38ba869372ef9aa5936608f619bb6092a (diff)
downloadmavigator-70e527dcfa26de0936adaf1e3c0e26ce673bc352.tar.gz
mavigator-70e527dcfa26de0936adaf1e3c0e26ce673bc352.tar.bz2
mavigator-70e527dcfa26de0936adaf1e3c0e26ce673bc352.zip
reimplement motor load instrument
-rw-r--r--vfd-dashboard/src/main/scala/vfd/dashboard/MavlinkSocket.scala2
-rw-r--r--vfd-dashboard/src/main/scala/vfd/dashboard/ui/Layout.scala35
-rw-r--r--vfd-dashboard/src/main/scala/vfd/dashboard/ui/instruments/Balance.scala27
-rw-r--r--vfd-dashboard/src/main/scala/vfd/dashboard/ui/instruments/Distribution.scala26
-rw-r--r--vfd-dashboard/src/main/scala/vfd/dashboard/ui/instruments/Generic.scala2
-rw-r--r--vfd-main/public/images/instruments/distribution.svg (renamed from vfd-main/public/images/instruments/balance.svg)10
6 files changed, 54 insertions, 48 deletions
diff --git a/vfd-dashboard/src/main/scala/vfd/dashboard/MavlinkSocket.scala b/vfd-dashboard/src/main/scala/vfd/dashboard/MavlinkSocket.scala
index 9476794..fb1856c 100644
--- a/vfd-dashboard/src/main/scala/vfd/dashboard/MavlinkSocket.scala
+++ b/vfd-dashboard/src/main/scala/vfd/dashboard/MavlinkSocket.scala
@@ -13,7 +13,7 @@ import rx.core.Rx
import rx.core.Var
import rx.ops.RxOps
-class MavlinkSocket(url: String, remoteSystemId: Int) {
+class MavlinkSocket(url: String, val remoteSystemId: Int) {
lazy val packet: Var[Packet] = Var(Packet.empty)
lazy val message: Rx[Message] = packet.map{p =>
diff --git a/vfd-dashboard/src/main/scala/vfd/dashboard/ui/Layout.scala b/vfd-dashboard/src/main/scala/vfd/dashboard/ui/Layout.scala
index 1b1540e..a2e03ef 100644
--- a/vfd-dashboard/src/main/scala/vfd/dashboard/ui/Layout.scala
+++ b/vfd-dashboard/src/main/scala/vfd/dashboard/ui/Layout.scala
@@ -4,15 +4,8 @@ import rx.Obs
import scalatags.JsDom.all._
import vfd.dashboard.Environment
import vfd.dashboard.MavlinkSocket
-import vfd.dashboard.ui.instruments.Altimeter
-import vfd.dashboard.ui.instruments.Balance
-import vfd.dashboard.ui.instruments.Bar
-import vfd.dashboard.ui.instruments.Compass
-import vfd.dashboard.ui.instruments.Generic
-import vfd.dashboard.ui.instruments.Horizon
-import org.mavlink.messages.Heartbeat
-import org.mavlink.messages.Attitude
-import vfd.dashboard.ui.instruments.Clock
+import vfd.dashboard.ui.instruments._
+import org.mavlink.messages._
class Layout(socket: MavlinkSocket)(implicit env: Environment) {
@@ -55,13 +48,14 @@ class Layout(socket: MavlinkSocket)(implicit env: Environment) {
val motor1 = new Generic(0, 50, 100, "%")
val motor2 = new Generic(0, 50, 100, "%")
val motor3 = new Generic(0, 50, 100, "%")
- val powerDistribution = new Balance()
- val batteryLevel = new Bar()
+ val powerDistribution = new Distribution
+ val batteryLevel = new Bar
val top = header(
div("Flight Control Panel"),
div((new Clock).element),
- div("System #"))
+ div("UAV " + socket.remoteSystemId)
+ )
val left = panel(
map,
@@ -69,9 +63,9 @@ class Layout(socket: MavlinkSocket)(implicit env: Environment) {
thead("Motors"),
tbody(
tr(
- td(motor0.element),
- td(),
td(motor1.element),
+ td(),
+ td(motor0.element),
td()
),
tr(
@@ -137,6 +131,18 @@ class Layout(socket: MavlinkSocket)(implicit env: Environment) {
horizon.value() = (att.pitch, att.roll)
compass.value() = att.yaw
+ case s: ServoOutputRaw =>
+ val m0 = 100 * (s.servo1Raw - 1000) / 1000
+ val m1 = 100 * (s.servo2Raw - 1000) / 1000
+ val m2 = 100 * (s.servo3Raw - 1000) / 1000
+ val m3 = 100 * (s.servo4Raw - 1000) / 1000
+
+ motor0.value() = m0
+ motor1.value() = m1
+ motor2.value() = m2
+ motor3.value() = m3
+ powerDistribution.value() = (m0, m1, m2, m3)
+
//TODO route other messages
case _ => ()
@@ -144,4 +150,5 @@ class Layout(socket: MavlinkSocket)(implicit env: Environment) {
}
}
+
} \ No newline at end of file
diff --git a/vfd-dashboard/src/main/scala/vfd/dashboard/ui/instruments/Balance.scala b/vfd-dashboard/src/main/scala/vfd/dashboard/ui/instruments/Balance.scala
deleted file mode 100644
index ef5a3cc..0000000
--- a/vfd-dashboard/src/main/scala/vfd/dashboard/ui/instruments/Balance.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-package vfd.dashboard.ui.instruments
-
-import org.scalajs.dom.html
-import vfd.dashboard.Environment
-
-class Balance(implicit env: Environment) extends SvgInstrument[(Double, Double, Double, Double)] {
- import SvgInstrument._
-
- val initial = (0.0, 0.0, 0.0, 0.0)
-
- lazy val element = svgObject("balance")
- lazy val position = part("position")
- lazy val moveable = Seq(position)
-
- protected def update(value: (Double, Double, Double, Double)) = {
- val m0 = value._1
- val m1 = value._2
- val m2 = value._3
- val m3 = value._4
- val s = m0 + m1 + m2 + m3
- val i = (m0 - m2) / s
- val j = (m1 - m3) / s
- val x = 0.5 * (i - j)
- val y = 0.5 * (-i - j)
- translate(position, (x * 50).toInt, (y * 50).toInt)
- }
-} \ No newline at end of file
diff --git a/vfd-dashboard/src/main/scala/vfd/dashboard/ui/instruments/Distribution.scala b/vfd-dashboard/src/main/scala/vfd/dashboard/ui/instruments/Distribution.scala
new file mode 100644
index 0000000..caeac33
--- /dev/null
+++ b/vfd-dashboard/src/main/scala/vfd/dashboard/ui/instruments/Distribution.scala
@@ -0,0 +1,26 @@
+package vfd.dashboard.ui.instruments
+
+import org.scalajs.dom.html
+import vfd.dashboard.Environment
+
+class Distribution(implicit env: Environment) extends SvgInstrument[(Double, Double, Double, Double)] {
+ import SvgInstrument._
+
+ val initial = (0.0, 0.0, 0.0, 0.0)
+
+ lazy val element = svgObject("distribution")
+ lazy val position = part("position")
+ lazy val moveable = Seq(position)
+
+ private final val Radius = 50 //px
+
+ protected def update(value: (Double, Double, Double, Double)) = {
+ val sum = value._1 + value._2 + value._3 + value._4
+ val i = (value._1 - value._3) / sum
+ val j = (value._2 - value._4) / sum
+ val x = math.sqrt(2) / 2 * (i - j)
+ val y = math.sqrt(2) / 2 * (-i - j)
+ translate(position, (x * Radius).toInt, (y * Radius).toInt)
+ }
+
+} \ No newline at end of file
diff --git a/vfd-dashboard/src/main/scala/vfd/dashboard/ui/instruments/Generic.scala b/vfd-dashboard/src/main/scala/vfd/dashboard/ui/instruments/Generic.scala
index c46bdcc..af9469a 100644
--- a/vfd-dashboard/src/main/scala/vfd/dashboard/ui/instruments/Generic.scala
+++ b/vfd-dashboard/src/main/scala/vfd/dashboard/ui/instruments/Generic.scala
@@ -34,7 +34,7 @@ class Generic(
}
protected def update(value: Double) = {
- rotate(handElement, (value * 270 / (max - min)).toInt)
+ rotate(handElement, value / (max - min) * math.Pi * 3 / 2)
valueElement.textContent = value.toString
}
} \ No newline at end of file
diff --git a/vfd-main/public/images/instruments/balance.svg b/vfd-main/public/images/instruments/distribution.svg
index 57511e9..4061720 100644
--- a/vfd-main/public/images/instruments/balance.svg
+++ b/vfd-main/public/images/instruments/distribution.svg
@@ -15,7 +15,7 @@
version="1.1"
inkscape:version="0.48.5 r10040"
viewBox="-50 -50 100 100"
- sodipodi:docname="balance.svg">
+ sodipodi:docname="distribution.svg">
<defs
id="defs4">
<clipPath
@@ -40,14 +40,14 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="8.45"
- inkscape:cx="103.63625"
- inkscape:cy="35.905276"
+ inkscape:zoom="95.600837"
+ inkscape:cx="19.951598"
+ inkscape:cy="84.621478"
inkscape:document-units="px"
inkscape:current-layer="svg2"
showgrid="true"
inkscape:window-width="1920"
- inkscape:window-height="1029"
+ inkscape:window-height="1033"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">