Xenomai on Raspberry Pi

25 juillet 2012 par jed 35 commentaires »

Post to Twitter

Xenomai is a real-time development framework cooperating with the Linux kernel, in order to provide a pervasive, interface-agnostic, hard real-time support to user-space applications, seamlessly integrated into the GNU/Linux environment.http://en.wikipedia.org/wiki/Xenomai

if you just want to try xenomai here is my latest image : xenomai.img

SHA-1 bb71b783d3d20edd58287eb1b0bf49bd5d9007de
Default login Username: jed Password: jed

Download the source tree and patches

On your Linux PC move to your home directory and download Chris Boot’s rpi-3.2.21 branch (https://github.com/bootc/linux/tree/rpi-3.2.21). and then get the patch provide by ian-cim rpi-linux-3.2.21-xenomai-2.6.1.patch

I advice you to used this cross-Compile tools : https://github.com/raspberrypi/tools

Configure your environnement

export linux_tree =/home/$USER/raspberry/linux
export xenomai_root =/home/$USER/raspberry/xenomai-2.6.1
export ARCH=ARM
export CROSS_COMPILE=arm-bcm2708-linux-gnueabi

Applying the patches for the Raspberry PI

Xenomai Patch

$xenomai_root/scripts/prepare-kernel.sh –arch=arm –adeos=$xenomai_root/ksrc/arch/arm/patches/ipipe-core-3.2.21-arm-1.patch –linux=$linux_tree

Raspberry PI Patch

cd $linux_tree
patch -p1 < rpi-linux-3.2.21-xenomai-2.6.1.patch

Configuring your Kernel

You can use my configuration kernel .config or custom it ( make menuconfig)

Make the kernel

You can now compile the actual kernel

make

The resulting kernel file is « linux/arch/arm/boot/Image »

Copy your Kernel

cp linux/arch/arm/boot/Image /media/<boot-partition-of-SD-card>/kernel.img

First Kernel starting

Linux version 3.2.21-ipipe (jed@jed-laptop) (gcc version 4.7.1 20120402 (prerelease) (crosstool-NG 1.15.2) ) #2 Thu Jul 26 09:59:17 CEST 2012

CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d

CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache

Machine: BCM2708

Memory policy: ECC disabled, Data cache writeback

On node 0 totalpages: 57344

free_area_init_node: node 0, pgdat c0406d64, node_mem_map c0486000

Normal zone: 448 pages used for memmap

Normal zone: 0 pages reserved

Normal zone: 56896 pages, LIFO batch:15

pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768

pcpu-alloc: [0] 0

Built 1 zonelists in Zone order, mobility grouping on. Total pages: 56896

Kernel command line: dma.dmachans=0x3c bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2708.boardrev=0x2 bcm2708.serial=0x21cf4cef smsc95xx.macaddr=B8:27:EB:CF:4C:EF dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait

….

Compile Xenomai

$ cd $xenomai_root
$ ./configure –host=arm-bcm2708-linux-gnueabi

$ make DESTDIR=/destination/of/xenomai/ install

finally copy the files of Xenomai in the sdcard.

Configure your environnement

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/xenomai/lib

Test Xenomai

root@raspberrypi:~$ /usr/xenomai/bin/latency -p 100 -T 60

== Sampling period: 100 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up…
RTT| 00:00:01 (periodic user-mode task, 100 us period, priority 99)
RTH|—-lat min|—-lat avg|—-lat max|-overrun|—msw|—lat best|–lat worst
RTD| -6.000| -4.000| 8.000| 0| 0| -6.000| 8.000
RTD| -7.000| -4.000| 11.000| 0| 0| -7.000| 11.000
RTD| -7.000| -4.000| 11.000| 0| 0| -7.000| 11.000
RTD| -7.000| -4.000| 7.000| 0| 0| -7.000| 11.000
RTD| -6.000| -4.000| 8.000| 0| 0| -7.000| 11.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 11.000
RTD| -6.000| -4.000| 11.000| 0| 0| -7.000| 11.000
RTD| -6.000| -3.000| 14.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 11.000| 0| 0| -7.000| 14.000
RTD| -7.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 11.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 11.000| 0| 0| -7.000| 14.000
RTD| -7.000| -4.000| 12.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 7.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 8.000| 0| 0| -7.000| 14.000
RTD| -7.000| -4.000| 12.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 12.000| 0| 0| -7.000| 14.000
RTD| -7.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 13.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 11.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 9.000| 0| 0| -7.000| 14.000
RTT| 00:00:22 (periodic user-mode task, 100 us period, priority 99)
RTH|—-lat min|—-lat avg|—-lat max|-overrun|—msw|—lat best|–lat worst
RTD| -6.000| -4.000| 14.000| 0| 0| -7.000| 14.000
RTD| -7.000| -4.000| 6.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 7.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 11.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -7.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 9.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 11.000| 0| 0| -7.000| 14.000
RTD| -7.000| -4.000| 8.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 11.000| 0| 0| -7.000| 14.000
RTD| -7.000| -4.000| 14.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 11.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 11.000| 0| 0| -7.000| 14.000
RTD| -7.000| -4.000| 11.000| 0| 0| -7.000| 14.000
RTT| 00:00:43 (periodic user-mode task, 100 us period, priority 99)
RTH|—-lat min|—-lat avg|—-lat max|-overrun|—msw|—lat best|–lat worst
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 7.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 9.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 9.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 8.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 11.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 7.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 9.000| 0| 0| -7.000| 14.000
RTD| -7.000| -4.000| 11.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 10.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 8.000| 0| 0| -7.000| 14.000
RTD| -6.000| -4.000| 13.000| 0| 0| -7.000| 14.000
—|———–|———–|———–|——–|——|————————-
RTS| -7.000| -3.000| 14.000| 0| 0| 00:01:00/00:01:00

Raspberry PI UART Debugger

14 juillet 2012 par jed 2 commentaires »

Post to Twitter

Raspberry Pi UART Debugger:

UART output

The serial output at 115200 :

screen /dev/ttyXXX 115200

Linux version 3.1.9+ (grayg@dc4-arm-01) (gcc version 4.5.1 (Broadcom-2708) ) #90 Wed Apr 18 18:23:05 BST 2012
CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: BCM2708
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 48768
Kernel command line: dma.dmachans=0x3c bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2708.boardrev=0x2 bcm2708.serial=0x21cf4cef smsc95xx.macaddr=B8:27:EB:CF:4C:EF dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait
PID hash table entries: 1024 (order: 0, 4096 bytes)
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 192MB = 192MB total
Memory: 190720k/190720k available, 5888k reserved, 0K highmem
Virtual kernel memory layout:
vector  : 0xffff0000 - 0xffff1000   (   4 kB)
fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
DMA     : 0xffc00000 - 0xffe00000   (   2 MB)
vmalloc : 0xcc800000 - 0xd8000000   ( 184 MB)
lowmem  : 0xc0000000 - 0xcc000000   ( 192 MB)
modules : 0xbf000000 - 0xc0000000   (  16 MB)
.text : 0xc0008000 - 0xc037b000   (3532 kB)
.init : 0xc037b000 - 0xc0398000   ( 116 kB)
.data : 0xc0398000 - 0xc03b5ce0   ( 120 kB)
.bss : 0xc03b5d04 - 0xc0401198   ( 302 kB)
NR_IRQS:85
timer_set_mode: unhandled mode:1
timer_set_mode: unhandled mode:3
Console: colour dummy device 80x30
console [tty1] enabled
Calibrating delay loop... 697.95 BogoMIPS (lpj=3489792)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
devtmpfs: initialized
NET: Registered protocol family 16
vc-mem: mm_vc_mem_phys_addr = 0x00000000
vc-mem: mm_vc_mem_size      = 0x10000000 (256 MiB)
mailbox: Broadcom VideoCore Mailbox driver
bcm2708_vcio: mailbox at f200b880
bcm_power: Broadcom power driver
bcm_power_open() -> 0
bcm_power_request(0, 8)
bcm_mailbox_read -> 00000080, 0
bcm_power_request -> 0
Serial: AMBA PL011 UART driver
dev:f1: ttyAMA0 at MMIO 0x20201000 (irq = 83) is a PL011 rev3
console [ttyAMA0] enabled
bio: create slab <bio-0> at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
Switching to clocksource stc
FS-Cache: Loaded
CacheFiles: Loaded
Switched to NOHz mode on CPU #0
NET: Registered protocol family 2
IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
bcm2708_dma: DMA manager at cc808000
bcm2708_gpio: bcm2708_gpio_probe c039dd88
vc-mem: Videocore memory driver
VFS: Disk quotas dquot_6.5.2
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
FS-Cache: Netfs 'nfs' registered for caching
msgmni has been set to 372
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
BCM2708FB: registering framebuffer (656, 416)
bcm2708_fb_set_par info(cb888000) 656x416 (656x416), 0, 16
BCM2708FB: start = cc900000,4d384000 width=656, height=416, bpp=16, pitch=1312 size=545792 success=0
Console: switching to colour frame buffer device 82x26
BCM2708FB: register framebuffer (0)
brd: module loaded
loop: module loaded
vcos: [1]: vchiq_init_state: slot_zero = 0xffd80000, is_master = 0
vcos: [1]: vchiq_init_state: called
vcos: [1]: vchiq: initialised - version 2 (min 2), device 253.0
usbcore: registered new interface driver smsc95xx
cdc_ncm: 04-Aug-2011
usbcore: registered new interface driver cdc_ncm
dwc_otg: version 2.90b 6-MAY-2010 (platform bus)
Core Release: 2.80a
Setting default values for core params
Finished setting default values for core params
cc840008 -> 1
Using Buffer DMA mode
Periodic Transfer Interrupt Enhancement - disabled
Multiprocessor Interrupt Enhancement - disabled
Dedicated Tx FIFOs mode
dwc_otg bcm2708_usb: DWC OTG Controller
dwc_otg bcm2708_usb: new USB bus registered, assigned bus number 1
dwc_otg bcm2708_usb: irq 75, io mem 0x00000000
Init: Port Power? op_state=1
Init: Power Port (0)
usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: DWC OTG Controller
usb usb1: Manufacturer: Linux 3.1.9+ dwc_otg_hcd
usb usb1: SerialNumber: bcm2708_usb
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
usbcore: registered new interface driver libusual
mousedev: PS/2 mouse device common for all mice
cpuidle: using governor ladder
cpuidle: using governor menu
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
bcm_power_open() -> 1
mmc0: SDHCI controller on BCM2708_Arasan [platform] using platform's DMA
mmc0: BCM2708 SDHC host at 0x20300000 DMA 2 IRQ 77
sdhci-pltfm: SDHCI platform and OF driver helper
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
TCP cubic registered
Initializing XFRM netlink socket
NET: Registered protocol family 17
Registering the dns_resolver key type
VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5
Waiting for root device /dev/mmcblk0p2...
mmc0: problem reading SD Status register.
mmc0: new SDHC card at address e624
mmcblk0: mmc0:e624 SU08G 7.40 GiB
mmcblk0: p1 p2 p3
usb 1-1: new high speed USB device number 2 using dwc_otg
usb 1-1: New USB device found, idVendor=0424, idProduct=9512
usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
hub 1-1:1.0: USB hub found
hub 1-1:1.0: 3 ports detected
usb 1-1.1: new high speed USB device number 3 using dwc_otg
EXT4-fs (mmcblk0p2): recovery complete
EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 179:2.
Freeing init memory: 116K
usb 1-1.1: New USB device found, idVendor=0424, idProduct=ec00
usb 1-1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
smsc95xx v1.0.4
smsc95xx 1-1.1:1.0: eth0: register 'smsc95xx' at usb-bcm2708_usb-1.1, smsc95xx USB 2.0 Ethernet, b8:27:eb:cf:4c:ef
EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
fuse init (API version 7.17)

Debian GNU/Linux 6.0 raspberrypi ttyAMA0
raspberrypi login:

Cpuinfo

pi@raspberrypi:~$ cat /proc/cpuinfo
Processor       : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS        : 697.95
Features        : swp half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xb76
CPU revision    : 7

Hardware        : BCM2708
Revision        : 0002
Serial          : 0000000021cf4cef

Meminfo

pi@raspberrypi:~$ cat /proc/meminfo
MemTotal:         190836 kB
MemFree:          151352 kB
Buffers:            7008 kB
Cached:            20640 kB
SwapCached:            0 kB
Active:            14336 kB
Inactive:          18648 kB
Active(anon):       5468 kB
Inactive(anon):        0 kB
Active(file):       8868 kB
Inactive(file):    18648 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:          5348 kB
Mapped:             6512 kB
Shmem:               136 kB
Slab:               3712 kB
SReclaimable:       1584 kB
SUnreclaim:         2128 kB
KernelStack:         944 kB
PageTables:          620 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:       95416 kB
Committed_AS:      57876 kB
VmallocTotal:     188416 kB
VmallocUsed:         704 kB
VmallocChunk:     186852 kB



11- Quelques news

26 mars 2012 par jed Pas de commentaires »

Post to Twitter

Le projet n’a pas bougé depuis plusieurs mois, mais avec le retour du beau temps la motivation revient ! Une nouvelle version de l’interface graphique qui fonctionne sur une tablette Android ! C’est plus simple à déplacer que mon ordinateur portable 😉 Je travaille aussi sur des améliorations de l’intelligence artificielle, je reviens bientôt vers vous .

10- Le bilan

22 août 2011 par jed 1 commentaire »

Post to Twitter

Le temps des premiers tests est arrivé ! J’en ai réalisé plusieurs pour une distance d’environ 2 km. Je vous livre ici les premiers résultats qui sont très satisfaisants. Je pense apporter des améliorations, installer le panneau solaire, ajouter un anémomètre,…

19 aout 2011 :

Les tests ont été réalisés avec malheureusement très peu de vent, les éoliennes du lac au duc de Ploërmel ne tournant presque pas. Comme un inconvénient s’accompagne très souvent d’un avantage, ce vent léger m’a permis de tester le voilier sans risque.

Les résultats ci-dessous concernent un parcours de 475,87 m avec une vitesse moyenne à 1,08 km/h avec une pointe à 6,47 km/h

Courbe du parcours :

Vitesse du voilier en km/h

vitesse

Roulis & Tangage

Nombre de satellites

sat

Pulse du servo-treuil de la voile :

Pulse du servomoteur du gouvernail :

Heading Error (Différence entre le cap désiré et le cap suivi )

Distance entre les trois Waypoints :

Distance entre les waypoints

Vent réel

truewind

Consommation

Quelques valeurs :

Titre Valeur
Max Pitch (Tangage) 8,61
Min Pitch (Tangage) -7,94
Moyenne Pitch ( Tangage) 0,36
Max Roll ( Roulis) 15,15
Min Roll ( Roulis) -15,52
Moyenne Roll ( Roulis) -1,59
Vitesse moyenne (km/h) 1,08
Vitesse maximum (km/h) 6,47
Vitesse minimum (km/h) 0,02
Distance du parcours ( mètres ) 475,87
Moyenne angle gouvernail 87,70
Moyenne angle voile 59,65

?

9-Première version de l IHM

20 mars 2011 par jed 1 commentaire »

Post to Twitter

Première version stable du l’IHM le 20 mars 2011 :

Vous pouvez voir ci-dessous une capture d’écran de l’IHML. On peut voir, une simulation que j’ai lancée, chaque point vert représente une waypoint.

Mise à jour 8 juin 2011

Une nouvelle version de l’IHM qui embarque des nouvelles fonctionnalitées.

Cette version permet de visualiser :

  • La distance en mètre restante jusqu’au prochain « waypoint »
  • La vitesse
  • L’altitude, le nombre de satellites utilisés, la mode du GPS ( 1D,2D,3D)
  • Les angles pitch, et roll
  • La position de la voile ( angle du servomoteur )
  • Yaw raw ( la valeur brut du magnétomètre

J’ai aussi ajouté la gestion d’une manette Wiimote pour contrôler manuellement le voilier grâce à la librairie CWIID. Cette version a aussi été l’occasion de corriger un bug au niveau du GPS ( problème d’actualisation).

8- Girouette

9 novembre 2010 par jed Pas de commentaires »

Post to Twitter

Conception de la girouette

Pour la construire ma girouette j’ai utilisé le MA3 qui est un encodeur magnétique analogique voici ses caractéristiques :

  • Patent pending
  • Miniature size (0.48″ diameter)
  • Non-contacting magnetic single chip sensing technology
  • -40C to 125C. operating temperature range
  • 10-bit Analog output – 2.6 kHz sampling rate

La girouette dans son coffret étanche en PVC 32 ø

C) Calculer le Vent et la vitesse Réel

Pour calculer le vent réel le plus précis, nous allons utiliser l’azimuth ou cap calculé dans cette article ainsi que la vitesse calculer grâce à notre GPS.

delta = vent apparent

phi = azimuth

 Y = 90 - \phi
a = \delta* cos(Y)
bb = \delta*  sin (Y)
 b = bb - BS
Vitesse réel =   (( a * a ) + ( b * b )) \dfrac{1}{2}
Angle réel =   90 - arctan( \dfrac{  b}{ a })

Echelle de Beaufort Echelle d’état de la mer
Degrés Termes
descriptifs
Vitesse
moyenne
en nœuds
Vitesse
moyenne
en m/s
Etat de la mer Degrés Termes
descriptifs
Hauteur des vagues
0 Calme < 1 < 0,2 Miroir 0 Calme 0 m
1 Très légère brise 1-3 0,3-1 Quelques Rides 1 Ridée 0-0,1 m
2 Légère brise 4-6 2-3 Vaguelettes 2 Belle 0,1-0,5 m
3 Petite brise 7-10 4-5 Moutons 3 Peu agitée 0,5-1,25 m
4 Jolie brise 11-16 6-7 Petites vagues 4 Agitée 1,25-2,5 m
5 Bonne brise 17-21 8-10 Vagues modérées 5 Forte 2,5-4 m
6 Vent frais 22-27 11-13 Lames
écume
6 Très forte 4-6 m
7 Grand frais 28-33 14-17 Lames
déferlantes
7 Grosse 6-9 m
8 Coup de vent 34-40 18-20 Tourbillons
d’écume
8 Très grosse 9-14 m
9 Fort coup de vent 41-47 21-24 Traînées
d’écume
9 Enorme > 14 m
10 Tempête 48-56 25-28 Grosses lames
11 Violente tempête 57-63 29-33 Visibilité par les embruns
12 Ouragan > 64 > 33

Vocabulaire :

Knots (noeud) = 1 nœud correspond à 1 mille marin par heure, soit environ 1,852 km/h

source : http://fr.wikipedia.org/wiki/Vent_apparent
source : http://fr.wikipedia.org/wiki/N%C5%93ud_%28unit%C3%A9%29
source : http://www.sailingusa.info/true_wind_calculator.htm

7- Le voilier

5 janvier 2011 par jed Pas de commentaires »

Post to Twitter

A) Introduction

Le voilier utilisé pour ce projet appartient à la famille des classes M ( Marblehead) monocoque de 1.30m. Plus d’informations sur la Classe M

B) Fabrication du bulbe en plomb

Le moule femelle a été réalisé en plâtre puis le moule mâle en bois. La fabrication du moule a fortement été inspiré du site voiletech.


C) La Quille et le safran


D) L’accastillage


Hauban Inox gainé Ø 0,7 mm Résistance : 27 Kg Longueur (14,70 €)

Mât profilé de 16 mm En Alu Anodisé Naturel Longueur : 2,25 m (40,50€)

Vit de Mulet à rotule (bôme de 16 mm) (9.65€)

Barre de flèche (9.35€)

Cadène

Ferrures Universelles (L 23 mm)

Pied de Mât

6- L’Energie

3 janvier 2011 par jed Pas de commentaires »

Post to Twitter

A)Introduction


B) La Batterie

C) Le panneau solaire

Dimensions : 180x220mm
Type : Monocrystalline high efficiency cells at 15-15.2%.
Production théorique : 5.2W

LM317

D) La répartition de la consommation

Le schéma ci-dessous représente la répartition de la consommation entre les différents composants de mon projet. Les deux servomoteurs sont les plus gros consommateurs d’énergies, ils peuvent consommer jusqu’à 60% de l’énergie. Le premier servomoteur permet de manœuvrer la voile puis le deuxième de diriger le gouvernail. Il est donc important de diminuer au maximum leurs utilisations pour augmenter l’autonomie. Ensuite le deuxième facteur de consommation c’est la liaison radio avec 17%.

Avec une batterie 3000mA 3S la durée théorique d’autonomie de la batterie avant la décharge est d’après mes calculs d’environ 8 heures. Avec un panneau solaire 200mA/5v l’autonomie passe environ à 10 heures.

5 – Tilt Compensation Azimuth ? with Pitch Ø et le Roll ?

19 septembre 2010 par jed 2 commentaires »

Post to Twitter

A) Introduction

Il est nécessaire pour mon voilier de calculer son Azimuth ? ou cap. Selon Wikipedia, le cap d’un mobile est la direction vers laquelle il est orienté (ou dans le cas d’un navire, la direction où pointe son étrave). C’est l’angle exprimé en degrés (de 0 à 360°), dans le sens des aiguilles d’une montre, entre sa ligne de foi (son axe longitudinal) et le nord.Cet angle se mesure à l’aide d’une boussole, d’un compas magnétique ou gyroscopique.

Les composants que j’ai choisie pour calculer mon Azimuth :

La boussole magnétique HMC5843 est un magnétomètre trois axes. Il permet d’identifier l’angle de rotation par rapport au nord magnétique de la Terre avec une résolution de 7 milli-gauss.

L’accéléromètre AXL335 délivres des tensions proportionnelles aux accélérations avec une sensibilité :+/- 3 g.

B) Calculer l’Azimuth ? sans aucune compensation :

\psi = (180 *(\frac{atan2(-1 * YMagneto, XMagneto)}{pi}))+180;

Avec cette équation, les valeurs ne sont correctes que si le HMC5843 est à plat.

ps : Attention sous Excel, il faut inverser les valeurs pour atan2, ça peut vous faire gagner du temps….

Vous pouvez télécharger un exemple de programme fournit ci-dessous qui montre comment lire les HMC5843 sur un microcontrôleur ATMEGA328
Download : ici

C) Les angles Pitch Ø et le Roll ? pour un accéléromètre deux axes ou trois axes :

Grâce à l’accéléromètre ADXL335 , il est possible de calculer le Pitch Ø et le Roll ? pour corriger notre azimuth ?. Voici un schéma pour visualiser les angles du bateau.


Pour un accéléromètre deux axes voici l’équation :

\theta=\arcsin(Xaccel)*\frac{180}{pi}

\phi= \arcsin(Yaccel)*\frac{180}{pi}

Pour un accéléromètre trois axes comme le HMC5843 voici l’équation :

\theta= \dfrac {atan(-Xaccel)} {\sqrt(Yaccel^2+Zaccell^2))}*\frac{180}{pi}

\phi= \dfrac {atan(Yaccel)}{\sqrt(Xaccel^2+Zaccel^2))}*\frac{180}{pi}

D) Azimuth ? tilt compensation :

Le HMC5843 donne des valeurs correctes s’il est à plat. Donc, chaque fois que mon bateau va être incliné l’angle de rotation par rapport au nord magnétique donné par le compas ne sera plus correct. Il est possible de compenser cette erreur (Tilt compensation) en utilisant les valeurs du compas et d’un accéléromètre.

C’est compensation est aussi possible pour les compas deux axes avec l’algorithme de Seong Yun Cho et Chan Gook Park qui permet grâce au Dip Angle de faire une estimation du troisième axe . Vous pouvez télécharger ci-dessous leurs travaux :
Download : TiltCompensation.pdf

Pour un magnétomètre deux axes vous devez calculer le dip angle pour faire une approximation du troisième axe Z.

Pour le calculer :

\delta = \dfrac{1}{tan(2*tan(Latitude)}

ex:  \delta = \dfrac{1}{tan(2*tan(48.86213)} ) = 25.0112° ou 48.86213° coïncide avec ma latitude.

Pour les compas deux axes, il est nécessaire de faire une approximation du troisième axe Z grâce à la valeur du DIP angle

Zmagneto = \dfrac {sin(\theta)+Xmc*sin(\theta)-Ymc*cos(\theta)*sin(\phi)} {cos(\phi)*cos(\theta) }

Cependant, pour avoir des valeurs plus précises, il vaut mieux utiliser un compas trois axes comme le HMC5843.

Pour calculer l’azimut avec compensation :

Vecteur horizontal : xh = x*cos(\theta)+y*sin(\phi)-z*cos(\theta)*sin(\theta);

Vecteur verticale : yh= y*cos(\phi)+z*sin(\phi);

Heading : \psi= arctan(-yh/xh)

FoxBoard G20 :

?????Il faut prendre un soin tout particulier avec la fox Board G20 pour utiliser ce composant car elle génère un champ électromagnétique puissant qui perturbe le compas dans un rayon d’environ 3 cm. J’ai aussi constaté le même phénomène pour mon GPS. Il est donc prudent d’isoler les composants sensibles ou de les éloigner.Cette boussole a une interface IC2 qui permet d’interroger ses registres.

Un peu de vocabulaire :

Azimuth = angle de rotation par rapport au nord magnétique

Le gauss (symbole G) est l’unité CGS « électromagnétique » à trois dimensions d’induction magnétique. Il est défini comme étant 1 maxwell par centimètre carré (Mx/cm²).

Liens :

http://fr.wikipedia.org/wiki/Cap_%28navigation%29

Twitter links powered by Tweet This v1.8.1, a WordPress plugin for Twitter.