Archiv für Kategorie ‘Programieren’

Arucomover

Dieser kleine Bot ist nun fast fertig. Er kann sowohl manuell über eine Web UI gesteuert herum fahren und Aruco Codes in einem Kamera View erkennen. Auf Automatic geschaltet fährt er selbständig die Codes an. Leider hat das verwendete Chasis derart großen Spiel in der Aufhängung der DC Motoren, daß eine wirklich gerade Fahrt nicht möglich ist.

Genauer beschrieben ist er im Wiki https://www.hackerspace-ffm.de/wiki/index.php?title=Arucomover

Der Code für die Arucoerkenung und für den ItsyBitsyM4 ist in Python geschrieben.

Das Frontend und die Steuerung basieren auf Node Red und dessen Dashboard

Der Code und ein Setup für den Raspberry ist im Github Repo https://github.com/hackffm/arucomover

python virtual env the new way

da ich es immer wieder suche und im Netz jede Menge alte wege sind hgier der neue und besser integrierte Weg

Python 3 dDoku

create
python3 -m venv /path/to/new/virtual/environment
activate (switch into venv)
source /bin/activate
C:\> \Scripts\activate.bat
deactivate (leave venv)
deactivate

PIP commands

weil ich es einfach immer wieder suche

Update aller beraits runtergeladenen Paket
sudo -H pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U

wenn man über die env python 2 hat aber über python3 pip install starten will
python3 -m pip
eventuell als sudo

Pip sagt das zwar immer, wenn es das braucht
pip install --upgrade pip

Pip alles aus requirements.txt installieren
pip install -r /path/to/requirements.txt

requirements.txt erstellen
pip freeze > requirements.txt

Oneliner to rename all files with simple enumeration

Mit diesem Kommando werden alle jpg Files im aktuellen Verzeichnis nach dem Muster 1.jpg,2.jpg,3.jpg… umbenannt

ls | cat -n | while read n f; do mv „$f“ „$n.jpg“; done

Zertifikat in lokalen Java Keystore laden

Damit eine Java Anwendung ohne in einem Anwendungs Container SSL zur Verfügungen bekommen , trotzdem mit verschlüsselten Verbindungen arbeiten kann, müssen die Public Keys in den lokalen Zertifakats Store geladen werden….

Nur weiß man eigentlich nicht wo der bei Java ist oder wie das geht, darum dieser Artikel…zur Erinnerung

Der lokale Cert Store ist ein File bei der runtime im …\jre\lib\security folder.

Das Tool um das Cert zu sichern liegt in  ..\jre\bin und heisst einfach (bei Windows) keytool.exe

Der Befehl um ein Zertifikat in allen lokalen Anwendungen zur Verfügung zu haben muss so einmalig (unter Windows XP) ausgeführt werden

 

keytool.exe -import -file %PATHTOCERT%\subCA.cer -keystore "%PATHTOJRE%\jre\lib\security\cacerts" -alias "Irgend eine irrelevant Bezeichnung"

oder unter Unix


keytool.exe -import -file %PATHTOCERT%\subCA.cer -keystore "%PATHTOJRE%\jre\lib\security\cacerts" -alias "Irgend eine irrelevant Bezeichnung"

Sollte nach einem Passwort gefragt werden, kann man „changeit“ probieren“

Hier findet man weitere Beispiele um mit dem Keytool zu arbeiten

So jetzt kann man jede Menge Java Code schreiben, der Verschlüssel Webservices, Webseiten, Datenbanken usw abfragt…man braucht ja noch Projekte 😉

Extract tar.gz in Java

wieder mal was nettes in Java, daß man immer mal wieder braucht

benütigt wird org.apache.commons.compress !

Bestimmtes File aus einem tar.gz extrahieren

private boolean extractFile(String targzFile, String fileName) throws FileNotFoundException, IOException {

boolean extracted = false;
final File inputFile = new File(targzFile);
final GZIPInputStream in = new GZIPInputStream(new FileInputStream(inputFile));
final TarArchiveInputStream tarInput = new TarArchiveInputStream(in);
OutputStream outputFileStream = null;

TarArchiveEntry entry;

while (null!=(entry=tarInput.getNextTarEntry())) {
if(entry.getName().contains(fileName)){
String foundFile = entry.getName();
System.out.println("Found " + foundFile);
try{
foundFile = foundFile.substring(foundFile.indexOf("/")+1);
final File outputFile = new File(OUTPUT_DIR + "/",foundFile);
outputFileStream = new FileOutputStream(outputFile);
IOUtils.copy(tarInput, outputFileStream);
outputFileStream.close();
}catch (Exception ex){
ex.printStackTrace();
System.out.println("Failed extracting " + foundFile);
}
}
}

in.close();
tarInput.close();
outputFileStream.close();

return extracted;
}

tar File aus einem tar.gz extrahieren

private File unGzip(String targzFile, String tarFile) throws FileNotFoundException, IOException {

File inputFile = new File(targzFile);
File outputDir = new File(tarFile);

o.logDebug(String.format("Unzipping %s to dir %s.", inputFile.getAbsolutePath(), outputDir.getAbsolutePath()));

final File outputFile = new File(outputDir, inputFile.getName().substring(0, inputFile.getName().length() - 3));

final GZIPInputStream in = new GZIPInputStream(new FileInputStream(inputFile));
final FileOutputStream out = new FileOutputStream(outputFile);

IOUtils.copy(in, out);

in.close();
out.close();

return outputFile;
}

RoboW Wochenende

Hatte an diesem Wochenende mal Gelegenheit an der Uni Dortmund bei einem RoboW Wochenende Teil zu nehmen. RoboW steht für einen Roboter Workshop. In diesem Fall ging es darum die Roboter Firmware auf dem NAO für die standartisierte Roboterliga SPL zu optimieren und Neues zu probieren. Dort spielen verschieden Teams gegeneinander um die Umsetzungen dann in einem Fussballspiel zu prüfen. Ich habe bei dem Frankfurter Team bembelbots mitgearbeitet.

Hier ein paar Impressionen:

Die haben sogar ein ganzes Institut für Roboterforschung…cool !

Institut

Früher wurde mit dem Aibo gespielt, hier ein paar der armen ausgemusterten Hunde

Bot20140301Dog

Aibo zerlegt

Die Spieler nehmen Aufstellung

Aufstellung

Manchmal war es trotz gegenseitiger Hilfe und langer Coding Sessions zum Verzweifeln

Verzweifelt

 Hier noch ein kleines Video von dem Event

Die Probleme waren teilweise recht complex und mir liegt diese „C++ Denke“ noch nicht wirklich…aber man braucht ja noch Projekte 😉

 

XML mit Java

habe mal wieder ne nette Library aufgetan, darum zur Erinnerung ein Beispiel wie man mit Dom4J ein XML erstellt


Document document = DocumentHelper.createDocument();
Element root = document.addElement( "scritturaDocument");

root.addElement("Year").setText("1990");
root.addElement("NextYear").setText("1991");
root.addElement("IS").setText("IDA");

if (root.elementText("Year") != null){
root.element("Year").setText("2014");
}else{
root.addElement("Year").setText("2014");
}

OutputFormat format = OutputFormat.createPrettyPrint();

StringWriter sw = new StringWriter();
final XMLWriter writer = new XMLWriter(sw, format);
writer.write(document);
System.out.println("XML Result:" + sw.toString());

C++ einfach mal was Serial gesendet

man möchte aus seinm Progrämmchen einfach mal was schicken können. Da ich ziemlich lange damit rum gemacht habe hier die Lösung, die einfach funktioniert und kaum Zeilen Code braucht. Das Progrämmchen liest einen String von der Console und schickt ihn z.B an einen Arduino


#include "SenSerial.h"
#include // include boost
using namespace::boost::asio; // save tons of typing
#include
#include
using std::cin;

const char *PORT = "/dev/ttyUSB0";
serial_port_base::baud_rate BAUD(19200);
serial_port_base::flow_control FLOW( serial_port_base::flow_control::none );
serial_port_base::parity PARITY( serial_port_base::parity::none );
serial_port_base::stop_bits STOP( serial_port_base::stop_bits::one );

int main()
{
io_service io;
serial_port port( io, PORT );
port.set_option( BAUD );
port.set_option( FLOW );
port.set_option( PARITY );
port.set_option( STOP );

std::string command = "";
cin >> command;
command += "\n";
write( port, buffer( command, 8 ) );
printf("Done !");
return 0;
}

Hallo World in Wicket

Wicket ist ein Java Webframework, daß sehr schlank und besonders nah am nativen Java Code sein will. Da ich gerade ein wenig versuchen will etwas im Embedded Berich zu machen, kommt mir das gerade recht. Leider funktioniert wie so of das Hallo World Beispiel nicht

Hier die notwendigen Schritte, die man auf der Console ausführen muss auch wenn man noch so viele Maven Plugins hat

mvn archetype:generate -DarchetypeGroupId=org.apache.wicket -DarchetypeArtifactId=wicket-archetype-quickstart -DarchetypeVersion=6.7.0 -DgroupId=com.trytry -DartifactId=myhelloworld -DarchetypeRepository=https://repository.apache.org/ -DinteractiveMode=false

cd myhelloworld/

mvn install

mvn compiler:compile

Danach in Eclipse ein existierendes Maven Projekt hinzufügen.
Dann als Java Applikation starten und wups hat man auf dem Localhost eine Wicket Webseite in einem embedded WebApp Server.

So wie ich es haben wollte. Nun kann ich das ganz ja zur richtigen Applikation aufbohren und dann auf einen Einplantinen PC portieren….

Naja wohl nicht ganz so adhock aber man braucht ja noch Projekte 😉

Nach oben