Contenu connexe Similaire à Hummingbird - Open Source for Small Satellites - GSAW 2012 (20) Hummingbird - Open Source for Small Satellites - GSAW 20121. Hummingbird: an Open
Source Ground Segment
for Small Satellites
A true story of doing things different
GSAW 2012
Gert Villemos (Villemos Solutions)
Mark Doyle (Logica) and Johannes Klug (Logica)
2. What is ‚Hummingbird„
• An open source software framework (Apache License)
• For building ground segment systems for small satellites
• A „back to basics‟ approach
• Using simplicity as a design principle
• Pushing as much functionality as possible to existing
technologies
www.hbird.org and facebook
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 2
3. The world
5 years…
8 years…
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 3
4. The world we live in
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 4
5. Business Plan
2.0
1.0
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 5
6. Back to Basics
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 6
7. Thesis
• Ground segment systems for satellites is no longer special;
we move data from A to B
• Modern network technologies can be used and are better.
Lets stop reinventing the wheel
• Complexity is inherited (… and often cultural) and propagates
through our systems. It is the root of all evil
• Find the root course and remove it. Ground segment system
can be really simple
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 7
8. ‚New„ Implementation Concept
Us Someone else
This is hardly brain surgery
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 8
9. Technology Stack (fantastic four)
• Spring
• Camel
• ActiveMQ
• Cometd
... and yes, its all Java
... But components in other
languages can be integrated
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 9
10. Evolution
Hummingbird 0.1
• Classical separation into tiers (transport, business, presentation)
• CCSDS stack Frames → Packets → Parameters
• Distribution of predefined types
• Centered on centralized „System Model‟ (think runtime XTCE)
Hummingbird 0.2
• CCSDS stack „banned‟ to transport tier, fully encapsulated
• True asynchronous processing
• Semantic information model, non-relational databases
• Distribution of „what-ever‟ with plugable services
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 10
11. System Integration
GHttp JPA
JBI Krati
SAX Crypto
APNS
AMQP
Nagio
RNG RNC JDBC
s HL7 JMX
JMS Kestre
UDP SMTP HDF
SQL l
IRC Comet
SIP SRMI
FTP TCP LDAP
XMPP
d
SNMPPOP RSS SSH REST
JCloud AWS
Mina
DNSs PAX JT400
File
Atom iMAP Hazelcas
t
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 11
12. Semantic Data
Demand complete Scalable Extendible
rethinking of processing stateOf
model. An architectural
driver. State X
Name
Description
Raw Value
withRaw
Description Eng Value
stateOf
Description
Description
State A
Description State B
stateOf State C
Description
Non-normalised stateOf
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 12
13. Service
B B
p4
Limit Check Service p1 p2 p3
Consumes: Parameter message
Emits: State Parameter
Description: The limit check service
takes as input a parameter, checks its e1 e2 e3
limit and emmits a state parameter
corresponding to the limit with value
„true‟ (in limit) or „false‟ (out of limit).
Parameter State Heartbeat
Heartbeat Service
Consumes: None
Emits: Heartbeat
Description: Issues a ‚alive„ message at
intervals.
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 13
14. First Flight
Coming up
• EstCube (University of Estland)
• Strand (Surrey Satellites)
• TechDemoSat-1 (UK Space Agency)
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 14
15. Initial Results
• Having implemented guestimated 10% of the functionality of
similar existing systems
• Commanding (scheduling, pre release
validation, release, verification and history)
• Monitoring (parameter creation, limit check, consistency
check, calibration and history)
• Orbit and contact prediction New code base 1k LoC
Existing code
Projected code base
base ~1m Lines
10k LoC
of Code (LoC)
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 15
16. Value
• Highly motivated staff, learning by doing
• Concepts feedback into winning „normal‟ work
• Door opener to new, and frequently unexpected,
markets
• Great PR
• Neither predictable nor quantifiable but very real
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 16
17. Business Model
• Open Source Core
• Enterprise Edition
• Liability
• Tested
• Proven
• Documented
• Evolution plan
• Ahead of the curve
• Services and added value products
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 17
18. Conclusions
• Nothing is more convincing than to stop talking and start
doing
• Standard technologies (of course) work for space data
systems
• System integration can be very simple, we make it complex
• ‚Managing„ an open source community is not simple
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 18
19. ? ? ! ?
! ? ? ! ! ?
Questions?
Read more at: www.hbird.org and facebook
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 19
20. Business Tier
CometD Streaming
Spring Component Assembly
Camel Integration
ActiveMQ Distribution
Services
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 20
21. WARNING: Source code ahead!
... the message is not in the code itself, but in the changes to the code
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 21
22. The Modern Code Base
public class Manager implements IManager {
protected IWorker worker = new Worker();
public void manage() {
worker.work("1:2:3");
}
}
public class Worker implements IWorker {
protected IPublisher publisher = new Publisher();
public void work(String values) {
String[] elements = values.split(":");
for (String element : elements) {
long value = Long.parseLong(element);
publisher.display(value);
}
}
}
public class Publisher implements IPublisher {
public void display(long value) {
System.out.println("Test value: " + value);
}
}
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 22
23. The Modern Code Base
public class Manager implements IManager {
protected IWorker worker = new Worker();
public void manage() {
worker.work("1:2:3");
} Only three lines of
}
business logic here...
public class Worker implements IWorker {
protected IPublisher publisher = new Publisher();
public void work(String values) {
String[] elements = values.split(":");
for (String element : elements) {
long value = Long.parseLong(element);
publisher.display(value);
}
}
}
public class Publisher implements IPublisher {
public void display(long value) {
System.out.println("Test value: " +
value);
}
}
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 23
24. The Modern Code Base
public class Manager implements IManager { <bean id=“manager” class=“foo.Manager”/>
protected IWorker worker = new Worker(); <bean id=“worker” class=“foo.Worker”/>
public void manage() { <bean id=“publisher” class=“foo.Publisher”/>
worker.work("1:2:3");
} <route>
} <from uri=“timer://foo?period=60000”/>
<to uri=bean:manager" />
<to uri=“bean:worker”/>
<to uri=„bean:publisher"/>
public class Worker implements IWorker { </route>
protected IPublisher publisher = new
Publisher();
public void work(String values) {
String[] elements = values.split(":");
for (String element : elements) {
long value = Long.parseLong(element);
publisher.display(value);
}
}
}
public class Publisher implements IPublisher {
public void display(long value) {
System.out.println("Test value: " + value);
}
}
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 24
25. The Modern Code Base
public class Manager implements IManager { <bean id=“manager” class=“foo.Manager”/>
protected IWorker worker = new Worker(); <bean id=“worker” class=“foo.Worker”/>
public void manage() { <bean id=“publisher” class=“foo.Publisher”/>
worker.work("1:2:3");
} <route>
} <from uri=“timer://foo?period=60000”/>
<to uri=bean:manager" />
<split>
<method bean=“worker”/>
public class Worker implements IWorker { <to uri=„bean:publisher"/>
</split>
protected IPublisher publisher = new </route>
Publisher();
public void work(String values) {
String[] elements = values.split(":");
for (String element : elements) {
long value = Long.parseLong(element);
publisher.display(value);
}
}
}
public class Publisher implements IPublisher {
public void display(long value) {
System.out.println("Test value: " + value);
}
}
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 25
26. The Modern Code Base
<bean id=“manager” class=“foo.Manager”/>
public class Manager {
<bean id=“worker” class=“foo.Worker”/>
public String manage() {
return "1:2:3";
<bean id=“publisher” class=“foo.Publisher”/>
}
}
<route>
<from uri=“timer://foo?period=60000”/>
<to uri=bean:manager" />
<split>
<method bean=“worker”/>
public class Worker { <to uri=„bean:publisher"/>
</split>
public String[] work(String values) { </route>
return values.split(":");
} Massive code base reduction
}
Only business logic in the
code, routing in the configuration
Fantastic code metrics (no
public class Publisher {
coupling)
public void display(long value) {
System.out.println("Test value: " + value); 100% test coverage easy to reach
}
}
© Logica 2012. All rights reserved HTML5 and JavaScript rock! No. 26