スレッドについて
プロセスとスレッドの違い
- プロセス:メモリ領域が独立しているので安全、しかし切り替えに処理が多い
- スレッド:切り替えのコストは低いが、干渉しないように考慮する必要がある
参考:
イケてるエンジニアになろうシリーズ 〜メモリとプロセスとスレッド編〜 - もろず blog
連載.NETマルチスレッド・プログラミング入門:第1回 マルチスレッドはこんなときに使う (1/2) - @IT
スレッド化のキーポイント
- レスポンスタイム
ex: ダウンロード中のほかの操作など
- スループット(単位時間当たりの処理能力)
ex: ネットワークやディスクへのアクセスは時間がかかるがCPUの処理は低いため、この時CPUを有効活用する
スレッドの実装のイメージ
わかりやすい👇
参考:
オーバーヘッド
- 行いたい処理とは別に付加的に必要な処理や時間
ex : 送りたいデータではなく、その制御に使う処理
参考:
オーバーヘッドとは|overhead : 意味/定義 - IT用語辞典
コンテキストスイッチ
- スレッド間での切り替え動作
参考:
rosのNamesに関して
名前の種類
- base
- relative/name
- /global/name
- ~private/name
参考:
Namespace and Remapping - ROS Answers: Open Source Q&A Forum
ROS Naming and Namespaces | NooTriX
Remap
- topic名やparameter名を簡単に変更できる
例
<launch> <group ns="turtlesim1"> <node pkg="turtlesim" name="sim" type="turtlesim_node"/> </group> <group ns="turtlesim2"> <node pkg="turtlesim" name="sim" type="turtlesim_node"/> </group> <node pkg="turtlesim" name="mimic" type="mimic"> <remap from="input" to="turtlesim1/turtle1"/> <remap from="output" to="turtlesim2/turtle1"/> </node> </launch>
参考:
Remapping Arguments - ROS Wiki
ja/Remapping Arguments - ROS Wiki
roslaunch/XML/remap - ROS Wiki
環境変数
参考:
rosのCMakeListsのお勉強
T・B・D
install
install(DIRECTORY launch/ DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch FILES_MATCHING PATTERN "*.launch" )
- .launchだけをコピー
install(DIRECTORY launch/ DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch PATTERN ".svn" EXCLUDE)
- .svnを除き、それ以外をコピー
mockテストのお勉強
mock.return_value
- 返り値を指定できる
mock.called
mock.call_count
- 何回呼ばれたか確認できる
mock.call_args
mock.call_args_list
- 引数のリストがわかる
mock.side_effect
- いろんなものが指定できる
例えば(イテレート)
side_effect = chain([1,2,3,4])
mock.method_calls
mock.mock_calls
- mock_calls は、メソッド,特殊メソッド,戻り値のモックまで、モックオブジェクトに対するすべての呼び出しを記録する
mock.assert_called
mock.assert_called_once
mock.assert_called_with
mock.assert_called_once_with
mock.assert_any_call
assert_has_calls
参考:
26.5. unittest.mock — モックオブジェクトライブラリ — Python 3.6.1 ドキュメント
パッチデコレータ
@patch
参考:
Pythonのテストコードでmockを使ってみた | Developers.IO
mock(Pyhtonモックライブラリ)についてのメモ - Qiita
Pythonで学ぶ 基礎からのプログラミング入門 (34) Pythonのテスト手法 | マイナビニュース
ユニットテスト
# @raises 例外のテスト @raises(Error) def test_invalid_arg(): actual = add(None, 1)
参考:
rospyのお勉強
rospy.get_param
- パラメータサーバーから値をとってくる
rospy.get_param(param_name, default)
参考: rospy/Overview/Parameter Server - ROS Wiki
rospy.Time
- rate,sleep,durationなどよく使うものが多い
- rospy.Timer(period, callback, oneshot=False)
- periodで指定した周期で定期的にcallbackが呼ばれる
参考:
rospy/Overview/Time - ROS Wiki
rospy.wait_for_message(topic, topic_type, timeout)
- トピックを一回だけサブする関数
rospy.ROSInterruptException
- KeyboardInterruptなどInterruptの操作のException