ROSのlaunchファイルの書き方

launchファイルとは

launchファイルを使うと、rosの複数のプログラムを同時に立ち上げることができるので楽ができる

launchファイルの場所

立ちあげたいプログラムが入っているパッケージに、launchディレクトリを作成.
この中に .launchファイルを作成する

launchファイルの中身

中身はxmlで記述する。*1

具体例

<launch>  
    <node pkg="パッケージの名前" name="ノードの名前" type="実行ファイルの名前"\>
    .
    .
    .
<launch>

実行方法

どのディレクトリからでも実行できる。

$ roslaunch ./launch/ hoge.launch

その他

roslaunch にオプション –screenをつけると、出力を直接見ることができる。

ファイルのバイト数を数えるCプログラム

概要

  • 引数に指定したファイルの中身が何バイトあるかをカウントするCのプログラム
  • ファイルがバイナリでもテキストでもOK

プログラム

#include<stdlib.h>
#include<stdio.h>

int main(int argc,char *argv[])
{
    FILE *fp;
    unsigned bite = 0;

    if ( (fp = fopen(argv[1],"rb")) == NULL)
    {
        printf("ファイルを開けません\n");
        exit(1);
    }

    while(! feof(fp))
    {
        fgetc(fp);
        if(!feof(fp)) bite++;
    }

    printf("ファイルの内容は %u バイト\n",bite);

    return 0;
}

使用例

ファイルの中身を確認

$ cat hoge.txt
hoge 

実行

$ ./a.out hoge.txt
ファイルの中身は5バイト

4文字プラス改行文字?で5バイトみたいです

確認

ファイルのメモリ上のスペース数を調べるlinuxコマンド du を使う
-bオプションで単位はバイトになる

$ du -b hoge.txt
5     hoge.txt

合ってるみたいですね

もちろん

使えるならduを使ったほうがいいですね。

C言語でバイナリもテキストも読み書きする方法

概要

  • Cを使うと、バイナリファイルもテキストファイルも同じやり方で読み書きできる
  • ファイルの中身を1バイトづつchar型の変数にコピーして用いれば良い
  • 引数に指定したファイルの中身を、もう一つのファイルの中に書き込むプログラムを作成
  • ファイルがバイナリでもテキストでも関係なく実行できる

具体例

./a.out photo.png text.txt

と実行するとtext.txtの中身がphoto.pngに書き換わる(テキストファイルが画像ファイルになる)

プログラム

/*
バイナリであれテキストであれ引数に指定したファイルをコピー
ferror()を用いてエラー検査を行う
*/

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[])
{
    FILE *from,*to;
    char ch;

    if((from = fopen(argv[1],"rb"))==NULL)
    {
        printf("コピー元ファイルを開けません\n");
        exit(1);
    }

    if((to = fopen(argv[2],"wb"))==NULL)
    {
        printf("コピー先ファイルを開けません\n");
        exit(1);
    }

    while(!feof(from))
    {
        ch = fgetc(from);
        if(ferror(from))
        {
            printf("コピー元ファイルの読み込みエラー\n");
            exit(1);
        }

        if(!feof(from)) fputc(ch,to);
           
        if(ferror(to))
        {
            printf("コピー先ファイルの書き込みエラー\n");
            exit(1);
        }
    }

    fclose(from);
    fclose(to);

    return 0;
}

.vimrcの設定

自分のvimの設定をメモ。

  1. vimの設定はホームディレクトリにある .vimrc というファイルの中身を書き換えることで行う。
  2. $ vim ~/.vimrcとコマンドを送ると編集できる。
  3. ‘=’ の左右にスペースがあってはいけない。

  • set tabstop=4 … タブ文字の長さが半角スペース4つぶんになる。(デフォルトだと8つ)
  • set expandtab … タブキーを押した時、タブ文字の代わりに複数のスペースが入力されるようになる *1
  • set autoindent … 改行時に自動インデント
  • set shiftwidth=4 … ヴィジュアルモードで範囲を指定した後、[<],[>]キーでインデントを入れることができる。この時何文字ぶんインデントするかを決める
  • set nu … 左サイドに行数が常に表示されるようになる
  • set clipboard=unnamedplus … カットやヤンクした内容がクリップボードにも保存されるようになる*2
  • set cryptmethod=blowfish2 … :Xコマンドで暗号化する際のアルゴリズムをblowfish2(強力なアルゴリズム)にする
  • nmap <C-c> :%s/./&/g … :Ctrl+C で文字数をカウントできるようにする

*1:タブ文字を入力したい場合は ctrl+b を押してから[tab]

*2:普通のvimだとできない katorinax.hatenablog.com

UbuntuのVimでクリップボードを有効にする

OS : Ubuntu16.04 (Macとはやり方が違うようです)
vimのバージョン : 7.4


ホームディレクトリに移動し、 .vimrcファイルを編集

$ cd ~
$ vim .vimrc

以下を追記

set clipboard=unnamedplus

ubuntuの普通のvimだと、これだけではコピペはできない。
vim-gtkをインストール

$ sudo apt install vim-gtk

vim を普通に起動する。
ヤンクやカットした部分がOSのクリップボードに保存されるようになっているはず。