Ubuntu
catkin_make中にエラーがでたので調べたのですが、情報が少なかったのでメモ インストール方法 $ sudo apt-get install ros-melodic-rviz-visual-tools インストールしていないこと出るエラー Could not find a package configuration file provided by "rvi…
はじめに Ubuntu18.04でNVIDIA周りの環境構築の方法を記述します。 Ubuntu16.04よりも少し面倒くさいですが、手順を追えば難しいことはありません。 想定している環境 OS:Ubuntu 18.04 LTS GPU:Geforce GTX-1060(1080Tiでも確認済み) Ubuntu18.04にイン…
ノートPCにUbuntu18.04のインストール方法を紹介します。 今回はHDDとSSDの2つが載ったPCにインストールをします。 構築する環境 概要 インストールPC ALIENWARE 15 R3 インストールするOS Ubuntu18.04 LTS スワップ領域 約16GB インストール先 SSD まずPCか…
最初に 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>…
これまでの方法だと オブジェクトを関数に渡す 関数からオブジェクトを返す ときに問題が発生した。 具体的には オブジェクトを関数に渡すと、そのオブジェクトのコピーが作成され、オブジェクトを受け付ける関数の引数として使用される 割り当てられたメモ…
コンストラクタ関数もオーバーロードできる コンストラクタをオーバーロードするメリット 柔軟性を得る 配列のサポート コピーコンストラクタを作成すること study145.cpp #include <iostream> using namespace std; class myclass { int x; public: myclass() { x = 0</iostream>…
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>…
atsuyakoike.hatenablog.com こちらでは、オブジェクトを関数に渡した場合は、オブジェクトのコピーが作成されることを確認している。 コピーなのでコンストラクタは呼ばれないがデストラクタは呼ばれる 動的メモリを2度以上開放することになり問題が発生す…
参照(reference) すべての面で変数の別名として動作する暗黙的なポインタ(implict pointer) 用途 参照を関数に渡すことができる 関数から参照を返すことができる 独立した参照を作成することができる study127_1.cpp #include <iostream> using namespace std; void f</iostream>…
C言語でメモリを動的割り当てするときはmalloc()を使用し、メモリを開放するときにfree()を使う C++ではnewを使用してメモリを割り当て、deleteを使用して開放する new演算子は自動的に十分なメモリを割り当てる sizeof()などを使用する必要がない new演算子…
オブジェクトのポインタ オブジェクトポインタを使用した演算子は、他のデータ型のポインタ演算と同様に、そのオブジェクト型に関して行われる オブジェクトポインタをインクリメントすると次のオブジェクトを指すようになり、デクリメントするとその逆にな…
オブジェクトは変数を持っており、他の変数と同じ機能と属性を持っている オブジェクト配列へのアクセス方法も、ほかの変数配列と同じ study108.cpp #include <iostream> using namespace std; class samp { int a; public: samp( int n ) { a = n; } int get_a() { re</iostream>…
関数をクラスのメンバにすることなく、関数からクラスの非公開メンバにアクセスすることができる 1つの関数から、2つ以上のクラスの非公開メンバにアクセスしたい時などに使われる。 クラスの宣言の内部にfriendを先頭につけて関数のプロトタイプを含める s…
関数にオブジェクトを渡すことができるように、返すこともできる。 #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>…
関数に引数としてデータを渡すのと同じように、オブジェクトを渡すこともできる。 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>…
「オブジェクト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>…
インライン関数の特徴 メリット 関数の呼び出しと終了時に伴うオーバーヘッドが発生しないことから、通常の関数よりも早く実行できる。 デメリット ファイルサイズが大きくなる。 ループ、goto、switchを含めることができない 再帰してはいけない 関数定義の…
継承をすることで、最も汎用的なクラスから、最も特化されたクラスへの流れを示すクラス階層を作成できる。 あるクラスを別のクラスが継承するとき 継承される側のクラスを 基本クラス と呼ぶ 継承する側のクラスを 派生クラス と呼ぶ #include <iostream> using names</iostream>…
コンストラクタ関数には引数を渡すことができる 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>…
コンストラクタ関数 クラス名と同じ。 スタックの索引値を設定することができる オブジェクト作成時に実行される デストラクタ関数 オブジェクトが破棄されるときに呼び出される mainでオブジェクトが生成されていたとしたら、mainを抜けるとき 例えばオブジ…
関数オーバーロードの主な用途として、コンパイル時ポリフォーリズムを行うことが挙げられる 1つの名前をオーバーロードすることで、複数あるデータの方の種類などに対応できる 関数をたくさん作り、それぞれ別の名前をつける必要がない study29.cpp #includ…
概要 1つのクラスに対して複数のオブジェクトを作ることができる。 今回はstackクラスに対して、s1とs2という名前でオブジェクトを作成する。 オブジェクト同士は干渉しない study21.cpp #include <iostream> using namespace std; #define SIZE 10 // 文字列の保存 cl</iostream>…
カプセル化 プログラムコードとプログラムコードが扱うデータを一体化して、外部の干渉から両者を保護するための仕組み。 実際にはprivateやpublicといった機能を使用する。publicはprivateの制御インターフェースを提供されるっために使われる。 ポリモーフ…
画像元 tfとは 座標系管理システム ROSでは順運動学の問題にtfを使用している tfの特徴 時間動機ができる 分散システムが使える rvizとの連携が強力 以下のようなものを作る場合には必須 自立移動ロボット 複数の関節を持つロボットアーム 3次元物体の認識プ…
画像元 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のライブラリを「パッケージ名/src/パッケージ名」におく 前回の記事で作ったbumper_action.pyを移動する $ mkdir -p src/ros_start $ cp scripts/bumper_action.py src/ros_start/ディレクトリをライブラリ…
画像元 最初にこれまでのおさらい TopocのPublisherとSubscriberは、非同期のデータフロー Serviseは同期通信 Actionlibは、どの司令に対する結果なのかや、実行中のフィードバックを返すことができる 例えば、自立移動の命令を送り、移動が終わった時に結果…
画像元 独自のService型の製作 外部プログラムから速度(linear.xとangular.z)を指定して動かす 指定できる速度の値の範囲が決まっており、それ以上の速度は無視する 速度がセットできたか、無視されたかわかる $ roscd ros_start $ mkdir srv $ vi srv/Set…
画像元 ServiceServerの作成 #!/usr/bin/env python import rospy from std_srvs.srv import Empty from std_srvs.srv import EmptyResponse def handle_service( req ): rospy.loginfo( 'called!' ) return EmptyResponse() def service_server(): rospy.in…
画像元前回 atsuyakoike.hatenablog.com $ roslaunch kobuki_gazebo kobuki_playground.launch この後にrostopic listでトピックを確認します。 $ rostopic list /clock /gazebo/link_states /gazebo/model_states /gazebo/parameter_descriptions /gazebo/p…