2013年1月14日月曜日

A locomotion control of a 2-wheel-robot using 2 webcams


ロボットは、ソフトウェアの塊、最近つとに感じます。作っても、作っても、まだ足りない。でも、進んでいるはず。。。
そして、いろいろなアイディアが生まれてくるけど、実装の時間がない、まどろっこしさ。。。
それに、http://szeliski.org/Book/ の情報を知ってしまったが故に、試したい事は沢山ある。何故、一日は、24時間しか無いのだろうか?

農作業は、特定のルートの移動と、ルート内での作業の繰り返します。
従って、2つの移動制御が要求されます。ただし、コストをかけないので、周囲に誘導する装置もなく、ロボットに搭載した2つのカメラの情報だけで制御します。
お金がないので。。。

1)指定されたルートを、指定された速度で移動する (直進、回転)
2)指定された位置で、指定された方向で停止する

このテストロボットは、2つのWebcamから取得した画像を利用して、2 Wheels の移動制御を行います。(testing robotは、ソフト開発を目的としています。実機でのテストは大掛かりになりますが、このようなtesting robotを使うとソフト開発がどこでも可能となり開発効率が高まります。)
また、前にいる人やロボットと一定の間隔を保ち移動する事も可能です。
画像から如何に、多くの特徴を抽出して、関連づけるか。その点に苦労しています。実は、タイトルの写真も、その機能検証に使いました。
「何個のトマトが、どのように重なって、いるのか?」

このロボットには、最初に移動ルートの目安になる画像を複数与えます。ロボットはその画像を分析して、かつWebcamからの画像を使い、自分で移動しながらルートを導きだします。スマートフォンで、ルートのマークとなる所の写真を、順番に撮影しRDCSに転送する。すると、ロボットが自分で動いてルートを探します。2つのWebcamなので、必ず左回りです。3つにするか、側面カメラをサーボで回転させれば右回り、左回り両方可能となります。主にハウス内で使うので、Webcam2台仕様で十分です。
このtesting robotのビデオは、近いうちにアップします。

画像処理には、OpenCVを使っていますが、本当にOpenCVには感謝しています。

安価なWebcam2台とRaspberry Piで作ります。地形を認識しながら進むロボットより、格安で移動ロボットが作れます。

Testing 2 wheel robot
Raspberry Pi で、2つのカメラ、およびモータ制御コントローラを制御します。
Fail Safe & Recovery 以外の画像処理は、同じRDCS上にある Space Recognizing Service に画像を転送して処理を依頼し、結果を受け取り次の移動制御をします。ただ、imagingについては、少しずつRaspberry Pi上での処理を増やす予定です。
Webcamの画像取得は、fswebcamを使っています。

Testing 2 wheel robot. A Raspberry Pi under two webcams.

Raspberry Piは、カメラの台座の下に装着しています。


昨年末に届いた Raspberry Piは、ピンクのプラスチックケースに入っていました。そのケースを見て、「自分で加工してケースを作って下さい」との意図を感じるのは、僕だけではないと思います。RS版のRaspberry Piだけでしょうか?ただし、UK製ではありません。
そのケースに、上の写真のような加工をして使っています。これで、ケースを買わなくても済みます。写真はケースの裏を、上にして撮影しました。ネジでRaspberry Piをケースに止めています。内部にRaspberry Piの固定ができる様になっているので、1本で十分です。そのネジのナットより高さのあるゴムを4隅につけています。ただ、プラスチックの材質はそんなに良くないので、加工の時には注意が必要です。

でも、今の時代、オープンソースもあれば、安価で高性能な部品が沢山あります。創造力を働かせて取り組めば、少しのお金で実現する事ができると信じてます。時間は必要ですが、、、

意図する意味は少し違うけど、、、
All it needs is courage, imagination, and a little dough.                  Charles Chaplin

peace!

追加
Design Philosoph and Concept of my robots  も見てね!



2013年1月11日金曜日

An installation of Arch Linux on Raspberry Pi : assign static IP (wired and wireless)

How to assign static IP addresses to  a wireless device and a wired device.

Raspberry Piで、有線/無線LANに、それぞれ固定IPアドレスを設定する方法。
13台のRaspberry Piで、問題なく稼動しています。
Please refer https://wiki.archlinux.org/index.php/Static_IP_and_DHCP
少し、なやんだ事があります。
両方とも固定にすると、立上げ時にデバイス認識できず起動せず。
起動後、再度sysmtectlでunitをstart させると正常に起動する。
結論から言うと、USBハブとの相性が悪かったみたい。その場合は、 (6) 2項を実施すると、問題なく動きます。boot時の様に、負荷が比較的高い状態で、かつ起動後最初のUSBハブ経由のwifi USB dongle認識に少し時間が必要な様です。他のデバイスでも発生する可能性がありますが、確かめてはいません。

Wifi dongle     : BUFFALO WLI-UC-GNM
Wired LAN      : 192.168.11.10
Wireless LAN  : 192.168.11.11
DNS             :  192.168.11.1  -> (4)

無線LANを使うには、wpa_supplicantパッケージのインストールと、
/etc/wpa_supplicant.confの設定が必要です。
Arch Linux installのページを参照して下さい。section 4.2 です。
手動で確認する手順も記述してあります。その後、下記手順をどうぞ

(1) Create the file /etc/conf.d/network
(2) Create the file /etc/systemd/system/network.service
(3) Run systemcrl
(4) Edit /etc/resolv.conf & reboot
(5) Check
(6) If you have  errors

設定が終わったら、Design Philosoph and Concept of my robots も見てね!

-------------------------------------------------------------------------------------------------
(1) Create the file /etc/conf.d/network
[root@rcmp-sv01 ~]# vi /etc/conf.d/network
[root@rcmp-sv01 ~]# cat /etc/conf.d/network
interfacew=wlan0
interface=eth0
addressw=192.168.11.10
address=192.168.11.11
netmask=24
broadcast=192.168.11.255
gateway=192.168.11.1

(2) Create the file /etc/systemd/system/network.service
 この設定は、無線LAN子機接続を優先して設定し、有線LANを補助として使う設定方法です。従って、起動時に無線LAN子機が取り外れている時には、エラーになります。そのような運用に問題がある場合には、serviceをそれぞれ作る事が必要です。

[root@rcmp-sv01 ~]# vi /etc/systemd/system/network.service
[root@rcmp-sv01 ~]# cat /etc/systemd/system/network.service
[Unit]
Description=Network Connectivity (Static IP wlan0 eth0)
Wants=network.target
Before=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/conf.d/network
ExecStart=/sbin/ip link set dev ${interfacew} up
ExecStart=/sbin/ip link set dev ${interface} up
ExecStart=/usr/sbin/wpa_supplicant -B -D wext -i ${interfacew} -c /etc/wpa_supplicant/wpa_supplicant.conf
ExecStart=/sbin/ip addr add ${addressw}/${netmask} broadcast ${broadcast} dev ${interfacew}
ExecStart=/sbin/ip addr add ${address}/${netmask} broadcast ${broadcast} dev ${interface}
ExecStart=/sbin/ip route add default via ${gateway}
ExecStop=/sbin/ip addr flush dev ${interfacew}
ExecStop=/sbin/ip addr flush dev ${interface}
ExecStop=/sbin/ip link set dev ${interfacew} down
ExecStop=/sbin/ip link set dev ${interface} down
[Install]
WantedBy=multi-user.target

(3) Run systemcrl
[root@rcmp-sv01 ~]# systemctl disable dhcpcd@eth0.service
rm '/etc/systemd/system/multi-user.target.wants/dhcpcd@eth0.service'
[root@rcmp-sv01 ~]# systemctl enable network.service
ln -s '/etc/systemd/system/network.service' '/etc/systemd/system/multi-user.target.wants/network.service'

(4) Edit /etc/resolv.conf & reboot
After a static IP address set on your Raspberry Pi, you  need to assign a  DNS address (nameserver) into /etc/resolv.conf.
If you are able to ping the following  address, you may try adding this nameserver to your /etc/resolv.conf file. It is the address of Google's primary DNS server.

[root@rcmp-sv01 ~]# ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=46 time=46.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=46 time=50.1 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=46 time=50.2 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 46.446/48.952/50.259/1.791 ms
[root@rcmp-sv01 ~]# vi /etc/resolv.conf
[root@rcmp-sv01 ~]# cat /etc/resolv.conf
# Generated by dhcpcd
# /etc/resolv.conf.head can replace this line
# /etc/resolv.conf.tail can replace this line
#nameserver 192.168.11.1                      # your DNS 
nameserver 8.8.8.8                            # 8.8.8.8 ping OK
nameserver 8.8.8.4

Insert a wifi dongle to your Raspberry Pi.

[root@rcmp-sv01 ~]# reboot

(5) Check
[root@rcmp-sv01 ~]# dmesg | grep eth0
[    2.326344] smsc95xx 1-1.1:1.0: eth0: register 'smsc95xx' at usb-bcm2708_usb-1.1, smsc95xx
USB 2.0 Ethernet, b8:27:eb:7a:da:c6
[   17.464573] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   18.971807] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[   18.974373] smsc95xx 1-1.1:1.0: eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[root@rcmp-sv01 ~]# dmesg | grep wlan0
[   17.471293] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[   20.137110] wlan0: authenticate with xx:xx:xx:xx:44:74
[   20.282721] wlan0: send auth to xx:xx:xx:xx:44:74 (try 1/3)
[   20.284445] wlan0: authenticated
[   20.361233] wlan0: associate with xx:xx:xx:xx:44:74 (try 1/3)
[   20.365241] wlan0: RX AssocResp from xx:xx:xx:xx:44:74 (capab=0x431 status=0 aid=7)
[   20.381284] wlan0: associated
[   20.381465] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[root@rcmp-sv01 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host valid_lft forever preferred_lft forever
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether xx:xx:xx:xx:da:c6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.11/24 brd 192.168.11.255 scope global eth0
    inet6 fe80::ba27:ebff:fe7a:dac6/64 scope link valid_lft forever preferred_lft forever
5: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 100
    link/ether xx:xx:xx:xx:95:f4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.10/24 brd 192.168.11.255 scope global wlan0
    inet6 fe80::126f:3fff:fe5b:95f4/64 scope link valid_lft forever preferred_lft forever

(6) If you have errors.
-   Check below files
     network, network.service, resolv.conf

-  Insert a sleep command
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/conf.d/network
ExecStart=/usr/bin/sleep 2
ExecStart=/sbin/ip link set dev ${interface} up

-  Last challenge.
It's a good luck charm   maybe.
[root@rcmp-sv01 ~]# ip addr add  local <ip address>/<mask> brd <broadcast>
                                      dev wlan0 label wlan0:0
[root@rcmp-sv01 ~]# reboot

peace!

独り言、、、Raspberry Pi を使って思う事


個人的な独り言です。

「ITは、本当に人々を、幸せにしたのだろうか?」

僕は、コンピュータを使い始めて、30年近くなります。
最初は、紙テープのHITAC 102, カードに打込む大学のセンターマシン。
その後は、技術計算のためにいろいろなコンピュータを使い、気がついたらソフトウェアの研究開発をして、いろいろな製品を送り出してきた。そして、多くの企業や役所に導入していただき、使って頂いた、そして今も使って頂いている。グローバルに、、、

そして、気がつけば、身近なスマートフォンが、大学時代の大型コンピュータ以上の性能を持っている。生活中のあらゆる所に、コンピュータが仕組まれて、もうコンピュータが止まったら生活きない世の中になってきた。
そして、人は、幸せになったはずだった。

でも、それは本当なのか?
僕は、だんだん不幸せになっているような気がしてしょうがない。
ただ、これは、今のグローバル経済の中での生き方にも関係しているのが、、、、

スマートフォンは、確かに便利なはずだった。
毎日、何十、何百ものメールが送られてきて、情報に接する事もできるし、暇な時のゲームもある。電話もできる。。。。
最近は、IT業界がやたら大きくなったので、IT利用に関係する事は何もかも、複雑になっている気がします。その分、IT利用に関しても本質が見過ごされているのではないかと感じます。あくまでも、ITとは、「利用者の成功の為の道具"」です。しかし、最近は、ユーザサイドが、ITを使う目的に自信を持てない為に、ITやSIerに安易に頼る傾向が強くなった気がします。何十年も続く、「動かないコンピュータ」、そして新しいPCやツールを「買い替えないといけない」と言う、脅迫観念、、、、、
例えば、グローバルCRMを作った時にも、事前に国別の営業慣習、プロセス、SCMなどを正確に理解し、全体process、マネジメント設計、Business Control設計後、SFで2ヶ月で構築しました。自分の会社は、自社の人間にしかデザインできないのです。風潮としてのITを使えば、なんとなると言う事は幻想です。
道具を使う為の道具の使い方はユーザが決めなければなりません。
使い方を決めれば、シンプルに実現できるITツールを選べば良いだけです。今は短期間で構築できる優秀なITツールが沢山あります。ITは所詮道具です、要求に、シンプルに、かつ端的にこたえるものが、良い道具の本質です。
だから、PasPiは、久々の本質を突いた”良い道具”だと考えています。
そういう問題意識を持つ方は、"The Social Life of Information"がおすすめです

pacman download performance up

(1) Change a mirror site
I changed the download mirror site from the default  to California US.
I got the high performance!

[root@rcmp-sv01 ~]# vi /etc/pacman.d/mirrorlist 
[root@rcmp-sv01 ~]# cat    etc/pacman.d/mirrorlist
#
# Arch Linux ARM repository mirrorlist
# Generated on 2013-01-02
#
## Geo-IP based mirror selection and load balancing
#Server = http://mirror.archlinuxarm.org/armv6h/$repo           ADD '#"

### United States
## Delaware
# Server = http://de.us.mirror.archlinuxarm.org/armv6h/$repo
## California
 Server = http://ca.us.mirror.archlinuxarm.org/armv6h/$repo    Delete '#'
## Nebraska
# Server = http://ne.us.mirror.archlinuxarm.org/armv6h/$repo
## New York
# Server = http://us.mirror.archlinuxarm.org/armv6h/$repo
## Virginia
# Server = http://va.us.mirror.archlinuxarm.org/armv6h/$repo

peace!

An installation of a nginx on Arch Linux , Raspberry Pi

I installed a nginx web server on Arch Linux, Raspberry PI.

(1) Installation
[root@rcmp-sv01 ~]# pacman -S nginx
resolving dependencies...
looking for inter-conflicts...
Targets (3): geoip-1.4.8-2  geoip-database-20121207-1  nginx-1.2.6-1
Total Download Size:    1.11 MiB
Total Installed Size:   3.80 MiB
Proceed with installation? [Y/n] y
:: Retrieving packages from extra...
 geoip-database-2012...   715.0 KiB  13.4K/s 00:54 [######################] 100%
 geoip-1.4.8-2-armv6h     115.5 KiB  2.42K/s 00:48 [######################] 100%
:: Retrieving packages from community...
 nginx-1.2.6-1-armv6h     309.0 KiB  9.40K/s 00:33 [######################] 100%
(3/3) checking package integrity                   [######################] 100%
(3/3) loading package files                        [######################] 100%
(3/3) checking for file conflicts                  [######################] 100%
(3/3) checking available disk space                [######################] 100%
(1/3) installing geoip-database                    [######################] 100%
(2/3) installing geoip                             [######################] 100%
(3/3) installing nginx                             [######################] 100%

(2) Create a unit file of nginx
[root@rcmp-sv01 ~]# vi /etc/systemd/system/nginx.service
[root@rcmp-sv01 ~]# cat /etc/systemd/system/nginx.service
[[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

(3) RUN
[root@rcmp-sv01 ~]# systemctl enable /etc/systemd/system/nginx.service
ln -s '/etc/systemd/system/nginx.service' '/etc/systemd/system/multi-user.target.wants/nginx.service'
[root@rcmp-sv01 ~]# systemctl start /etc/systemd/system/nginx.service

(4) configuration
[root@rcmp-sv01 ~]# cat /etc/nginx/nginx.conf
#user html;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}

peace!

2013年1月10日木曜日

Memo : Arch Linux systemd & Raspberry Pi weak

systemdでは、制御対象をunit ( = daemon) と言う。
systemctl コマンドを使って管理する。その途中で、Raspberry Piならではの発見!
抜群のコストパフォーマンスなので気にしないが全て外部電源に依存しているので、
どっきり!43 years and 0 months ago なんて表示  (3)を参照。
こういう所も、分かって"良い道具"として使います。

最近は、PC、スマートフォンどんどん、性能が良くなっても、性能・機能の1割も使いこなしていないのでは無いでしょうか?
しかし、Raspberry Piは、自分の創造力次第で、性能以上の事ができるコンピュータだ。
創造力の無い人には、単なる「ちょっと、試してみたいデバイス」だが。

しかし、最近の人の歩く姿を見ていると、つくづく思う。 人間は、前を見定めて生きるもの、下(スマホ)をみながら生きるべきではない。

本題のsystemdですが、、、結局 man systemdが一番詳しいので訳しています。
私の場合、ロボットのservice nodeのコンピュターの為に、ちゃんと理解しないとならない。とりあえず、systemctl について簡単に!

(1) UNIT 一覧 
(2) UNIT 一覧 error 表示
(3) UNIT 状態表示
(4) UNIT 開始(start),  停止(stop)
(5) UNIT 自動起動(enable)、停止(disable)

-------------------------------------------------------------------------------------------------
(1) UNIT の一覧  (赤字は、自分の設定)
[root@rcmp-sv01 ~]# systemctl      or     systemdctl --all
UNIT                        LOAD   ACTIVE SUB       DESCRIPTION
proc-sys...t_misc.automount   loaded active waiting   Arbitrary Executable File Fo
sys-devi...y-ttyAMA0.device   loaded active plugged   /sys/devices/dev:f1/tty/ttyA
sys-devi...-net-eth0.device     loaded active plugged   ec00
sys-devi...net-wlan0.device    loaded active plugged   802.11_n_WLAN
<略>
dhcpcd@eth0.service             loaded active running   dhcpcd on eth0
getty@tty1.service                  loaded active running   Getty on tty1
<略>
netwifistaticip.service              loaded active exited    Network Connectivity
openntpd.service                     loaded active running   OpenNTP Daemon
sshd.service                            loaded active running   OpenSSH Daemon
<略>
rdcs-crd.service                      loaded active running  RDCS Coordinator service
rdcs-cpr.service                      loaded active running  RDCS Cooperative service
rdcs-img.service                      loaded active running  RDCS Imaging service
rdcs-wcs.service                     loaded active running  RDCS Work Control Schedule service
rdcs-fr.service                          loaded active running  RDCS Fail safe Recovery service
rdcs-rc.service                         loaded active running  RDCS Resource Control service
rdcs-sd.service                        loaded active running  RDCS Space Database service
rdcs-log.service                        loaded active running  RDCS Log service
rdcs-rs.service                         loaded active running  RDCS Recognize ing  service
syslog.target                             loaded active active    Syslog
systemd-...iles-clean.timer loaded active waiting   Daily Cleanup of Temporary D
LOAD   = Reflects whether the unit definition was properly loaded.

ACTIVE = The high-level unit activation state, i.e. generalization of SUB.

SUB    = The low-level unit activation state, values depend on unit type.

62 loaded units listed. Pass --all to see loaded but inactive units, too.

To show all installed unit files use 'systemctl list-unit-files'.



(2) UNIT の一覧 error 表示
SSH接続なので、下記のエラーが発生しています。


<略>
auditd.service                     error  inactive dead      auditd.service
cronie.service                     loaded active   running   Periodic Command Scheduler
dbus.service                       loaded active   running   D-Bus System Message Bus
dhcpcd@eth0.service        loaded active   running   dhcpcd on eth0
display-manager.service    error  inactive dead      display-manager.service
emergency.service             loaded inactive dead      Emergency Shell
getty@tty1.service             loaded active   running   Getty on tty1
netwifistaticip.service         loaded active   exited    Network Connectivity
openntpd.service                loaded active   running   OpenNTP Daemon
plymouth-quit-wait.service  error  inactive dead      plymouth-quit-wait.service
plymouth-start.service        error  inactive dead      plymouth-start.service
rc-local.service                    error  inactive dead      rc-local.service
<略>

(3) UNITの状態表示 Weakness of Raspberry Pi
ちゃんと、動いています。やっぱり、サーバはstatic IPにしておかないといろいろ大変
下記の表示は、すごく面白い事があります。
何と、43年前から動いている事になっています。 (-_-)???
Raspberry Piは、電源を全て外部電源に依存しています。従って、通常のコンピュータであれば可能な、タイマーの保持ができません。下記のUNITは、固定アドレスでwifiを立上げるUNITの情報です。当然、wifiでネットが立上がってから、ntpdの同期ですから、このような事が発生します。RaspberryPiのコストパフォーマンスを考えれば、ご愛嬌です。その為に、RDCSのシステムでは、対策を実装しました。

[root@rcmp-sv01 ~]# systemctl  status netwifistaticip.service
netwifistaticip.service - Network Connectivity
 Loaded: loaded (/etc/systemd/system/netwifistaticip.service; enabled)
 Active: active (exited) since Thu, 1970-01-01 09:00:08 JST; 43 years and 0 months ago
Process: 155 ExecStart=/sbin/ip route add default via ${gateway} (code=exited, status=0/SUCCESS)
Process: 152 ExecStart=/sbin/ip addr add ${address}/${netmask} broadcast ${broadcast} dev ${interface} (code=exited, status=0/SUCCESS)
Process: 126 ExecStart=/usr/sbin/wpa_supplicant -B -Dwext -i${interface} -c/etc/wpa_supplicant/wpa_supplicant.conf (code=exited, status=0/SUCCESS)
Process: 111 ExecStart=/sbin/ip link set dev ${interface} up (code=exited, status=0/SUCCESS)
 CGroup: name=systemd:/system/netwifistaticip.service
 └─151 /usr/sbin/wpa_supplicant -B -Dwext -iwlan0 -c/etc/wpa...
Jan 01 09:00:08 cmp-sv01 systemd[1]: Started Network Connectivity.

(4) UNITの開始(start), 停止(stop)
[root@rcmp-sv01 ~]# systemctl  start netwifistaticip.service
[root@rcmp-sv01 ~]# systemctl  stop netwifistaticip.service

(5) UNITの自動起動(enable)と、停止(disable)
[root@rcmp-sv01 ~]# systemctl  enable  netwifistaticip.service
[root@rcmp-sv01 ~]# systemctl  disable netwifistaticip.service

peace!