4月開発作業用環境整備履歴

opencv3をインストール

この記事に従ってインストール

Ubuntu16.04 LTSにOpenCV3.1をインストール から顔認識のテストまで - 粗大メモ置き場

gst_app_sink_pull_sample not declaredと出たので

c++ - failure in compiling opencv with cap_gstreamer error - Stack Overflow

set WITH_GSTREAMER_0_10 to ONをやった

 

目的のプロジェクトのビルドで、CV_SQRが定義されてないと出る。githubopencv_contribのところにcv_sqrが定義されているので、opencv_contribをインストールするとよいのかもしれない。

OpenCV3.0とopencv_contribをubuntuに入れた作業メモ - Qiita

cmakeでエラーになる

OpenCV: Build opencv_contrib with dnn module

これに従って一からインストールし直し

最後にmake install、ldconfigなどする。正しくopencvがインストールされている模様。/usr/local/include/opencvgithub.com/opencv(opencv3.2.0)のmake installをすると更新されるので、/usr/local/includeはopencvのバージョン3に対応するものだと思われる。opencv/cv.hの中で、

#include "opencv2/core/core_c.h"

#include "opencv2/imgproc/imgproc_c.h"

などとされている。でも、GaussianBlurが宣言されているのはopencv2/imgproc.hppの中。おそらくopencvの使い方として、opencv2やopencv3は、opencv2/imgproc.hppをincludeして使うかたちと思われる。一方、ターゲットのプロジェクトでは#include <opencv2/*>をしておらず、#include "opencv/cv.h"や#include <opencv/cv.h>をしている。

→ターゲットのopencvのバージョンはopencv1系あるいはopencv2系かもしれない。

OpenCVとは? 最新3.0の新機能概要とモジュール構成 - Build Insider

contribモジュールはopencv3.0以降はopencv_contribになっている。これもopencv2系である可能性示している。

OpenCV2.1からOpenCV2.2の変更点(ChangeLog) | OpenCV.jp

これによるとopencv2.1から2.2への変更点として、推奨されるインクルードの書き方が、<cv.h>から<opencv2/imgproc/imgproc.hpp>に変更になっている。

 

OpenCVをLinuxにインストール - AkiWiki

これをみてopencv 1.1preをインストールsourceforgeからソースをとってきてmake。

#38168 (Conflicting declarations in tiff and opencv) – MacPorts

このエラーがでたので、cxtypes.hの当該箇所をtypedef long int64;に変更した

 

、、とやっている途中で、opencvはapt-get install ros-kinetic-opencv*とすればよいと聞いたのでいったん後回し。apt-getしたあとの/usr/local/includeが更新されていないような気がする。

----

これを見てQtの5.5を~/archiveの下にインストールした

LinuxでQtアプリを作る - Yahoo!知恵袋

----

インストールされているvtkのバージョンは6.2.0

http://www.pcl-users.org/PCL-1-7-Compilation-Problems-td4028868.html

 

-----

ターゲットの都合、/usr/include/cv_bridgeと/opt/ros/kinetic/include/cv_bridgeを別名にmv

----

ターゲットの都合/usr/include/boostを別名にmv ...だとだめだったのでもとに戻した 

----

ターゲットの都合/usr/lib/x86_64-linux-gnu/qt4を別名にmv→やっぱり元に戻した

 

★最後にもう一度クリーンなところからcatkin_makeをするべき。/usr/以下のファイルをmvしたりしているので

 -------

opencvを全部uninstallしてrosのopencvのみを使うようにする。現状どういったものがインストールされているかというと

/usr/local/lib/にlibopencv_*2.4.13とlibopencv_*3.2が入っている

/usr/local/include/にopencv/とopencv2/が入っている

/usr/lib/x86_64-linux-gnu/にlibopencv_*2.4が入っている

/usr/includeにopencv/とopencv2/が入っている

/opt/opencv-2.4.13がある

 

まずはmake uninstall。

/opt/opencv-2.4.13/build $ sudo make uninstall

~/archive/opencv_root201704020701/build_opencv $ sudo make uninstall

次にapt-get --purge remove。

sudo apt-get --purge remove opencv

$ sudo apt-get --purge remove libopencv* python-opencv

$ sudo rm /usr/local/lib/python2.7/site-packages/cv2.so

 

インストールされているパッケージを調べるには

$ dpkg --get-selections

libopencv-calib3d2.4v5

libopencv-contrib2.4v5

など、2.4v5が含まれるパッケージもアンインストール

 

全て消して入れ直してみるので

$ sudo apt-get --purge remove ros-kinetic-opencv3 ros-kinetic-vision-opencv

$ sudo apt-get install ros-kinetic-desktop-full

 

これでもだめ。

2017人気のプログラミング言語

Which Are The Most Loved and Most Hated Programming Languages | 2017

によると、人気の言語ベスト5は

1. Rust

2. Smalltalk

3. TypeScript

4. Swift

5. Go

だそうなのでこれらについて概要を調査

 

Rust

https://imoz.jp/note/rust-functions.html

によると「Rust は、Firefox を開発する Mozilla が開発し、次世代ブラウザの開発に使っているプログラミング言語」「現在、Mozilla はブラウザ開発に用いていますが、WebAssembly 等でも使えるようになりつつありますし、OS や組み込み等ではメモリの効率性と安全性で大きな優位性があり、今後様々な分野で使われるのは間違いないと信じています」とある。まずはウェブ系で使われているぽい。そんなに広く普及している感じがしないなあ。。「2015年中頃の安定版のリリースあたりから次第に注目を集めるようになりました」だそう。

 

Smalltalk

1980年公開だそうでとても古い言語。

smalltalk言語とは、どのような言語をいうのですか?何に使われ... - Yahoo!知恵袋

これによると、2014年時点ではあまり使われない言語だった模様。PharoというSmalltalk環境でwebアプリケーションを作る事例がある。ほかにはSqueakというSmalltalk環境もある。

Smalltalkで作るWebアプリケーション【10日目】 | Developers.IO

 

TypeScript

2012年登場。JavaScriptに「省略も可能な静的型付けとクラスベースオブジェクト指向を加えた」もの。パッと見それなりに使われているように見える。

 

Swift

iOSアプリを作る用途で使われているやつ。2014年登場。

 

Go

 

 

jenkins

似たようなCIツールにwerkerというものがあるそう。

これを見てインストール
Ubuntu 16.04: Jenkins(Apache2)をインストールする - Narrow Escape

 

 これをみて、pushしたときにビルドするように設定しようとした

JenkinsでGitにPush時に自動ビルドさせる – Simple IT Life

1分おきという設定  H/1 * * * という風に書いていたがこれは動作しない H/5 * * *くらいにしておかないといけない。

 

jenkinsにログインできなくなった。
sudo service jenkins stopしてから/var/lib/jenkins/config.xmlの<useSecurity>のところをtrueからfalseにして、sudo service jenkins startしたらパスワード無しでログインできるようになった。でももう一度、falseからtrueにしてパスワードがかかった状態にしようとしてもそうならない。jenkinsの画面からガイドの示すままにグローバル設定を開いてもそれっぽい設定項目がない。と思ったけどあった。ただ、前に作ったユーザが有効になっていない?

jenkinsがブラウザ上でreverse proxy setup is brokenというエラーを出す。

 

ビルド手順の追加のところでAntやGradle、Mavenという物がある。

nginx Apacheに替わる、高負荷に強いオープンソースのwebサーバ

Docker プロセスごとに起動できる軽量、高速な仮想マシンのようなもの

Vagrant 仮想マシンのラッパーのすごいやつ

redmine

JIRA

 

 

 

 

----

課題について

 

どんなコマンドを実行しているかはおそらく本来ならユーザアカウントの権限がちゃんとあるなら、jenkinsの「プロジェクト」の「設定」という欄で閲覧できるのだろうけど、閲覧できないので「コンソール出力」をみて推測するしかないのかもしれない

ちょっと見たところDockerを使っているように見える

 

gazebo、ros_controlについて

オリジナルロボットを作ってgazeboでシミュレートする方法は下記のページがわかりやすい。

ROSで始めるロボティクス(3) ー 差動二輪ロボットを準備する ~ BRILLIANTSERVICE TECHNICAL BLOG

ROSで始めるロボティクス(3) ー 差動二輪ロボットを準備する ~ BRILLIANTSERVICE TECHNICAL BLOG

 

gazeboとROSの連携について

Gazebo + ROS で自分だけのロボットをつくる 5. GazeboとROSの連携 - Qiita

Controller と HardwareInterface との間の処理の仕組み(1. ロボットモデルの定義と登録) - Qiita

No.6-5:GazeboをROSに繋ぐ (GazeboにおけるURDF 編) - 九州工業大学 CIR-KIT Blog

ros_controls/ros_controllers の制御の仕組み (position/effort/velocity_controllers の基礎) - Qiita

このあたりの記事が詳しいが、詳しすぎてよくわからない。

ros_controlのコンセプトは↓ここに書いてあるぽい

http://roscon.ros.org/2014/wp-content/uploads/2014/07/ros_control_an_overview.pdf

 

オリジナルロボットのためのurdfファイルやyamlファイルやlaunchファイルを見て、その書式を見て、意味を解読することをやると理解できるかもしれない

 

「ROSで始めるロボティクス(3)」の例についてみていく

 

launchファイルについて

gazebo.launchとcontrol.launchがある

gazebo.launchでは

/opt/ros/kinetic/share/gazebo_ros/launch/empty_world.launchを読み込み、gazebo_rosパッケージのspawn_modelというtypeの、urdf_spawnerという名前のノードを立ち上げている。urdf_spawnerのargsで、-param robot_descriptionとしているが、これは、my_robo.urdfを読んでいることになっていそう。

control.launchでは

まず、controller_managerパッケージのspawnerでjoint_state_controllerとdiff_drive_controllerを起動している。joint_state_controllerが常に必要なのかは不明。ROSの、joint_state_controllerのページはほとんど中身がない。

次にrobot_state_publisherを起動している。robot_state_publisherの説明によれば、robot_descriptionパラメタで指定されたロボットのURDFファイルを読んでjoint_statesというトピックを読んで、フォワードキネマティクスを解いてtfを発行しているとある。control.launchではrobot_descriptionパラメタは設定されていないが、(gazebo.launchでは設定されている)どのようにしてURDFファイルを特定しているのか不明。発行するトピックの名前はおそらく/tfと/tf_static。(名前空間の指定は出力されるトピックには影響しないのかな・・)

 

config/controller.yamlファイルについて

diff_drive_controllerの解説↓で、yamlファイルをどのように書くかの例が示されている

diff_drive_controller - ROS Wiki

 

hardware_interface::RobotHWSim、Joint State Interface/Joint Control Interfacesとは何なのか・・?

たぶん、ROSのノードから指令を受け取った後、HWまたはシミュレータに指令を出すまでの間で処理している部分のパーツ。

 

よく見たら、「ROSで始めるロボティクス(3)」の例がうまく動いてない。/my_robo/diff_drive_controller/*のトピックがrostopic listで見えない

rosrun controller_manager spawner diff_drive_controller

とやって、単体でやってもだめ。(正常な時に単体でも動くのかは不明)

apt-get install ros-kinetic-gazebo-ros-controlをしていなかったせいだと判明。

How to run controller_manager - ROS Answers: Open Source Q&A Forum

このロボットについてはdiff_drive_controllerがいてそれが/my_robo/diff_drive_controller/*のトピックを受け付けているっぽいが、

roslaunch kobuki_gazebo kobuki_playground.launchとしたときはどういったコントローラが/mobile_base/commancs/velocity等を受け付けているのか?

「ROSで始めるロボティクス(3)」とは違って、controllerというような名前の付くものをlaunchファイルで起動したりしていないように見える。。empty_world.launchが唯一怪しいか。それともなんとかcontrollerというのは起動しなくてもいいケースがあるのか?

kobuki_playground.launchの場合は、kobuki_gazebo.urdf.xacroの中で<gazebo><plugin name="kobuki_controller" filename="libgazebo_ros_kobuki.so"としている一方で、my_robo_description gazebo.launchの場合はmy_robo.urdfの中で<gazebo><plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"となっているので、kobuki_playground.launchのほうはros_controlを使っていない。

 

kobuki_playground.launchもgazebo.launchもどちらも、/gazeboと/*/robot_state_publisherの両方から/tfが発行されている。robot_state_publisherは必要なのかな・・?

 

ros_controlでノード間通信に依らずロボット間のハードウェアの違いを吸収する - ゼロから始めるロボットプログラミング入門講座

この記事によると独自のコントローラを作るにはこちらが参考になるそう

controller_interface · ros-controls/ros_control Wiki · GitHub

hardware_interfaceについてはこちら

hardware_interface · ros-controls/ros_control Wiki · GitHub

 

 

gazebo上のkobukiシミュレートで衝突時にバンパのイベントが発生しない

私の環境(Ubuntu 16.04 + Kinetic、Thinkpad T410s)だと

$ roslaunch kobuki_gazebo kobuki_playground.launch

を実行し、小倉さんの本のros_startのvel_bumper.pyを実行してkobukiをブロックに衝突させても/mobile_base/events/bumperが発行されない

$ rostopic pub -r 1 /mobile_base/events/bumper kobuki_msgs/BumperEvent -- '1' '1'

として、/mobile_base/events/bumperを発行したらちゃんとkobukiがバックする。

/mobile_base/sensors/imu_dataや、/joint_statesはちゃんと発行されている。

 過去のブログだと

ROS勉強 - akak1のブログ

他の人も同様の問題に行き当っているぽい

Bump Sensors on Simulated TurtletBot in kinetic - ROS Answers: Open Source Q&A Forum

ここにも同様の人が

How can I access the bumper sensors on a turtlebot in a simulation? - ROS Answers: Open Source Q&A Forum

 

ROSのテストについて

pythonのunittestやMock、gmock、ROSについて

 

gmockとgtestのインストール

$ sudo apt-get install lcov
$ sudo apt-get install google-mock

Google Test Install: まあ、こんなもんか

これを参考に。でもsudo cpはしないでおいた。

mocks関連でcatkin_makeができなかったものについて、CMakeLists.txtを編集してビルドが通るようにした

 

pythonのunittestについて

Pythonでテスト 連載(2) ユニットテストの書き方 | UNITED アドテクブログ

pythonのmockについて

[python] まだmockで消耗してるの?mockを理解するための3つのポイント - くろのて

rostestについて

「rostest」 の使い方 - うごくものづくりのために

 

Win32APIや.NETって?

Win32 APIと.NET Frameworkの違いを教えてくださいあとGUIアプリを作る... - Yahoo!知恵袋

Windowsアプリケーションについての整理 ー Visual Studio、Win32(Win32API)、.NET、.NET Framework、MFC、ATL、Windows SDK) - Awesome Hacks!