Skip to content

agb32/aravis

Repository files navigation

=======
Aravis
======

Aravis is a glib/gobject based library for video acquisition using Genicam cameras. It currently only implements an ethernet camera protocol used for industrial cameras.

Aravis is released under the LGPL v2+.

Links
=====

    Mailing list: aravis@freelists.org ( http://www.freelists.org/list/aravis )
    Releases: http://ftp.gnome.org/pub/GNOME/sources/aravis
    Git repository: http://git.gnome.org/cgit/aravis
    Bugzilla: https://bugzilla.gnome.org/browse.cgi?product=aravis
    Blog: http://blogs.gnome.org/emmanuel/category/aravis/
    Genicam standard : http://www.genicam.org


Also see docs/camAravis.tex

Works best with a dhcp server, so that cameras get assigned an IP address.

Things to install to get working... fedora (I think):
sudo yum install gstreamer-plugins-base-devel
sudo yum install libnotify-devel
sudo yum install gtk2-devel
sudo yum install gtk3-devel
sudo yum install gtk+-devel
sudo yum install gstreamer-devel
sudo yum install libxml2-devel
sudo yum install libxml2
sudo yum install libxml-devel
sudo yum install glibc-devel glib2-devel
sudo yum install gstreamer-0.10
sudo yum install gstreamer
sudo yum install glib2
sudo yum install intltool

fc20:
sudo yum install gstreamer-plugins-base-devel libnotify-devel gtk2-devel gtk3-devel gtk+-devel gstreamer-devel libxml2-devel libxml2 libxml-devel glibc-devel glib2-devel gstreamer-0.10 gstreamer glib2 intltool


Ubuntu: intltool gstreamer-0.10 libnotify-dev gtk+-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libgtk2.0-dev gstreamer0.10-plugins-bad

Also, maybe:  
gstreamer-tools

These, actually, not required:
gobject-introspection
gtk2.0-dev

./configure --enable-viewer
make
sudo make install
cd src
make -f Makefile.darc
cp libcamAravis.so /path/to/darc/lib/ #(eg /rtc/lib/ or /opt/darc/lib/)
arv-viewer



Set the networking:
ifconfig ethX mtu 9000  # X is the ethernet port with camera on it.
sysctl -w net.core.rmem_max=26214400 

Put into /etc/sysctl.conf:  (from myricom website)
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 250000

Maybe also:
net.core.rmem_default =	4194304


Then use:
sysctl -p /etc/sysctl.conf

Possible options (with defaults for gpuserver shown):
net.ipv4.udp_mem = 579720	772963	1159440
net.ipv4.udp_rmem_min = 4096   # Maybe set to 16384?  Or 65536
net.ipv4.udp_wmem_min = 4096

And:
sysctl -w net.core.wmem_max=16777216
sysctl -w net.core.rmem_default=4194304

Other options: 
IRQ binding:
http://fasterdata.es.net/host-tuning/interrupt-binding/

Try: echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter  (or ethX)
to disable reverse path filtering.
Set net.ipv4.conf.default.rp_filter=2  or 0?
eg :
echo 2 > /proc/sys/net/ipv4/conf/default/rp_filter  #(or 0?)
echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter      #(or 0?)

dhcpd /etc/dhcp*/*.conf
/etc/defualt/isc-dhcp-server

Also - in camAravis - I now set the socket buffer to 16*npxls - so
that it has a large enough buffer to store them all.  In reality, for
large cameras it may get set to less than this if rmem_max is
smaller.  Also - might want to do something cleverer at some point to
reduce memory...


For a good overview of how to maximise network performance, have a
look at:
https://blog.cloudflare.com/how-to-achieve-low-latency/


To change framerate etc... (bobcats)

arv-tool-0.2 control ProgFrameTimeEnable=true
arv-tool-0.2 control ProgFrameTimeAbs=100000 #to set exp in us.

PixelSize Bpp16


Full list of features can be obtained with arv-tool... (--help is friend!)

Doesn't work when viewer is running...

Other things to set are:

TriggerMode=On/Off
TriggerSource=TimerTrigger/External/Software
ExposureMode=Off/Timed/TriggerWidth (Not available)/IOExposureControl

AcquisitionMode=Continuous/SingleFrame


Various trigger options to test with external triggering.

ExposureTimeRaw

TriggerType=Standard/Fast/Double/Asynchronous/FrameAccumulation

Probably want standard.


GainRaw= an integer...
ExposureTimeRaw=  (not sure if works)



Access to pixel stream in arvgvstream.c...

arv_gv_stream_thread
Used in arv_gv_stream_new

Called in arvgvdevice.c function arv_gv_device_create_stream.
Which is called by arv_gv_device_class_init

But, this isn't called anywhere!



arvexample.c:

	camera = arv_camera_new (NULL);
		stream = arv_camera_create_stream (camera, NULL, NULL);
			g_signal_connect (stream, "new-buffer", G_CALLBACK (new_buffer_cb), &data);


arv_camear_create_stream has:
arv_device_create_stream which is in arvdevice.c
This calls the create_stream method of ArvDevice objects.

This is probably the arvgvdevice.c device_create_Stream object.

Can we do it without the g_signal_connect?  

The device_create_stream method calls arv_gv_stream_new, which is in
arvgvstream.c


Example in tests/arvcameracallbacktest.c

Multiple cameras...
I think need to look at GMainContext.

Probably g_main_context_push_thread_default ()


Problems on cpuserver after a reboot.  dhcpd wasn't configured
correctly - now fixed.
Imperx, inc.-110324   - bobcat2


Imperx, inc.-110323   - bobcat3


Test with tests/arv-camera-callback-test  [--name="Imprex, inc.-110323"]
tests/arv-multi-camera --name="Imperx, inc.-110323;Imperx, inc.-110324"

Works with 2 cameras, including setting of parameters... (though needs to close the stream to do this).


gcc -c arvmulticamera.c -I../src/ `pkg-config --cflags glib-2.0`
gcc -o arvmc   -L../src -pthread arvmulticamera.o ../src/arvbuffer.o               ../src/arvgcfloat.o ../src/arvcamera.o               ../src/arvgcgroupnode.o ../src/arvdebug.o                ../src/arvgcindexnode.o ../src/arvdevice.o               ../src/arvgcintegernode.o ../src/arvdomcharacterdata.o     ../src/arvgcinteger.o ../src/arvdomdocumentfragment.o  ../src/arvgcinvalidatornode.o ../src/arvdomdocument.o          ../src/arvgcnode.o ../src/arvdomelement.o           ../src/arvgc.o ../src/arvdomimplementation.o    ../src/arvgcport.o ../src/arvdomnamednodemap.o      ../src/arvgcpropertynode.o ../src/arvdomnodelist.o          ../src/arvgcregisterdescriptionnode.o ../src/arvdomnode.o              ../src/arvgcregisternode.o ../src/arvdomparser.o            ../src/arvgcregister.o ../src/arvdomtext.o              ../src/arvgcstring.o ../src/arvenums.o                ../src/arvgcstructentrynode.o ../src/arvenumtypes.o            ../src/arvgcswissknife.o ../src/arvevaluator.o            ../src/arvgcvariablenode.o           ../src/arvgvcp.o           ../src/arvgvdevice.o         ../src/arvgvinterface.o      ../src/arvgvsp.o            ../src/arvgvstream.o ../src/arvgcboolean.o            ../src/arvinterface.o ../src/arvgccategory.o           ../src/arvmisc.o ../src/arvgccommand.o            ../src/arvstream.o ../src/arvgcconverter.o          ../src/arvstr.o ../src/arvgcenumentry.o          ../src/arvsystem.o ../src/arvgcenumeration.o         ../src/arvgcfeaturenode.o   ../src/arvfakeinterface.o ../src/arvfakedevice.o  ../src/arvfakestream.o ../src/arvfakecamera.o  ../src/arvzip.o ../src/arvgcfloatnode.o  `pkg-config --cflags --libs dbus-1 dbus-glib-1  glib-2.0` -pthread -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lxml2 -lgthread-2.0 -lrt -lglib-2.0 -lz -lm 


To install the darc module...:
Install the above dependencies, then:
./configure --enable-viewer
make
cd src
make -f Makefile.darc

If get the -fPIC warning, have to edit src/Makefile and add -fPIC to the cflags line.  Then do (in src/):
touch *.c
make
make -f Makefile.darc
make -f Makefile.darc install
cp ../conf/configBobcat2cam.py /rtc/conf

If you get an error, check that the config file is pointing to the 2 cameras you want to use...



FOR multicasting:
If it doesn't work out of the box, try the following settings
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter 
echo 0 > /proc/sys/net/ipv4/conf/eth10/rp_filter 
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
Or 2...
ifconfig eth10 promisc

For multicasting, in the config file, need to specify the multicast
address, and also whether you are the camera master (responsible for
setting everything up).  And, it should be that simple!

About

fork of aravis 0.3.1 with darc mods

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors