暁の電子工作奮闘記

知識も経験もないのにArduinoとRaspberryPiを買ってしまった大学生が、勉強しながらあれこれ試行錯誤するブログ。

明けましておめでとうございます+現状報告・今年の抱負

明けましておめでとうございます。暁です。

あっという間に1年が終わり、また新しい1年が始まってしまいました。
せっかくなので今年何をしていきたいか、抱負的なものを書いていきたいと思います。

ROSの基礎の勉強

昨年12月中旬にこんな記事を書きました。 akatsuki1024.hatenablog.com 「ROSを1次ソース見ながらしっかり勉強しよう!」といったものです。
現在(2020/1/4)その0のみですが、長編シリーズにするつもりです。
ただ、キリの良いところまで進めてから記事にしていこうと思っているので
続きはしばしお待ちを。
今BegginerLevelの半分くらいまで進めたので、
BegginerLevelが終わったら記事書こうと思います。

ArduinoとRaspberryPi間の通信

近いうちにArduinoとRaspberryPi間で通信させてみたいと思ってます。
Serial通信と無線通信の2つの方法で。

Serial通信はUSBでつないだら後は少しコード書けばいけそうですね。
無線通信はArduinoに無線通信モジュールが別途必要になってくるので
それを買うところから始めないといけなさそう。

加えてROSの勉強がある程度済んだらここら辺も読み進めたい。 rosserial_arduino/Tutorials - ROS Wiki

簡易監視カメラの作成

ラズパイとUSBカメラで簡単な監視カメラを作ってみたいと思ってます。
OpenCVを用いた画像処理で動くものを検知したり物体認識したりできたらなと。
動くものを検知したらSlackの通知が入るようにするとかもできたらいいですね。

カメラ付きラジコンカー

カメラとArduino・ラズパイが載ったラジコンカーも作ってみたいです。

マ〇オカートのように1人称視点で操縦できるようにするのが目標ですかね?(笑)
操縦はPSコントローラーかスマホで。 ラズパイでカメラの画像処理・PCに動画転送・コントローラ情報の受け取り・Arduinoへ命令、
Arduinoでモーター動かすといった感じでしょうか。
上3つの抱負を上手く使う必要がありそうです。

ソフトウェア・アプリケーション開発

全然違う内容になりますが軽いソフトウェア・アプリケーション開発もしてみたいなと思ってまして。
JavaC#やKotlinとかで開発することになるんでしょうか。
どれも手をつけたことがないので新しい言語を勉強することになりそうですね。
まぁなんとかなるでしょう!(笑)

自分用に日記ソフトを作ってみたいなとか思ってます。
いい感じにできたら無料配布してみたい。

GitHub Pages

GitHub Pagesは、GitHubが提供している静的なウェブページのためのウェブホスティングサービスです。
これを使って自分の静的サイトを作ろうというわけです。

HTML, CSS, JavaScript は少し勉強したことがあるので簡単なものはすぐ作れるかな?
計算やおもしろいギミックとかは簡単にできるものなのでしょうか。
そこらへん含めて勉強していきたいです。




かなり長くなりました。
書いたもの全部はできないとは思いますが、
まずはやりたいことを文章化することが大事なので!(笑)

進捗生み次第、不定期に更新していこうと思っていますので、
もし興味があるものがあれば「読者になる」を押してもらうか
更新報告をするTwitterをフォローしていただければ幸いです。 twitter.com

今年もよろしくお願いします!

[ROS Noetic] catkin build が使えない…?の解決策

はじめに

ROSでワークスペースをビルドをするとき、ROS Wikiでは
「catkin_make」というコマンドを使っています。

ところが調べてみるとcatkin_makeを改善した
「catkin build」というコマンドがあるようです。

catkin build については下の記事がわかりやすくまとめてありました。 miyutomori.com

ではいざ使おうとインストールしようとすると、

$ sudo apt install python-catkin-tools
(略)
インストールすることができないパッケージがありました、おそらく、あり得ない状況を要求したか、(不安定版ディストリビューションをしているのであれば)必要なパッケージがまだ作成されていなかったりIncomingから移動されていないことが考えられます。
(略)
以下のパッケージには満たせない依存関係があります:
python-catkin-tools : 依存:python-catkin-pkg (>=0.2.9) しかし、インストールすることができません。
          依存:python-osrf-pycommon しかし、インストールすることができません。
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

とエラーが出てインストールできませんでした。
依存関係にあるパッケージが存在しないせいでインストールできないということですかね。

というわけで解決策を探しました。

先に結論だけ

sudo apt install python3-osrf-pycommon python3-catkin-tools

これで catkin build が使えるようになりました。

解決に至った経緯

python3-catkin-tools を発見

「Python2.7が2020/1/1にサポート終了したため
 ROS Noetic は Python3のみ対象になる」
と ROS Wiki に書いてあります。 wiki.ros.org

Python3版のcatkin-toolsが出ているのでないかと思い、
apt search でパッケージの検索してみました。

$ apt search catkin-tools
python-catkin-tools/...
python3-catkin-tools/...

ありましたね。

python3-catkin-toolsのインストール

$ sudo apt install  python3-catkin-tools

でエラーも出ずにインストールができました。

しかし、使えるかどうか確かめるためにヘルプを見ようとすると…

$ catkin -h
Traceback (most recent call last):
(略)
pkg_resources.DistributionNotFound: The 'osrf-pycommon>0.1.1' distribution was not found and is required by catkin-tools

catkin-toolsに必要な'osrf-pycommon>0.1.1'がないと言われてますね。

python3-osrf-pycommonのインストール

先ほど出た

pkg_resources.DistributionNotFound: The 'osrf-pycommon>0.1.1' distribution was not found and is required by catkin-tools

というエラーをそのままコピーして検索をかけると、 github.com このページに辿り着きました。
catkin-toolsのIssueですね。

9/7のmintarさんのコメントを見ると、

Yes, all that's still missing is the apt dependency. If you manually install python3-osrf-pycommon, everyhing works:
sudo apt-get install python3-osrf-pycommon python3-catkin-tools

「aptの依存関係が足りないから手動で python3-osrf-pycommon をインストールすると解決するよ。」

とのことなので、

$ sudo apt install python3-osrf-pycommon

を実行すると、catkin build が使えるようになりました。

解決したけど…

catkin-tools がインストールできました。
catkin build も "Build Succeeded!" と言ってるので無事ビルドできたのでしょう。

ただ、catkin-toolsの公式ドキュメントのインストールページでは、 catkin-tools.readthedocs.io python3-catkin-toolsについて言及してなさそうなんですよね。

今python3-catkin-toolsがどういう扱いか、ROS Noetic で正式にサポートしているか
もう少しGitHubのIssue読んでみたりして確認してみようと思います。

今日はここまで。 お付き合いありがとうございました!

[ROS Noetic] ROS Wiki Tutorials を読み進める (その0) / 概要とインストール

ROS Wiki の Tutorials を中心に ROS Noetic を実際に使いながら読み進め、
ROSについて勉強したり遊んだりするシリーズです。


こんにちは!暁です。

今ラズパイでUbuntu20.04を動かしているんですが、
ROSを使ってみたいと思いまして。

というわけでROS Wikiを読み進めながらROSを勉強していきたいと思ってます。
今回はROSの概要とROS Wikiについての説明、そしてROS Noeticのインストールをしていきます。

ROSとは?

ROSはオープンソースで提供される, ロボット向けのメタ・オペレーティングシステムです. ハードウェア抽象化, 低レベルなデバイス制御, 一般的な機能性, プロセス間通信, そして, パッケージ管理など, 一般的なオペレーティングシステムに要求されるサービスを提供します. また, コードを複数台のコンピュータにわたって保持・ビルド・記述・実行するためのツールやライブラリも提供しています.
http://wiki.ros.org/ja/ROS/Introduction

ちょっと今はROSの何たるかを説明できるほど知識がないので自分の言葉では説明できませんが、 公式Wikiに詳しく書いてあるのでそれを読みましょう。

ROSは「Robot Operation System」の略で名前にOSを含みますが、
WindowsなどのOSとは違い、ミドルウェアやソフトウェアフレームワークの一種であり、
Ubuntuなどで動作するものだそうです。

つまり、
Ubuntu上でROSを動かす」
UbuntuにROSをインストールする」
などといった形になるわけです。

ROSのバージョン

ROSにはMelodicやNoeticなどの複数のバージョンがあります。

…いや、嘘を言ったかもしれません。
正しくは
「ROSにはMelodicやNoeticなどの複数のディストリビューションがあります」
でしょうか。

ROS Wiki にはこう書いてあります。

A ROS distribution is a versioned set of ROS packages.
(ROS ディストリビューションとは、ROS パッケージのバージョンセットのことです。)
Distributions - ROS Wiki

ROSに関してはディストリビューション=バージョンと考えても差し支えないのかな…?
なんならディストリビューション=バージョンと考えるべきなのかもしれませんが。
「ROS バージョン」で検索かけるとMelodicなどを
バージョンとして扱っているサイトがたくさん出てくるので。
ただ、ROS Wikiではディストリビューションで統一されているようなので、
"ディストリビューション"と出てきたらMelodicやNoeticのことなんだなぁと思ってください。

ちなみに、Ubuntu20.04は、
ディストリビューション名:Ubuntu
・バージョン       :20.04
なので、一般的にはディストリビューション=バージョンとはいえないようですね。

少し話がそれてしまいましたが、
ROSにはMelodicやNoeticなどの複数のディストリビューションがあります。
Ubuntuと同じように5年間サポートのLTS(Long Term Support : 長期間サポート)版があり、
それぞれのディストリビューションUbuntuの1つのバージョンに対応してます。
今回インストールするNoeticが最新で、Ubuntu20.04で動作します。

Every ROS release will be supported on exactly one Ubuntu LTS.
(すべてのROSリリースは、ちょうど1つのUbuntu LTSでサポートされます。)
Distributions - ROS Wiki

とあるように、例えばNoeticはUbuntu18.04ではサポートされてない(動かない)ので注意。
下の表にしたがって、対応するディストリビューションをインストールしましょう。

ディストリビューション Ubuntuのバージョン サポート期限
Indigo 14.04 2019年5月
Kinetic 16.04 2021年5月
Melodic 18.04 2023年5月
Noetic 20.04 2025年5月

Distributions - ROS Wiki

ROS Wiki には現在Noeticが推奨となっています。


ROSのバージョン?の話でもう1つ。
上で述べているROSとは別に、「ROS2」というものがあります。

The goal of the ROS 2 project is to adapt to these changes, leveraging what is great about ROS 1 and improving what isn’t.
(ROS 2プロジェクトの目標は、これらの変化に適応し、ROS 1の素晴らしいところを活用し、そうでないところを改善することです。)
Here you will find the official documentation on ROS 2, the newest version of ROS.
(ここでは、ROSの最新バージョンであるROS 2の公式ドキュメントを見つけることができます。)
ROS 2 Overview

要するに、ROS2は今のニーズに合わせて改良したROSと言ったところでしょうか。

ROSから始めるかROS2から始めるか迷いましたが、
ROSと比べてROS2の情報がまだ少ないことと、
おそらくROSで十分事足りるだろうということから
ROSを選択しました。

ROSで何がしたいの?

正直なところを言うと、何ができるかまだよくわかっていません…。

でもおそらく、
「USBカメラで人を認識したときにArduinoで何かしらの動作をさせる」
などといったことができるのかな…?

Arduinoで画像処理などの重めの処理をするのはおそらく厳しいため、
RaspberryPiにArduino・USBカメラを接続する形になると思います。

もしROSを使わない場合。 実装するためには、
カメラからの画像をラズパイで受け取り、
OpenCVで画像処理するためのプログラムを書き、
その処理結果をもとにArduinoに出す命令を決定・送信、
ラズパイとArudinoの間でSerial通信して、
Arudino側で命令を受信して、何かの動作をさせ…?

こんなの1人で実装できる気がしません。
特に、上の処理どうしをどうつなげばよいのか…
でもROSを使えばこれが可能かも…?と期待しています。
数か月後に乞うご期待。

加えて、研究室で使う可能性があるので、今勉強しておいて損はないかなーといったところです。

ROS Wiki

これからROSを勉強したり使ってみたりしたいわけですが、
何を見ればいいんでしょうか?

実は「ROS Wiki」というサイトがあります。
(実はも何もこの記事でもう何度も名前を出してますが…)

ROS Wiki には、ROSについての説明やインストール方法、
そしてチュートリアルなどたくさんの情報があります。
チュートリアルを一通り進めるとROSがある程度使えるようになるのかな?

なんと日本語翻訳版もあります。
「じゃあ日本語のページ見てインストールしよう!」と思ったら…
wiki.ros.org
日本語版のインストールページに飛ぶと、
もうサポート終了しているIndigoのインストールページに飛びます。
チュートリアルも基本的にIndigoベースの古いものみたいです。

という訳で、ROS Wiki英語のページを見た方がよさそうですね。
英語が読めない? 私も読めません笑
DeepLというオンライン翻訳ツールをちょくちょく使いながら読んでます。
DeepLGoogle翻訳と比べて精度良く翻訳してくれます。
元の英語もそこまで難解ではないので、DeepLを使えば英語でもスムーズに読み進められると思います。

ROS Noetic のインストール

ではさっそくROSをインストールしていこうと思います。

Ubutnu20.04LTSなのでROS Noeticをインストールします。
ちなみに私はRasperryPi4で動いているUbuntuにインストールしましたが、
PCで動いているUbuntuにインストールするのと同じ作業です。

RaspberryPi4にUbuntuをインストールする方法はこちら qiita.com

ROS Noetic のインストールは ROS Wiki のインストールページ通りに進めていきます。 wiki.ros.org

このページを上から順に見ていけば大丈夫です。

英語が苦手な人のために必要なところだけピックアップします。
まずUbuntuで端末を開いてください。(Ctrl+Alt+Tで開けます)
端末が開けたら、下のコマンドを上から順に打っていきましょう。

$ 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-noetic-desktop-full

$ source /opt/ros/noetic/setup.bash

$ echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
$ source ~/.bashrc

以上でインストールは終わりです。

1つひとつ軽いコマンドの説明をしようと思ったんですが、
今日は疲れたのであとで追記します。

おつかれさまでした~!

Pythonで特定の文字列を含む行のみを抽出・削除してtxtファイルに書き出し

こんにちは!暁です。

Pythonで特定の文字列を含む行のみを抽出・削除してtxtファイルに書き出すプログラムを書いたので紹介。

具体的に説明すると、
・あるtxtファイル(input.txt)を読み込み、
・"特定の文字列を含まない"かつ"特定の文字列を含む"行を
・別のtxtファイル(output.txt)に書き出す
ためのプログラムです。

除外したい文字列と含んでほしい文字列はどちらも複数個指定可能、
片方のみ設定することも可能です。

# delLine.py

inputFile = "input.txt"     # 読み込みファイル
outputFile = "output.txt"   # 書き込みファイル

containWord = [ここに"含んでほしい文字列群リスト"を入力]    
NGWord = [ここに"除外したい文字列群リスト"を入力]    

for line in open(inputFile):
    # 行中にNGWordを含むか判別
    for i in NGWord:
        if i in line:
            break
    else:
        # 行中にcontainWordを含むか判別
        for i in containWord:
            if i not in line:
                break  
        else:
            # NGWordを含まないかつcontainWordを含む場合、
            # 書き込みファイルの末尾にその行を追加
            with open(outputFile, mode='a') as f:
                f.write(line)

使うときは6, 7行目を書き換えてください。

(例1) "0"を含む行を除外したい場合

containWord = []    
NGWord = ["0"]    

(例2) "a"または"b"または"c"を含む行を除外したい場合

containWord = []    
NGWord = ["a", "b", "c"]    

(例3) "!"と"?"をどちらも含む行のみ抽出したい場合

containWord = ["!", "?"]   
NGWord = []    

(例4) "はてな" を含むかつ "ブログ" を含まない行のみ抽出したい場合

containWord = ["はてな"]   
NGWord = ["ブログ"]    


読み込みたいファイル名を"input.txt"として
delLine.pyと同じフォルダにinput.txtをおいた状態で

python delLine.py

を実行してください。

読み込みファイルに漢字やひらがながある場合は、
読み込みファイルをShift-JISで保存する必要があるかも?
書き込みファイルが文字化けしてたらこちらもShift-JISで保存し直しましょう。

参考にしたサイト
Pythonのfor文によるループ処理(range, enumerate, zipなど) | note.nkmk.me
指定した文字列を含む行を出力 - Qiita

いろいろ初心者です

こんにちは! 暁です。

今回は自己紹介をしていきます。

 

 まずは箇条書き形式で。(2020/12/01現在)

  • 身分:大学生
  • 知識や経験:ほぼない
  • 言語:C / C++, Python(ちょこっと)
  • 主なハードウェア:PC, RaspberryPi4B, Arduino
  • OS:Windows10, Ubuntu, (RaspberryPiOS)
  • Arduino歴:5か月
  • RaspberryPi歴:4か月
  • 所属団体:ロボット系サークル
  • 競プロ:AtCoder(C++ 灰)
  • 外部サイト:Twitter, Qiita

適当に軽く触れていきます。

大学生です

大学に通っていて今B3です。

「B4でいろいろ忙しくなる前に今のうちに…」
といった感じでいろいろ始めてみようかなと思った次第です。
(ちょっと遅い気がしますが笑)

電子工作系は初心者

 Arduinoを買って5か月、RaspberryPiを買って4か月といったところでしょうか。
(一時放置気味だったので実際はもっと短い)

ノートパソコンにUbuntuを入れてみたこともありましたが、
特にこれといって使わないまま放置。

一応ロボット系のサークルに所属してますが、プログラミング担当と
分野違い(…でもないですが)で電子工作系の知識はあまりありません。
中高で習うようなものに毛が生えた程度ですかね…?

プログラミングもほどほど

先ほどプログラミング担当といいましたが、
じゃあつよつよなのかというとそうでもないです。

C++でクラスをある程度使える・作れるくらいレベルで。

AtCoderを少し前に始めてみましたが、全然解けませんね…。
灰です。まだ参加回数が少ないってこともあるかもですが。

Qiitaもやってます

Qiitaは一か月前から始めていて、既に2つの記事を投稿しています。
ラズパイにUbuntuを入れる記事ですね。
よければぜひ読んでみてください。

qiita.com

qiita.com

Qiitaやってるのになぜはてなブログも始めたか。

Qiitaは「プログラマのための技術情報共有サービス」です。
簡潔かつ正確な記事であることが期待されていると思います。
(そうでない記事を否定しているわけではありません)

はてなブログでは試行錯誤している過程も含めて
肩の力を抜いた記事を書いていこうと思ってます。
投稿頻度もはてなブログの方が多くなるかな?

もちろんQiitaの方もこれからも更新していきます。

初心者のためのRaspberryPi / Arduino記事

これからRaspberryPi / Arduinoの記事を書いていく予定ですし、
もしこの記事を見てくれた方もおそらく
「RaspberryPi / Arduinoで何かやってみたい!」
という人だと思います。

上の自己紹介の通り私自身いろいろ初心者なので、
これからRaspberryPi / Arduinoを使い始める人が
参考になる記事が書けるといいなぁと思ってます。

いや、参考になる記事にします!

 

…こんなものでしょうか笑

自己紹介はこれくらいにしようと思います。

あまり力まず気楽に書いていきます。

ここまで読んでいただきありがとうございました!

 

最後に一応自己紹介の記事なのでTwitterとQiitaのリンクを。

qiita.com

 

twitter.com

[初投稿] 主にRaspberryPi・Arduino関連のことを書いていきます

はじめまして! 暁といいます。

はてなブログを開設してみることにしました。

RaspberryPi / Arduino初心者である私が疑問に思ったこと・調べてみたこと・やってみたこと・失敗や成功したことを備忘録も兼ねて自由に書いていこうと思ってます。

RaspberryPiやArduinoが中心で、関連してUbuntuやROS、電子工作などをテーマにした記事を今のところ予定してます。

 

Qiitaも1か月前から始めています。Qiitaはしっかり、はてなブログはゆる~くといった感じで使い分けようかと思ってます。

qiita.com

 

Twitterも貼っときます。

twitter.com

 

初投稿なので今回はこのくらいで。

自己紹介などは次回にまわそうと思います。

これからよろしくお願いします!