makeの理解
例
all: install.hoge
install.hoge:
wget 〜
touch install.hoge
参考:
automake
./configure;make;make installにはどんな意味がある? - ITmedia エンタープライズ
Linuxコマンド集 - 【configure】Makefileを生成する:ITpro
自分でソフトウェアをビルド・インストールするときに/usrや/usr/localへインストールしない - Qiita
debパッケージ作成方法をステップバイステップでまとめました
ダウンロードしたファイルが正常かどうかをチェックする方法 | アットマークテクノ ユーザーズサイト
独自のDebパッケージやaptリポジトリを作ってみよう | OSDN Magazine
Linuxのお勉強
プロンプト
[robonchu@localhost~]$
ユーザ名 ホスト名
コマンドラインの編集
コマンド | 内容 |
---|---|
Ctrl+b | 1back |
Ctrl+f | 1go |
Ctrl+a | text first |
Ctrl+e | text end |
Ctrl+h | 1back delete |
Ctrl+k | cut from text first to end |
Ctrl+u | cut from text end to first |
Ctrl+y | yank |
コマンド履歴
コマンド | 内容 |
---|---|
Ctrl+p | 1back command |
Ctrl+n | 1go command |
Ctrl+r | search back command |
Ctrl+r | ↑search back command next |
Enter | ↑search back command execute |
Ctrl+g | ↑search back command end |
文字コード変更
ファイルとディレクトリ
コマンド | 内容 |
---|---|
pwd | current directory display |
ls -l | detail |
ls -a | all |
ls -F | file type |
mkdir [dir name] | make dir |
mkdir -p [dir name] / [dir name] / [dir name] | ↑search back command end |
touch [file name] | create file |
rm [file name] | delete file |
rm -r [dir name] | delete dir |
rm -i [file name] | check delete |
cat [file name] | display file |
cat -n [file name] | display file with num |
less [file name] | display file & can scroll |
space | ↑ down scroll |
b | ↑ up scroll |
q | ↑ exit |
\ [word] | ↑ search down |
? [word] | ↑ search up |
n | ↑↑ next |
N | ↑↑ pre |
cp [file name] [file name] | copy file |
cp -r [dir name] [dir name] | copy dir |
mv [file name] [file name] | file name change |
mv [file name] [dir name] | file location change |
ln -s [file name] [file or dir name] | symbolic link |
探す
コマンド | 内容 |
---|---|
find [start dir] [search type] [action] | find location (ex: find . -name test.txt a -type f -print) |
updatedb & locate [file name] | find location |
locate -b [file name] | find file name only location |
調べる
コマンド | 内容 |
---|---|
[command] –help | display how to use command |
man [command] | mannual display |
man -k [key word] | find man including keyword (ex: man -k copy) |
which [command] | find command path |
bashの設定
コマンド | 内容 |
---|---|
alias [new command name]=‘[command name]’ | new name touch |
type [command] | check origin or alias |
シェル変数と環境変数
コマンド | 内容 |
---|---|
printenv | display env |
env | display env |
export [env name]=[setting name] | set env |
パーミッション
ls -l [dir] -rrrwwwxxx. ~
-:通常ファイル , d:ディレクトリ , l:シンボリックリンク
rrr(read): オーナー
www(write): グループ
xxx(execute): その他
に対するパーミッション
コマンド | 内容 |
---|---|
chmod [ex: u+x] or [ex: 777] | file mode chane |
su - [user name] | init env & user switch |
su [user name] | keep env & user switch |
sudo -u [user name] [command] | execute command on user name |
プロセスとジョブ
コマンド | 内容 |
---|---|
ps aux | display process detail |
Ctrl + z | stop job |
jobs -l | display jobs with PID |
fg %[job num] | to for ground |
bg %[job num] | to back ground |
kill %[job num] | kill job |
kill [PID] | kill process |
kill -KILL [PID] | kill process |
フィルタ
コマンド | 内容 |
---|---|
head -n [num] | display file top |
tail -n [num] | display file end |
grep [pattern] [file name] | pick up word |
ws | output line num |
テキスト処理
コマンド | 内容 |
---|---|
diff [origin file] [file] | display diff |
diff -u [origin file] [file] | display diff on unified format |
diff -ur [origin dir] [dir] | display diff on unified format |
アーカイブと圧縮
コマンド | 内容 |
---|---|
tar czf [file name].tar.gz [file name] | tar + gz make |
tar xzf [file name].tar.gz | tar + gz open |
パッケージ
コマンド | 内容 |
---|---|
sudo apt-get install [pkg name] | install pkg |
sudo apt-get remove [pkg name] | remove pkg |
sudo apt-get purge [pkg name] | remove pkg with setting |
sudo apt-cache search (–name-only) [key word] | search pkg |
sudo apt-cache policy [pkg name] | display version |
リモート
コマンド | 内容 |
---|---|
ssh [username]@[IP or name] | remote login |
ダウンロード
コマンド | 内容 |
---|---|
wget [URL] | download file |
その他のコマンド
コマンド | 内容 |
---|---|
du [file or dir] | display file size |
参考:
音声認識のいろいろ
N-gram
N-gramモデルを利用したテキスト分析 ―インデックスページ―
第5回 N-gramのしくみ:検索エンジンを作る|gihyo.jp … 技術評論社
形態素解析
第6回 N-gramと形態素解析との比較:検索エンジンを作る|gihyo.jp … 技術評論社
ツール
Python3で形態素解析エンジンMeCabを使えるようにする(2016年3月版) - Qiita
音源定位
MainPage - HARK Wiki - Open Source Robot Audition Software
HARK Document Version 2.3.0. (Revision: 8561)
dnn
Deep Learningと音声認識 | Preferred Research
deep learning
OpenJTalk
Ubuntu 14.04+julius+OpenJTalkで音声アシスタントを作ろうとした素人がハマった点と解決方法 - Qiita
パラチュン用dynamic_reconfigureの使い方
dynamic_reconfigureの使い方
- Tutorial.cfgファイルの作成
#!/usr/bin/env python PACKAGE = "dynamic_tutorials" # package name from dynamic_reconfigure.parameter_generator_catkin import * gen = ParameterGenerator() gen.add("int_param", int_t, 0, "An Integer parameter", 50, 0, 100) # name , type , level ,description , default ,min ,max gen.add("double_param", double_t, 0, "A double parameter", .5, 0, 1) gen.add("str_param", str_t, 0, "A string parameter", "Hello World") gen.add("bool_param", bool_t, 0, "A Boolean parameter", True) size_enum = gen.enum([ gen.const("Small", int_t, 0, "A small constant"), gen.const("Medium", int_t, 1, "A medium constant"), gen.const("Large", int_t, 2, "A large constant"), gen.const("ExtraLarge", int_t, 3, "An extra large constant") ], "An enum to set size") gen.add("size", int_t, 0, "A size parameter which is edited via an enum", 1, 0, 3, edit_method=size_enum) exit(gen.generate(PACKAGE, "dynamic_tutorials", "Tutorials")) # 2:package_name 3:cfg_file_name
- 実行可能な状態に
chmod a+x cfg/Tutorials.cfg
- CmakeLists.txtに以下を追加
#add dynamic reconfigure api find_package(catkin REQUIRED dynamic_reconfigure) generate_dynamic_reconfigure_options(relative_path_to_file1 relative_path_to_file2 ...) # make sure configure headers are build before node using them add_dependencies(example_node dynamic_tutorials_gencfg)
- package.xmlにもgenerate_dynamic_reconfigureを追記
nodeの作り方
python
#!/usr/bin/env python import rospy from dynamic_reconfigure.server import Server from dynamic_tutorials.cfg import TutorialsConfig def callback(config, level): rospy.loginfo("""Reconfigure Request: {int_param}, {double_param},\ {str_param}, {bool_param}, {size}""".format(**config)) return config if __name__ == "__main__": rospy.init_node("dynamic_tutorials", anonymous = True) srv = Server(TutorialsConfig, callback) rospy.spin()
参考
# ディクショナリで指定する場合はアンパックすればよい >>> d = {"name": "John", "age": 20} >>> "My name is {name}. I'm {age} years old.".format(**d) #アンパックしてキーワード引数に "My name is John. I'm 20 years old."
- configは辞書?
dict = {"yamada":75, "endou":82} value = dict["yamada"]
C++
#include <ros/ros.h> #include <dynamic_reconfigure/server.h> #include <dynamic_tutorials/TutorialsConfig.h> void callback(dynamic_tutorials::TutorialsConfig &config, uint32_t level) { ROS_INFO("Reconfigure Request: %d %f %s %s %d", config.int_param, config.double_param, config.str_param.c_str(), config.bool_param?"True":"False", config.size); } int main(int argc, char **argv) { ros::init(argc, argv, "dynamic_tutorials"); dynamic_reconfigure::Server<dynamic_tutorials::TutorialsConfig> server; dynamic_reconfigure::Server<dynamic_tutorials::TutorialsConfig>::CallbackType f; f = boost::bind(&callback, _1, _2); server.setCallback(f); ROS_INFO("Spinning node"); ros::spin(); return 0; }
- 実行
$ rosrun rqt_reconfigure rqt_reconfigure
参考
ja/dynamic_reconfigure/Tutorials/HowToWriteYourFirstCfgFile - ROS Wiki
catkin_make徹底理解
catkinワークスペース
STEP1
- ROS_PACKAGE_PATHの確認、設定
- $ mkdir ~/test_catkin_ws/src
- $ cd ~/test_catkin_ws/src
- $ catkin_init_workspace
ここで、~/test_catkin_ws/src にCMakeKist.txtが作成される
STEP2
- cd ~/test_catkin_ws
- catkin_make
ここで、buildとdevelができる
buildとは
- catkinパッケージを構成するためにCMakeを呼び出し、さまざまな処理を行う場所でビルドスペースと呼ばれる
develとは
- 生成される目的コードをインストールする前に作業を行うスペースであり、開発スペースと呼ばれる
develや/opt/ros/indigoの中に設定ファイル.bashがある
/opt/ros/indigo設定読み込み
- コアパッケージへのパスが反映
devel設定読み込み
- ユーザーのワークスペースにインストールされたパッケージを反映
パッケージ作成
ROSパッケージをビルドするには
- CMakeList.txt
- package.xml
が必要
$ catkin_create_pkg <package_name> [depend1] [depend2] ... ex: catkin_create_pkg test_package roscpp rospy std_msgs
こうすることで、依存関係がpackage.xmlに追加される
- 同じパッケージがある場合は$ROS_PACKAGE_PATHに記載の順番で呼ばれる
コードの変更、修正時
- package.xml
- CMakeLists.txt
を修正
package.xml
現在のパッケージの名前や、ほかのパッケージとの依存関係、コンパイル時のフラグなどの基本情報が定義
大事なタグ
<build_depend> 現在のパッケージをインストールする前に、先にインストールする必要のあるパッケージの名前を指定する <run_depend> 現在のパッケージを実行する際に必要とするほかのパッケージの名前や現在のパッケージが依存するランタイムライブラリ名などを指定する <test_depend> 現在のパッケージの機能テストを行う際に依存するパッケージ名を指定する <buildtool_depend> 現在のパッケージを構築する際に使用されるシステムツールを指定する 一般的にはcatkin <export> 現在のパッケージをコンパイルする際に必要となるフラグやヘッダファイル、ライブラリなどのパス情報を指定する
CMakeLists.txt
- CMakeビルドシステムに使われる設定ファイル
- このファイルの中にはターゲットを生成する際に必要なツールや関連するライブラリおよび生成方法などを記述する。CMakeでビルドするときに、このファイルを参照してターゲットを生成する
記述する内容
. 関連するほかのcatkinパッケージ名
ex: find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs)
. メッセージ・サービス・アクションジェネレータ
ex: add_message_files( FILE Message1.msg)
. メッセージ・サービス・アクションのデータタイプの生成
ex: generate_message(DEPENDENCIES std_msgs)
. パッケージの構築情報
ex: catkin_package(~)
. 構築するターゲットの指定
ex: add_executable(~)
. インストール方法
ex: install(~)
. テスト項目
ex: catkin_add_gtest(~)
- . メタパッケージの記述
単一のパッケージのみビルドしたい場合
catkin_make --pkg <package name>
ROSを勉強している方々のブログまとめ
お世話になっております。
大感謝。全部目を通したい。
rosとは
参考
[ROSロボットプログラミング] ROSで使われる専門用語 - Qiita
わかりやすいチュートリアル
ROS Tutorials — ROS Tutorials 0.5.1 documentation
ブログまとめ
ロボットとお話しよう2(音声でラジコン操作)
の続き
[Raspberry Pi]USBマイクと音声認識ソフトJuliusを使って音声認識を試す(2) : 工作と競馬
[Raspberry Pi]USBマイクと音声認識ソフトJuliusを使って音声認識を試す(3) ~ フルカラーLEDを音声で操作 ~ : 工作と競馬
をとても参考にさせていただきました。 感謝です。
目標
声を使ってラジコンを操作
準備
dictation-kit-v4.3.1-linuxからmodelファイルをコピーしてこれから作業するフォルダにおく
手順
- teleop.dic(utf-8で作成)ファイルの作成
右 m i g i 左 h i d a r i 前 m a e 後ろ u sh i r o 停止 t e i sh i
- juliusの設定ファイルのteleop.jconfの作成
-w teleop.dic #単語辞書ファイル #-v model/lang_m/bccwj.60k.htkdic #N-gram、または文法用の単語辞書ファイルを指定$ -h model/phone_m/jnas-tri-3k16-gid.binhmm #使用するHMM定義ファイル -hlist model/phone_m/logicalTri #HMMlistファイルを指定する -n 5 #n個の文仮説数が見つかるまで検索を行う -output 1 #見つかったN-best候補のうち、結果として出力する個数 -input mic #-demo #マイク使用 -zmeanframe -rejectshort 600 #検出された入力が閾値以下なら棄却 #-charconv euc-jp utf8 #入出力エンコード指定(内部euc-jp, 出力utf-8) -lv 1000 #入力の振幅レベルの閾値(0~32767)
- juliusを起動するシェルスクリプトrun_teleop.shの作成
#! /bin/sh export ALSADEV=“plughw:1,0” julius -C teleop.jconf -demo -input alsa -nostrip -module > /dev/null & echo $! sleep 3
- juliusから送られるコマンドを受け取りarduinoに送る
以下com_julius_arduino.pyを作成。 これを実行すると音声入力に対し、cmd_velがpubされる。
#!/usr/bin/python # coding:utf-8 import rospy from sensor_msgs.msg import Joy from geometry_msgs.msg import Twist import socket import subprocess import xml.etree.ElementTree as ET HOST = "localhost" PORT = 10500 teleop_cmd = [ u"右" , \ u"左" , \ u"前" , \ u"後ろ" , \ u"停止" ] class RosSet(object): def __init__(self): rospy.init_node('voice_twist') self.twist_pub = rospy.Publisher('cmd_vel', Twist, queue_size=100) self.twist = Twist() def sendCmd(self, cmdName): if cmdName==u"前": self.twist.linear.x = 10 self.twist.angular.z = 0 elif cmdName==u"後ろ": self.twist.linear.x = -10 self.twist.angular.z = 0 elif cmdName==u"右": self.twist.linear.x = 0 self.twist.angular.z = -10 elif cmdName==u"左": self.twist.linear.x = 0 self.twist.angular.z = 10 elif cmdName==u"停止": self.twist.linear.x = 0 self.twist.angular.z = 0 rospy.loginfo(self.twist) self.twist_pub.publish(self.twist) def main(): rosset = RosSet() p = subprocess.Popen(["sh run_teleop.sh"], stdout=subprocess.PIPE, shell=True) pid = p.stdout.read() # juliusのプロセスIDを取得 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((HOST, PORT)) try: data = "" while 1: if "</RECOGOUT>\n." in data: root = ET.fromstring('<?xml version="1.0"?>\n' + data[data.find("<RECOGOUT>"):].replace("\n.", "")) for whypo in root.findall("./SHYPO/WHYPO"): if whypo.get("WORD") in teleop_cmd: # 判別した言葉を表示する print whypo.get("WORD") rosset.sendCmd(whypo.get("WORD")) else: print "Unknown" data = "" else: try: data = data + client.recv(1024) except: print "ps kill." p.kill() # subprocess.call(["kill " + pid], shell=True) client.close() break except KeyboardInterrupt: print "KeyboardInterrupt occured." p.kill() # subprocess.call(["kill " + pid], shell=True) client.close() if __name__ == "__main__": main()
参考: