LIFE LOG(ここにはあなたのブログ名)

あつあつ備忘録

ソフトやハード、時にはメカの備忘録をまとめていきます

【Ubuntu18.04】rviz_visual_toolsのインストール

catkin_make中にエラーがでたので調べたのですが、情報が少なかったのでメモ インストール方法 $ sudo apt-get install ros-melodic-rviz-visual-tools インストールしていないこと出るエラー Could not find a package configuration file provided by "rvi…

【Ubuntu18.04】NVIDIAドライバ・CUDA・cuDNNのインストール方法

はじめに Ubuntu18.04でNVIDIA周りの環境構築の方法を記述します。 Ubuntu16.04よりも少し面倒くさいですが、手順を追えば難しいことはありません。 想定している環境 OS:Ubuntu 18.04 LTS GPU:Geforce GTX-1060(1080Tiでも確認済み) Ubuntu18.04にイン…

Ubuntu18.04のインストール

ノートPCにUbuntu18.04のインストール方法を紹介します。 今回はHDDとSSDの2つが載ったPCにインストールをします。 構築する環境 概要 インストールPC ALIENWARE 15 R3 インストールするOS Ubuntu18.04 LTS スワップ領域 約16GB インストール先 SSD まずPCか…

【ROS】urdfでparentとchildの関係性を調べる

wiki.ros.org こちらを見ながら進めていった。 myfirst.urdf <robot name="myfirst"> <link name="base_link"> <visual> <geometry> <cylinder length="0.6" radius="0.2"/> </geometry> </visual> </link> </robot> $ roslaunch urdf_tutorial display.launch model:=myfirst.urdf lengthはz軸の長さ、radiusは半径でy軸。 03-o…

【C++】vectorでpairを使うメモ

最初に vectorではpairが用いられることが多いようなので、C++でvectorとpairを使った動作を備忘録として残します。 vector_pair.cpp #include <iostream> #include <vector> int main() { std::vector<int> vec; vec.push_back(2); vec.push_back(7); vec.push_back(0); vec.push_b</int></vector></iostream>…

【C++】コピーコンストラクタ

これまでの方法だと オブジェクトを関数に渡す 関数からオブジェクトを返す ときに問題が発生した。 具体的には オブジェクトを関数に渡すと、そのオブジェクトのコピーが作成され、オブジェクトを受け付ける関数の引数として使用される 割り当てられたメモ…

【C++】コンストラクタ関数のオーバーロード

コンストラクタ関数もオーバーロードできる コンストラクタをオーバーロードするメリット 柔軟性を得る 配列のサポート コピーコンストラクタを作成すること study145.cpp #include <iostream> using namespace std; class myclass { int x; public: myclass() { x = 0</iostream>…

【C++】参照の返し

stdudy135.cpp #include <iostream> using namespace std; int &f(); int x; int main() { f() = 100; cout << x << "\n"; return 0; } int &f() { return x; } $ ./study135 100 f() = 100;はf()によって返される参照に100を代入している return x;はxへの参照(x</iostream>…

【C++】オブジェクト参照の引き渡し

atsuyakoike.hatenablog.com こちらでは、オブジェクトを関数に渡した場合は、オブジェクトのコピーが作成されることを確認している。 コピーなのでコンストラクタは呼ばれないがデストラクタは呼ばれる 動的メモリを2度以上開放することになり問題が発生す…

【C++】参照

参照(reference) すべての面で変数の別名として動作する暗黙的なポインタ(implict pointer) 用途 参照を関数に渡すことができる 関数から参照を返すことができる 独立した参照を作成することができる study127_1.cpp #include <iostream> using namespace std; void f</iostream>…

【C++】newとdelete

C言語でメモリを動的割り当てするときはmalloc()を使用し、メモリを開放するときにfree()を使う C++ではnewを使用してメモリを割り当て、deleteを使用して開放する new演算子は自動的に十分なメモリを割り当てる sizeof()などを使用する必要がない new演算子…

【C++】オブジェクトのポインタ

オブジェクトのポインタ オブジェクトポインタを使用した演算子は、他のデータ型のポインタ演算と同様に、そのオブジェクト型に関して行われる オブジェクトポインタをインクリメントすると次のオブジェクトを指すようになり、デクリメントするとその逆にな…

【C++】オブジェクトの配列

オブジェクトは変数を持っており、他の変数と同じ機能と属性を持っている オブジェクト配列へのアクセス方法も、ほかの変数配列と同じ study108.cpp #include <iostream> using namespace std; class samp { int a; public: samp( int n ) { a = n; } int get_a() { re</iostream>…

【C++】フレンド関数

関数をクラスのメンバにすることなく、関数からクラスの非公開メンバにアクセスすることができる 1つの関数から、2つ以上のクラスの非公開メンバにアクセスしたい時などに使われる。 クラスの宣言の内部にfriendを先頭につけて関数のプロトタイプを含める s…

【C++】関数からオブジェクトの返し

関数にオブジェクトを渡すことができるように、返すこともできる。 #include <iostream> #include <cstring> using namespace std; class samp { char s[80]; public: void show() { cout << s << "\n"; } void set( char * str ) { strcpy( s, str ); } }; samp input() { char</cstring></iostream>…

【C++】関数へオブジェクトの引き渡し

関数に引数としてデータを渡すのと同じように、オブジェクトを渡すこともできる。 study86.cpp #include <iostream> using namespace std; class samp { int i; public: samp( int n ) { i = n; } void set_i( int n ) { i = n; } int get_i() { return i; } }; void s</iostream>…

【C++】オブジェクトの代入

「オブジェクト1=オブジェクト2」のような書き方で代入できる。 study79.cpp #include <iostream> using namespace std; class myclass { int a, b; public: void set( int i, int j ) { a = i; b = j; } void show() { cout << a << ' ' << b << "\n"; } }; int main</iostream>…

【C++】インライン関数

インライン関数の特徴 メリット 関数の呼び出しと終了時に伴うオーバーヘッドが発生しないことから、通常の関数よりも早く実行できる。 デメリット ファイルサイズが大きくなる。 ループ、goto、switchを含めることができない 再帰してはいけない 関数定義の…

【C++】継承②

study54.cpp #include <iostream> #include <cstring> using namespace std; enum yn { no, yes }; enum color { red, yellow, green, orange }; void out( enum yn x ); char *c[] = { "赤", "黄", "緑", "オレンジ" }; class fruit { public: enum yn annual; enum yn perenni</cstring></iostream>…

【C++】継承①

継承をすることで、最も汎用的なクラスから、最も特化されたクラスへの流れを示すクラス階層を作成できる。 あるクラスを別のクラスが継承するとき 継承される側のクラスを 基本クラス と呼ぶ 継承する側のクラスを 派生クラス と呼ぶ #include <iostream> using names</iostream>…

【C++】仮引数を受け取るコンストラクタ

コンストラクタ関数には引数を渡すことができる study48.cpp #include <iostream> #include <cstring> #include <cstdlib> using namespace std; class strtype { char *p; int len; public: strtype( char * ); ~strtype(); void show(); }; strtype::strtype( char *ptr ) { len = strl</cstdlib></cstring></iostream>…

【C++】コンストラクタ関数とデストラクタ関数

コンストラクタ関数 クラス名と同じ。 スタックの索引値を設定することができる オブジェクト作成時に実行される デストラクタ関数 オブジェクトが破棄されるときに呼び出される mainでオブジェクトが生成されていたとしたら、mainを抜けるとき 例えばオブジ…

【C++】オーバーロード

関数オーバーロードの主な用途として、コンパイル時ポリフォーリズムを行うことが挙げられる 1つの名前をオーバーロードすることで、複数あるデータの方の種類などに対応できる 関数をたくさん作り、それぞれ別の名前をつける必要がない study29.cpp #includ…

【C++】クラスの作成

概要 1つのクラスに対して複数のオブジェクトを作ることができる。 今回はstackクラスに対して、s1とs2という名前でオブジェクトを作成する。 オブジェクト同士は干渉しない study21.cpp #include <iostream> using namespace std; #define SIZE 10 // 文字列の保存 cl</iostream>…

【C++】オブジェクト指向プログラミング

カプセル化 プログラムコードとプログラムコードが扱うデータを一体化して、外部の干渉から両者を保護するための仕組み。 実際にはprivateやpublicといった機能を使用する。publicはprivateの制御インターフェースを提供されるっために使われる。 ポリモーフ…

【ROS】tfを用いた座標変換

画像元 tfとは 座標系管理システム ROSでは順運動学の問題にtfを使用している tfの特徴 時間動機ができる 分散システムが使える rvizとの連携が強力 以下のようなものを作る場合には必須 自立移動ロボット 複数の関節を持つロボットアーム 3次元物体の認識プ…

【ROS】rviz・rqt_plot

画像元 rviz ROSの可視化といえばrviz $ rosrun rviz rvizで起動 Turtlebotのシミュレータを使用してみる $ sudo apt-get install -y ros-kinetic-turtlebot-gazebo $ source ~/.bashrc $ roslaunch turtlebot_gazebo turtlebot_world.launch $ roslaunch tu…

【ROS】pythonライブラリの作成

画像元 ライブラリを置くための準備 ROSではpythonのライブラリを「パッケージ名/src/パッケージ名」におく 前回の記事で作ったbumper_action.pyを移動する $ mkdir -p src/ros_start $ cp scripts/bumper_action.py src/ros_start/ディレクトリをライブラリ…

【ROS】Actionlibで時間のかかる処理を実行

画像元 最初にこれまでのおさらい TopocのPublisherとSubscriberは、非同期のデータフロー Serviseは同期通信 Actionlibは、どの司令に対する結果なのかや、実行中のフィードバックを返すことができる 例えば、自立移動の命令を送り、移動が終わった時に結果…

【ROS】Topic/Serviceの作成

画像元 独自のService型の製作 外部プログラムから速度(linear.xとangular.z)を指定して動かす 指定できる速度の値の範囲が決まっており、それ以上の速度は無視する 速度がセットできたか、無視されたかわかる $ roscd ros_start $ mkdir srv $ vi srv/Set…