Raspicam and OpenCV instructions

December 21, 2013 by · Leave a Comment
Filed under: Development, Hardware, Linux, Robots 

I have previously gotten the opencv and python bindings to work via the 2.3 opencv system and facial recognition did work, but the system is bugged out and I could only get 64x64px image size.

I followed these instructions to get the raspicam to work with opencv and simplecv

http://tothinkornottothink.com/post/59305587476/raspberry-pi-simplecv-opencv-raspicam-csi-camera

However, there where some minor details wrong with it so here is a short list of the updates to the installation instructions on that page.

I noticed a few problems as I saw it with the above instructions, or possibly I didn’t read the instructions well enough. That said, very good info! Thank you!

Here are the issues I had:

The opencv_2.4.5.sh script pulls in libopencv-dev which in turn pulls in the entire libopencv2.3 from raspbian repositories, which in turn meant that simplecv was still using libopencv2.3.

apt-get remove libopencv-core2.3

Once that is removed, python-opencv is also removed and simplecv will not even run anymore. Adding the following will add the path to where the python cv bindings are.

export PYTHONPATH=/usr/local/lib/python2.7/site-packages/

And finally, the LD_PRELOAD to actually use the correct uv4l libraries.

export LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so

Once this is done, you should no longer get the munmap errors etc, and large resolution should work:

SimpleCV:1> cam = Camera(0, {“width”:640, “height”:480})

SimpleCV:2> cam.live()

etc.

Mirabox dist-upgrade causes system to deadlock/hang on bootup

May 22, 2013 by · 2 Comments
Filed under: Development, General, Linux 

I think there’s something bad going on between GlobalScales patches in the rootfs images they have for download for the mirabox when doing an apt-get dist-upgrade to the latest version of debian. This causes a complete lockup during boot of the device (network seems to work, but ssh and services are not started in time, and the console is completely locked up). There is pretty much nothing that works in this state, and I’ve found no way to skip ahead and get a login prompt.

I tried booting to Single user mode, but this is not possible because GlobalScale make pretty much everything start in rcS.d. I’m stuck in the same position as in a normal boot as described above, nothing possible to do.

Finally I resorted to using init=/bin/bash and managed to locate the issue down to the S07mountall.sh and/or the S08mountall-bootclean.sh. It seems S07mountall.sh will mount everything from fstab, which also seems to mount “something” on /dev, causing all dev entries to go missing, and hence several different things will just not boot. rm -rf’ing the S07mountall.sh and S08mountall-bootclean.sh script seems to have fixed the issue for me. However,  I’ve severely remade the whole rc.d structure since I think it’s a really bad idea to start so much services in rcS.d as it will block single user mode and kind of against the design philosophy of the init system. This rework may have made the situation better or worse, I’m not completely sure.

If anyone is willing to go more in depth I’d be happy to go into the details with them on what I found.

As for the Mirabox, I think it’s a good device so far, but this is my second GlobalScale device (had a Guruplug Server Plus for almost 2 years as my home server). There are a few things that nags at me so far though:

The file system is having the same issues as the Guruplug Server Plus, strange scripts running at strange times in the bootup procedure (for example, all the stuff that’s gone into the rcS.d directory), the rc.local script calling the /root/init_setup.sh script which in turn is loading a bunch of binary blob drivers and so on and so forth. The device as it is looks really well engineered, but the software is really butchered because of these strange setups. Putting in some good time to create a good integration with Debian (since that’s what they are using anyways) would help insanely much. Also, documenting the reflashing processes and so forth could also be very much helpful.

Reflashing GlobalScale Mirabox filesystem

May 22, 2013 by · 2 Comments
Filed under: Development, Hardware, Linux 

I just worked my way through reflashing the mirabox and figured I’d post some instructions on how to do it. I’ve used the descriptions from this http://www.newit.co.uk/forum/index.php?topic=3880.0 post but found it to be lacking a few steps that could be construed as obvious… perhaps. Especially the use of ubifs is quite new to me, even though the commands are quite straight forward I got snagged up a bit in understanding how it works.

I’ve used the following rescue disk image:

https://docs.google.com/file/d/0B0imSF-34b8dZEc0SFo3N1Fzb0E/edit

And this rootfs image:

http://code.google.com/p/mirabox/downloads/list

Download and install the rescue disk on a microSD card:

  1. fdisk the microSD, create on FAT16 partition of 100mb size, the rest of the device as EXT3.
  2. Unpack the rescue disk
  3. Copy the mirabox file to the FAT16 partition
  4. Extract the rootfs.tgz file to the EXT3 partition.
  5. sync and umount the microSD card
  6. Connect a USB flash device to the computer
  7. Extract the rootfs image downloaded above
  8. Copy the rootfs to the USB flash device.
  9. Disconnect USB device.
  10. Connect micro-sd with mirabox kernel and rootfs to mirabox
  11. Plug in the mirabox to a computer via USB.
  12. Start the mirabox
  13. Hit a key at uboot
  14. >> set bootcmd ‘usb start; fatload usb 1 0x6400000 mirabox; bootm 0x6400000’
  15. >> set bootargs ‘console=ttyS0,115200 root=/dev/sdb2 rootwait’
  16. >> boot
  17. login as root password nosoup4u
  18. connect USB disk with rootfs on it to mirabox
  19. # cd /media/usbX where the rootfs img is located
  20. # ubiformat /dev/mtd2 –flash-image=rootfs-debian6.0-gti-mirabox-v5-0-1-120924.img
  21. # sync
  22. # reboot
  23. disconnect USB disk and remove devices.
  24. login to your hopefully working new filesystem using root/nosoup4u credentials.

 

Ubuntu 12.10 on Dell Precision M4600 APIC issues

February 4, 2013 by · Leave a Comment
Filed under: Hardware, Linux, Ubuntu 

I’ve recently installed Ubuntu 12.10 on a Dell Precision M4600 and had some APIC issues when trying to reboot, the same as everyone else seems to have pretty much. After upgrading the BIOS from A08 to A13 the issues seems to have gone away (not extensively tested, but so far so good).

Before the update, the computer got stuck on the last step of shutting down for restart, but after upgrading to A13 the computer is no longer stuck at that point anymore.

XBMCBuntu stole my heart

November 1, 2012 by · Leave a Comment
Filed under: Linux, Ubuntu 

As some who have read this site before might remember, I didn’t have much luck with LinuxMCE as a media center for my home (basically I couldn’t get any functionality working properly. I got a lot of flack for being pissed and not having talked to the devs/asked for support, which I can understand to some degre).

Anyways, I later on installed XBMCBuntu on my media center that was previously running Mythbuntu (MythTV). I semiliked Mythbuntu, but it had some really nagging issues where it lost my remote control settings and some other settings every time i updated those libraries etc. XBMCBuntu however has really grown on me, some of the functionality is just plain awesome in it, and the ease with which I set it up was amazing. Basically, I had the foundations set up, installed and working within 2-3 hours, downloading subtitles is a breeze, the remote control apps works for my phone and both tablets I have and they got some really nifty functionality (pausing videos when i get a call, scroll through lists of my videos directly in the phone, etc).

XBMC also has excellent support for a ton of different plugins, for example I love the video plugins for SVT Play, TED Talk, and so on. So far, I have nothing but the best to say about XBMC, and I’ve used it for 2-3 months now. The only issues I have are connected to my hardware which is behaving rather strangely (unpredictable boot order and turning on the ethernet wakeup interrupt triggers the machine to boot on its own for some reason. Both issues are unrelated to XBMC however, and the hardware is quite old so…).

Playing with LinuxMCE and thoughts

July 29, 2012 by · 17 Comments
Filed under: Hardware, Linux 

Long time no writing for various reasons. I’ve played around with LinuxMCE for a few days as it looked like a really sweet solution for home automation etc. I’ve previously had a HTPC running mythbuntu as a main server for my home network, then switched for a Guruplug to save electricity and now finally decided for an Atom D525 platform to use as a personal NAS because it draws very little power (17’ish watts), I can hook up a lot of harddrives etc to it, and finally it’s i386 meaning a lot of stuff that was unavailable for the guruplug would start working again (management tools for my UPS for example).

Anyways, I also moved to a house in the last few weeks and decided to start fiddling a bit with home automation and to give one of the dedicated distributions a shot, LinuxMCE because it has support for such a hell of a lot of features etc. Unfortunately, after 2 days of trials I’m severely disappointed by all the bugs and stuff that just wont work with the default settings etc. For example, it took me 1,5 days to get a basic weborbiter (remote controller via web interface) to work. Secondly it took me another 4-5 hours to realize that LinuxMCE absolutely will not run properly with LVM. I have always used an LVM for storing files etc. The LVM currently consists of 2.5TB spread over 3 disks. The only solution I’ve been able to deduce is to get another set of disks, install in LinuxMCE, then copy all the files to that set of disks, and then have 3 disks that I don’t really need atm. On top of this, just getting the graphics output to work was … let’s just say, not easy, and will only work with a very limited set of hardware. On top of this, the Android qOrbiter is extreme alpha quality (crashes so much I can’t describe it, it’s completely useless on 3 different devices).

Over all, I think LinuxMCE could be a really badass solution, but it isn’t because of all the bugs and lousy documentation. Imho, the feeling I get is that the system is developed and installed by a limited group of people who knows about the issues and knows how to get around them. Ie, the claims that “similar” products cost XXXXX USD is offset by the fact that this system really requires a lot of knowledge about this system which will take weeks (if not months) to get and requires you to get a consultant to do the installation for  you.

After a few days of trying to set up a Core/Hybrid properly with a few remotes and a Media Director I just realized I’ll reuse an old harddrive in the machine that was to be the Media Director and set up mythtv on it, and setup the “supposed to be LinuxMCE Hybrid” as a Debian server which replaces the guruplug for network control and basic operations. I’ll have to figure something out when it comes to remote controlling music etc, I’m unsure what yet.I hate being this negative about LinuxMCE, but I really wish this system had worked a bit better for me because it ticks a _lot_ of boxes I’m interested in. I’m guessing the main issue that I stomped into this thinking I’d be able to preserve and reuse existing hardware and harddrives etc, which I’m apparently not able to and obviously caused a lot of headaches. If  you are still interested in trying this out, make sure to start from scratch, do not expect to reuse old tablets etc, get new (old) ones etc.

Bugs, bugs and more bugs

December 12, 2010 by · Leave a Comment
Filed under: Development, Linux, Projects, Ubuntu 

Lately, I’ve come to realize more and more that bug handling in open source, and specifically in Ubuntu has dramatically declined in efficiency. For years I’ve been extremely satisfied with using Linux because it’s bug free, there has simply not been any serious bugs that I’ve run into. In the last weeks, I’ve run into several more or less serious bugs in Ubuntu, which got me looking at how the bug handling is done.

First off, a few weeks ago, I ran into a bug with Ubuntu 10.10 Ubiquity (the Live CD installer) where I accidentally marked my old /home drive as ext4 when it was ext3 (but not to reformat it). The installer complied happily, and set it up as ext4, but once it got back online, the harddrive was completely wiped. No warning, no nothing. I started looking around, after a while I’ve found several reports on the same matter on launchpad.  For example this and this.

This lead me to take a look at Ubiquity’s other bugs in launchpad, and it’s not very promising. The main installer of Ubuntu 10.10 has 1528 Open bugs as of writing this, of which 846 bugs are new, 35 bugs are marked High importance — and the bugs I found (dare I say, they seem Critical to me, are still not marked with any importance at all). Only 12 bugs are marked as having a patch.

Fine, maybe this is not the poster child of open source. However, the last few days I’ve been severely annoyed by the password popup which is misbehaving. I enter the password, and hit enter (or hit the Authenticate button) and the password field disappears, but the rest of the dialog stays up, and nothing works in it. The only thing you can do is to kill it with the x button. When you do this, you get authenticated…

Since I’m not sure exactly how the authentication is performed in Ubuntu for the update manager etc, I decided to check the update-manager package for Ubuntu on Launchpad. What do I see, if not another package with gigantic mass of bugs filed, but noone dealing with them. 1017 Open bugs, 520 of those are New and 15 marked as High importance. This bug I’ve been having has been reported all over the net, but noone seems to be dealing with it and it isn’t really reported in launchpad. Some computers has it, some doesn’t. It’s nowhere near a critical bug, or even a high importance one, but it’s annoying none the less and it looks extremely crude and comes off giving a fairly unstable feeling.

All this being said, I am wondering how bug handling is done, and how it should be managed on “aggregate” projects such as Debian and Ubuntu. I think the idea is really nice, having upstream bug trackers for each package in the project, but maybe we are spreading too thin having several bug trackers for each minor project? Also, how do we as “normal” users know which package is the reason for the error? I am not so sure it is really the update-manager that is the error in this case, it might as well be some completely other thing behind all that dbus stuff etc. Ie, what is the point of me filing bug reports if I’m not sure they wind up in the right place, or are at all looked after?

Ubuntu 10.10 r8192se_pci driver on the Toshiba Satellite T130-17E (Realtek RTL8191SEvB)

December 10, 2010 by · 4 Comments
Filed under: Development, Linux, Phone, Ubuntu, Windows 

I’ve been home for a few days with a really bad back, and the only thing I’ve been able to do is watch tv, and some minor work with the laptop. I’ve been running Windows 7 which it was delivered with for a few months to get a feel of it, and I must say I was pleasantly surprised for the most part. It hasn’t crashed more than once or twice in three months, and it is fairly snappy (except boottimes seems to get worse and worse, at this point it takes 2-3 minutes to boot). Anyways, for some reason I get a bit sad inside (and bored) every time I boot Windows, there is just “something” about the feel, the look or… I can’t really put my finger on it, that I can’t stand. How the windows open and close perhaps, I just don’t know.

So, yesterday I wanted to test android SDK, re-realized just how much of a bitch it is to install stuff on Windows, so I finally got around to installing Ubuntu 10.10 on it (Already running 10.10 on desktop and mediapc), removing the extra backup partition they deliver laptops with these days. Sidenote, isn’t it a bit like selling a candle with a flammable fire extinguisher to sell a laptop with 500gig harddrive, split it in half, and use on half for “backups”? I digress.

So, installation went almost flawless. The wireless card was identified, saw networks, but was unable to connect to any of them. I managed to pass the installation using trusty old cables, and after installation was done I started fiddling about, reading on the net etc, and found noone who had solved the combination or at least written about it.

Main problem seems to have been hardware wep encoding/decoding, which can be turned off using the hwwep flag to the r8192se_pci module. On Ubuntu 10.10, remove the module, and then reload it by doing this:

rmmod r8192se_pci
modprobe r8192se_pci hwwep=0

If your network works now, you can automate the setting by editing/adding the configuration to modprobe.d, by editing /etc/modprobe.d/realtek.conf and adding the following line:

options r8192se_pci hwwep=0

I hope this has been some help!

Guruplug arrived, sounds like a jet

October 8, 2010 by · 3 Comments
Filed under: Development, Hardware, Linux 

The first few paragraphs here are rather harsh vs the Guruplug that I received, and yes, GlobalScale deserves some really bad critique for how this has been handled, but please read the final parts to get a full picture. In all honesty, sometimes I think I should just change name to “Grumpy Fart”.

I finally received the Guruplug Server Plus last week that I ordered 3 months ago. My first reaction is a big WTF on this machine. Apparently, they’ve had big troubles with overheating in the Guruplug, so badly so that a lot of units died from it. Someone over at GlobalScale Technologies had the absolutely idiotic idea to put a fan into the machine. It’s not just any fan, it’s a 2 cm maglev fan running at 3-4000 rpm, and no powermanagement whatsoever and it is directly hooked up to the power source inside the Guruplug, hence it will not be possible to vary the rpm, ever, without a hardware hack. Also, the fan is absolutely horribly placed as is evident from several pictures on the net (and by opening the machine, voiding the warranty) — it is placed with 80-90% of the back of the fan covered by a metal plate (the two gigabit ethernet interfaces), and when the machine is closed up as delivered, it has a big plastic plate (power source cover) covering the front of the fan, with less than 2 mm clearance. All this means is that it is incredibly noisy (easily 30-40dB, way louder than my core 2 quad machine with 8 gig ram and 4 fans in it, while in bootup and before the nvidia graphics card has gone into power management), and has close to no effect at all.

I bought this machine when there was no fan, and there wasn’t even talk of a fan or any mails to acknowledge this design change, so I was heavily inclined at sending the thing back for a refund, but I realized that with my normal luck, it would take several weeks to find a new machine matching my needs, and then another few months before receiving it. Because of this, I winded up simply ripping out the fan, and voiding the warranty. So far so good, and nothing bad has happened. The plug is still running approximately at the same temperature as before, but slightly higher, and I hope there will be no ill effects.

Second WTF when I finally got the machine started up was the installation — first off it is a really nice debian install, I was prepared to start straight off with the jtag interface and installing images and reinstalling etc etc, but there was a perfectly working machine there, straight off. Nice. I thought. Then came the wtf moment, the machine booted up and set an ip address for the uap0 interface (wifi access point interface) to 192.168.1.1. My plan is to use it hooked up to a wired network via gigabit, so I went straight at it, added the eth0 interface to /etc/network/interfaces with a static ip, delete routes and ip’s for uap0 and it worked… for an hour or so, then it stopped working. Reboot, still not working, notice that uap0 is back at it’s old location 192.168.1.1 and routes are back, but nothing in the bootup scripts. Finally find out they have a /etc/init.d/rc.local file point to a /root/init_setup.sh, which in turn does a heap of stuff — including setting up network parameters etc, overriding the normal configuration parameters in a nonstandard way.

Personally, I find this type of “hacked” environments to be despicable. For a private system in your home, fine do whatever you wish, but when it is a public server at a company, or something that you sell to customers, you wind up with a product that the other admins and/or customers can not trust the setup of. Luckily, the whole system is at least included in installed .deb packages. The init_setup.sh, together with the fact that there is no way of recovering if you do a simple screw up of the network setup without the JTAG interface is a major drawback imho.

So… that is the “bad” part of my experience so far. At this point I was rather underwhelmed, but I have been pleasantly surprised by the performance of the little bugger, and except for the startup scripts, it is rather nicely installed from what I have see so far. It would be interesting to gather up a complete list of the “hacks” they have performed to get it all together. The machine is currently able to do exactly what I set out to do, in less than a 2 days of configuration/fixing/fiddling about/etc. I didn’t manage to get the “auto connect” of my usb disk to work, but mount commands work and I didn’t really look at how it’s supposed to work (might be that you need to reboot machine etc). The idea with the machine on my part, is to set it up as a 24/7 machine, replacing my other machine doing this work, but at a lower power consumption. So far, the machine is running the following services for me:

  • DHCP
  • Dynamic DNS
  • Samba and NFS filesharing
  • Ssh network login server
  • USB Disk/”NAS” function
  • Bittorrent (transmission-daemon with transmission-remote on all other machines)

Additionally I hope to use it for the following as well:

  • Printer server
  • Zeroconf/avahi
  • Firewall (possible use as a portable firewall?)
  • Temperature sensors etc via GPIO?
  • Bluetooth, still haven’t figured out what to do with this…

As you can see, the machine is very capable, and all at a very low power consumption of <5W compared to my old computer doing all this, running at 170W approximately. At current power costs, I am expecting to have made up the money I spent on the Guruplug within less than 9 months. Let’s just keep fingers crossed that the machine wont die of heat before that 🙂 .

Conclusion

In conclusion, I am really afraid to say anything but this, I can not really recommend this product, not unless you’re either ready to do some serious hacking, or you plan to run it in a garage or some such place. A wardrobe or closet is simply not enough, it sounds too much as it is. The idea and the thought behind the machine is great, I just wish the execution of it was as good.

Shaving some time

May 24, 2010 by · 3 Comments
Filed under: Development, Linux 

I was talking to a colleague the other day and got into a discussion regarding some ways of coding c++, such as whether to use division or bit shifting — almost all modern  compilers can optimize this so it’s basically just a matter of what looks best. At the same time, we got into a minor discussion regarding references and pointers in c++. I made a small test and found some rather amusing results, which is quite obvious once you think about it, but still very scary considering how common it is to use the pointer construct:

// Compile using g++ -lrt -o lala lala.cpp
#include <iostream>
#include <time.h>

int* lala_ptr()
{
    int *y = new int;
    *y = 5;
    return y;
}

int& lala_ref()
{
    int x =5;
    int &y = x;
    return y;
}

timespec diff(timespec start, timespec end)
{
    timespec temp;
    if ((end.tv_nsec-start.tv_nsec)<0) {
        temp.tv_sec = end.tv_sec-start.tv_sec-1;
        temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
    } else {
        temp.tv_sec = end.tv_sec-start.tv_sec;
        temp.tv_nsec = end.tv_nsec-start.tv_nsec;
    }
    return temp;
}

int main(int argc, char **argv)
{
    timespec time1, time2, time3;

    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
    for (unsigned int i=0;i<(unsigned int)-1;i++)
    {
        int &z = lala_ref();
    }
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
    for (unsigned int i=0;i<(unsigned int)-1;i++)
    {
        int *z = lala_ptr();
        delete z;
    }
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time3);

    std::cout << "Reference diff(" << time1.tv_sec << ":" << 
                time1.tv_nsec << ", " << 
                time2.tv_sec << ":" << 
                time2.tv_nsec << ") = " << 
                diff(time1, time2).tv_sec << ":" << 
                diff(time1, time2).tv_nsec << std::endl;

    std::cout << "Pointer diff(" << time2.tv_sec << ":" << 
                time2.tv_nsec << ", " << 
                time3.tv_sec << ":" << 
                time3.tv_nsec << ") = " <<
                diff(time2, time3).tv_sec << ":" << 
                diff(time2, time3).tv_nsec << std::endl;
}

Below is a sample of the output generated by the test code above:

oan@laptop4:~/Projects/test$ ./testRefVsPointer 
Reference diff(0:3869272, 25:234466470) = 25:230597198
Pointer diff(25:234466470, 299:547382527) = 274:312916057

So, the question for you all, can you figure out what's wrong? 😉

« Previous PageNext Page »