2023年9月7日木曜日

Eclipse eCALを動かしてみる

Eclipse eCALを動かしてみる

eCALとは

eCAL
とはEclipse SDV Projectの1プロジェクト。

ハイパフォーマンスでスケーラブルなpub/subミドルウェア。
マルチプラットフォームサポート(Windows/Linux)

付属アプリケーションとして以下が提供されている。

  • Monitor
  • Recorder
  • Player

以下プロトコルをサポート

  • Google Protobuf
  • CapnProto
  • Flatbuffers

ROS2と接続できるようにRMW(ROSMiddleWare)をサポート

やったこと

  • eCALの環境構築。
  • 同一コンテナ内でProtobufでPub/Subの動作確認

動作確認環境

xxxx@penguin:~/$ hostnamectl 
   Static hostname: penguin
         Icon name: computer-container
           Chassis: container
        Machine ID: xxxxx
           Boot ID: xxxxx
    Virtualization: lxc
  Operating System: Debian GNU/Linux 11 (bullseye)
            Kernel: Linux 5.15.112-19404-g55fe7e355056
      Architecture: arm64

環境構築

Dockerfileを作成

FROM ubuntu:20.04

# https://github.com/eclipse-ecal/ecal


RUN apt-get update && apt-get upgrade   \
      && apt-get -y install software-properties-common  \
      && add-apt-repository ppa:ecal/ecal-latest  \
      && apt-get update   \
      && apt-get -y install ecal  \
      && apt-get -y install vim cmake g++ libprotobuf-dev protobuf-compiler

ビルド

> docker build -t eCAL_sample . 

動作確認

コンテナ起動して、受信プログラムを実行

> docker run -it -v data:/data eCAL_sample bash

>root@febee21d92e6:/# ecal_sample_person_rec
^

別ターミナルで同一コンテナに入る。

> docker exec -it [container_id] bash

>root@febee21d92e6:/# ecal_sample_person_snd

送受信のプログラムが動作し始める。

実装

> apt-get install cmake g++ libprotobuf-dev protobuf-compiler

protcol bufferで送受信するプログラムを実装。
実装内容は以下参照。

https://eclipse-ecal.github.io/ecal/getting_started/hello_world_proto.html

以下簡単に処理内容を記載する。





今後確認してみること

参考

2023年2月5日日曜日

ChromeBookのLinux環境構築の備忘録

2022年9月18日日曜日

nginxコードリーディング(worker-process生成関連)

2022年9月10日土曜日

[memo]USB MassStorageをLinuxにマウント

  1. USBが認識していることを確認。
who@raspberrypi:~$ sudo dmesg
[230931.187643] scsi 0:0:0:0: Direct-Access      USB      SanDisk 3.2Gen1 1.00 PQ: 0 ANSI: 6                                       
[230931.189402] sd 0:0:0:0: Attached scsi generic sg0 type 0                                                                       
[230931.189892] sd 0:0:0:0: [sda] 488570880 512-byte logical blocks: (250 GB/233 GiB)                                              
[230931.191338] sd 0:0:0:0: [sda] Write Protect is off                                                                             
[230931.191373] sd 0:0:0:0: [sda] Mode Sense: 43 00 00 00                                                                          
[230931.192273] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA                           
[230931.202748]  sda: sda1                                                                                                         
[230931.205919] sd 0:0:0:0: [sda] Attached SCSI removable disk                         


who@raspberrypi:~$ lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0781:5583 SanDisk Corp. Ultra Fit
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

/dev/sda1で認識していることがわかる。

  1. ファイルシステムを確認
who@raspberrypi:~$ sudo blkid /dev/sda1
/dev/sda1: UUID="4BEE-903F" BLOCK_SIZE="512" TYPE="vfat"

デフォルトがvfat。Linux上でマウントするためext4に変更する。

  1. ファイルシステムの変更
who@raspberrypi:~$ sudo mkfs.ext4 -L SnaDisk /dev/sda1
mke2fs 1.46.5 (30-Dec-2021)
/dev/sda1 contains a vfat file system
Proceed anyway? (y,N) y
Creating filesystem with 61071356 4k blocks and 15269888 inodes
Filesystem UUID: faba5e9f-2caf-4ed5-8559-099c08660077
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): 
done
Writing superblocks and filesystem accounting information: done     
  
  1. 変更されたことを確認
who@raspberrypi:~$ sudo blkid /dev/sda1
/dev/sda1: LABEL="SnaDisk" UUID="faba5e9f-2caf-4ed5-8559-099c08660077" BLOCK_SIZE="4096" TYPE="ext4"
  1. USBのマウント(fstab)

https://wiki.archlinux.jp/index.php/Fstab を参考にdump,passsを設定する。コピペミスなどを考慮して、下記スクリプトで追記する。

echo "`blkid /dev/sda1 | awk '{print $3}' ` /mnt/sd ext4 defaults 0 0" | sudo tee -a /etc/fstab

2022年7月18日月曜日

dragonflyをraspberypiで動かしてみる

Welcome file

dragonflyをraspberrypi 4上で動かしてみようというモチベーション。

docker run --network=host --ulimit memlock=-1 docker.dragonflydb.io/dragonflydb/dragonfly
docker ps | grep dragonfly

うんともすんとも言わない。entrypoint.shで終了しているようなので、実行してみる。

docker ps -a | grep dragonfly
sudo docker commit -m “exited” xxxxxx
docker images
sudo docker run --rm -it yyyyy bash

コンテナを起動

root@xxxxx:/data# bash -x entrypoint.sh -v -i -t
+ ulimit -l 65000
+ set -e
+ ‘[’ v ‘!=’ -v ‘]’
+ set – dragonfly --logtostderr -v -i -t
++ id -u
+ ‘[’ dragonfly = dragonfly -a 0 = 0 ‘]’
+ exec su-exec dfly entrypoint.sh dragonfly --logtostderr -v -i -t
Illegal instruction (core dumped)

起動時にコアダンプしているっぽい。
strace をしてみたら、mmap直後でcoredumpしているため、ソースコードからビルドして問題点の確認が必要そう。

2022年6月12日日曜日

iceoryx(nter-process-communication middleware )

 iceoryx というのがちょっと気になったので調べてみた。

気になった理由
Eclipse Foundationの動画のhttps://youtu.be/FEaI5oKlYbc
でROS、Adaptiveに関連する説明があったので、気になり調べてみようと。

日本語の解説サイト
publickey以外見当たらない。
ゼロコピーで瞬時にプロセス間の大規模データ通信を可能にする「Eclipse iceoryx」ミドルウェア、Eclipse Foundationが公開


iceoryxのゴールとしては

  • プロセス間通信をゼロコピーで実現し、高速化
  • ROS2、APの通信パターン互換
  • Automotive-grade SW Quality
  • Modern C++
  • マルチプラットフォーム

とのこと。Rustもiceoryx-rsで開発中とのこと。

Where is Eclipse iceoryx used? でどこで使われているかが記載されている。


使う機会があるかどうか不明だが、helloworldくらいは動かしてみようかと思う。


2021年8月28日土曜日

標準入力をファイル入力にする

まぁあるあるの実装かもしれないけど、とりあえずログとして残しておく。

#include <stdio.h>
  
int main(){
        int ret = 0;
        FILE* tmpstd = stdin;
        stdin = fopen("test.txt" , "rb");
        ret =getchar();
        printf("getchar ret= %d/n",ret);

        // 
        stdin = tmpstd;
        ret =getchar();
        printf("getchar ret= %d/n",ret);

        return 0;
}

ファイルがない場合EOFを返すので注意する。

環境依存する実装のため、必ずすべて動作するとは限らない。