2017.11.10この記事は私が金沢工業大学ロボティクス学科で担当している講義ロボットプログラミングII用です。今回はROSの通信方式であるトピックを学びます。Publisherキーボードからロボットを操縦するmy_teleopパッケージを作ろう!ROS演習2と同じ要領でmy_teleopパッケージを作ります。忘れた人はROS演習2を見ながらやろう。今回の例ではhelloをmy_teleopに置き換えます。このプログラムはメッセージの送リ手であるpublisher(配信者)プログラムの簡単な例にもなっています。プログラムの説明はソースコード内のコメントを参照してください。テキストエディタ(gedit)にコピペして名前を付けて保存する。保存ディレクトリは~/catkin_ws/src/my_teleop/srcの中です。ノードハンドラの作成。ハンドラは必要時に起動される。トピックに対してデータを送信。ループの頻度を設定するためのオブジェクトを作成。この場合は10Hz、1秒間に10回数、1ループ100ms。全てのノードにトピックができたことを知らせる(advertise)。linear.xは前後方向の並進速度(m/s)。angular.zは回転速度(rad/s)。0;}以下のコマンドでビルドして実行しよう。my_teleop_nodeなお、catkin_makeでビルドを失敗する場合はCMakeLists.txtやpackage.xmlが間違っている場合があります。その場合はこのファイルmy_teleop.tgzをクリックしてダウンロードし、~/catkin_ws/srcの中にコピーしてください。次の手順で展開したあとにcatkin_makeを再実行してください。Subscriber次に、メッセージの受け手であるsubscriber(購読者)の簡単なプログラムを示します。Velocity)を標準出力に出力する簡単なプログラムです。//subscriberの作成。トピック/cmd_velを購読する。コールバック関数を繰り返し呼び出す。whileループが必要な場合はspinOnce()を使\う。0;}ここで、馴染みのないコールバック関数callbackが登場しています。コールバック関数はIT用語辞典によると「コールバック関数とは、プログラム中で、呼び出し先の関数の実行中に実行されるように、あらかじめ指定しておく関数。」と定義されています。通常はマウスで線を描くなどの処理を実装するような、あるイベントが起きた時に処理をするプログラムを実装する場合に使われます。通常は、マウスのイベント処理などの場合のようにマウスのボタンが押されたり、移動したときに自動的にコールバック関数が呼び出されますが、ROSではspinOnce()やspin()で明示的に呼び出さなければいけません。spinOnce()はコールバック関数を一度だけ呼び出すので通常はwhileループの中で使います。spin()はノードが動いている間、コールバック関数を呼び続けます。ROSではメッセージの受け渡しにコールバック関数を使います。&でなければいけません。::ConstPtrと馴染みのないものが出てきましたね。Pointerにtypedefされています。Pointerはスマートポインタという賢いポインタで、普通のポインタで使い終わったら必要となるdeleteしなくても自動的にメモリを開放してくれるすぐれものです。今までパッケージを作った要領で、my_subscriberパッケージを作ろう。srcなどを作ることになる。上のプログラムのファイル名はmy_subscriber_node.cppとする。以下のコマンドでビルドして実行しよう。my_subscriber_nodeなお、catkin_makeでビルドを失敗する場合はCMakeLists.txtやpackage.xmlが間違っている場合があります。その場合はこのファイルmy_subscriber.tgzをクリックしてダウンロードし、~/catkin_ws/srcの中にコピーしてください。次の手順で展開したあとにcatkin_makeを再実行してください。演習3のturtlebot3シミュレータを起動し、my_teleop_nodeとmy_subscriber_nodeの動作を確認しましょう。シミュレータを次のコマンドで起動します。turtlebot3_empty_world.launch次にmy_teleop_nodeを起動した端末にマウスカーソルを持って行いきます。rキーでロボットが移動したら成功。キーを押した後はエンターキーを押す。このシミュレータの場合は、/cmd_velをPublishするだけでロボットがその速度で移動します。次にSubscriberのプログラムが動作しているか確認するために、my_subscriber_nodeを起動した端末を見ましょう。速度が表示されていたら成功です。lを押した後にエンターキーを押すと、一定の速度でturtlebot3が動き出す。lのキーを押した後にエンターキーが必要です。lキーを押すとロボットが移動するようにソースコードを変更しよう。my_teleop_node.cppではstd::cinでキーボードから入力しますがキーが入力されるまで待状態になります。これをブロックとよびます。エンターキーが入力されると次の処理に移ります。Linuxでブロックしないの入出力を実現する場合はselectシステムコールを使います。次のリンクが参考になります。簡単なゴール(ActionLib)!この記事は私が担当している講義ロボットプログラミングII用です。今回はActionLibを使った以下のROSチュートリアルを実行しましょう。(OpenCVとの連携)2018-1-21:OpenCV関連でエラーが出る場合に対応しました。再度、準備、インストール、実行を試してください。演習1この記事は私が担当している講義ロボット知能工学特論用です。ウェイポイントナビゲーションのプログラムを作りましょう。この世界モデルを使って、MCLを実装していきます。以下のチュートリアルも参考にしてください。ジョイントの生成と制御ODEで学ぶC言語のStep6です.Step5で一応終了しましたが、要望の多かったジョイントの使い方と制御を説明します。ジョイントは我々の周りでは、折畳み携帯のヒンジやドアの蝶番に相当します。Linux)を講義で使用しているが、標準ではproxy切り替えのGUIツールがなく.bashrcの設定をいちいと書き直すのも手間がかかるのでスクリプトを作成した。OpenCV3.2.0インストールUbuntu16.04にOpenCV3.2.0をソースからビルドしインストールしたときのメモ。以下のサイト等を参考にした。OpenCV3.3.0は以下の手順ではエラーが出てビルドができないので注意。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。(3)タイトルとURLをコピーしました。