Raspi4をCOBOTTAのROSコントローラにする
RasPi4があったので、COBOTTAのROSコントローラにしようと思います。これによって、他のPCでアプリを作っても制御権は、RasPi4に与えるのみでOKになります。
RasPi4をCOBOTTAのROSコントローラにするには、
- 外部PCからアクセスのためにAP化
- 有線LANをCOBOTTAと接続するためのNATの設定
- ROSのインストール
- denso_robot_rosのインストール
が必要になります。また、起動のたびにTPをつけるのは結構面倒なので、初期化コマンドを送るアプリも必要になります。
RasPi4のAP化
まずは、AP化です。以前のRaspiでは、hostapdを使っていたのですが、最近のUbuntuでは、Netplanを使っており、設定のみでアクセスポイントにすることができます。
netplan では、/etc/netplan/50-cloud-init.yamlにAccessPointの設定を追加すればOKのようです。初期設定では、下のようになっています。
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
eth0:
addresses: []
dhcp4: true
optional: true
version: 2
これに無線LANの設定を追加していくのですが、私が使っているRasPi4の無線LANのデバイスが wlan0 となっていましたので、以下を追記します。
wifis:
wlan0:
dhcp4: no
addresses: [ 192.168.10.1/24 ]
access-points:
"CobottaPC":
password: "<passwrod for accesspoint>"
mode: ap
アクセスポイントのIPアドレスは、192.168.10.1に設定しています。ここでaccess-pointsの中には、アクセスポイント用のSSIDの設定をして、modeをapとしています。
また、デフォルトGatewayをCOBOTTAに設定し、ネームサーバーをRasPi4自身にする設定を追加すると下のようになります。
wifis:
wlan0:
dhcp4: no
addresses: [ 192.168.10.1/24 ]
gateway4: 192.168.0.1
nameservers:
addresses: [ 192.168.10.1 ]
search: []
access-points:
"CobottaPC":
password: "<passwrod for accesspoint>"
mode: ap
これでアクセスポイントの設定は終了なのですが、無線LANを使う場合には、NetworkManagerをインストールして,refererに設定する必要があるようです。そこで、NetworkManagerをインストールします。
$ sudo apt-get install network-manager
次にCOBOTTAへのアクセスのために、有線LANの方を 192.168.0.120 という固定アドレスに設定しますので、これもnetplanの設定に追加します。最終的に、下のように設定しました。
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
version: 2
renderer: NetworkManager
ethernets:
eth0:
addresses: [ 192.168.0.120/24 ]
dhcp4: no
optional: true
wifis:
wlan0:
dhcp4: no
addresses: [ 192.168.10.1/24 ]
gateway4: 192.168.0.1
nameservers:
addresses: [ 192.168.10.1 ]
search: []
access-points:
"CobottaPC":
password: "<passwrod for accesspoint>"
mode: ap
以上で、アクセスポイントの設定は終了しましたので、設定を反映していきます。
$ sudo netplan generate
$ sudo netplan apply
これで、再起動すると CobottaPCといアクセスポイントがあれば、設定完了なのですが、クライアントPCのIPアドレスは、自分で設定しなければいけません。このままでの運用だと、PCを変更するたびに設定が必要なので、DHCPDでIPアドレスを配れるようにします。
DHCPDの設定は、dnsmasq を使うと簡単なので、/etc/dnsmasq.conf に以下の設定を追加します。
no-resolv
no-poll
dhcp-range=192.168.10.10, 192.168.10.20, 24h
server=192.168.10.1
この設定では、192.168.10.10から192.168.10.20までのIPアドレスを、貸与期間 24時間で配布することができます。
以上の設定ができれば、再起動して、クライアントPCを接続して、動作するかを確認します。
有線LANをCOBOTTAと接続するためのNATの設定
アクセスポイントの設定は終わりましたが、このままでは外部PCからCOBOTTAへの直接接続できませんし、Windows上のVirtualTPも使えませんので、NATの設定が必要になります。通常は、iptablesで設定するのだが、/etc/sysctl.conf でip_forwarding を 1 に設定するだけで大丈夫のようなので、追加設定を行う。
デフォルトでは、すべてコメントアウトされていたので、下の1行を追加する。
net.ipv4.ip_forward=1
これで終了。
ROS(melodic)のインストール
Ubuntuをインストールしている場合には、ROSのインストールは、オフィシャルサイトの手順通り行えばよいと思います。
$ sudo apt install curl git
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
$sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
$ sudo apt update
$ sudo apt install ros-melodic-desktop-full
$ sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
$ source /opt/ros/melodic/setup.bash
$ sudo rosdep init
$ rosdep update
次に、moveitをインストールしていきます。こちらもオフィシャルサイトの通り実行すれば大丈夫だと思います。
$ sudo apt install ros-melodic-moveit ros-melodic-*control*
$ sudo apt install python-pip
$ pip install numpy-quaternion
この手順をシェルスクリプト化したものをros_install.shとして添付しています。
資料