aptpod Tech Blog

株式会社アプトポッドのテクノロジーブログです

ROSの任意トピックをC++ノードでPublish/Subscribeする方法

f:id:aptpod_tech-writer:20200804192909j:plain

はじめに

製品開発グループの野本です。
組込ソフトウェアエンジニアとしてデータ収集用端末のソフトウェア開発を担当しています。 今回はROSの取り組みの一環として、C++で任意のトピックをPublish/Subscribeする方法についてご紹介します。

  • はじめに
  • 背景
  • 調査結果
  • 性能測定
  • topic_tools::ShapeShifterとは?
  • (参考) rosbagはどうやって任意のトピックをSubscribeしているのか?
  • JSON変換もしたい場合
  • まとめ

背景

ROSは複数のノードがトピックを介してノード間通信を行っています。
ROSノードとROS以外のアプリケーションが通信する選択肢として、rosbridgeがあります。

f:id:aptpod_tech-writer:20200731115809p:plain

rosbridgeはWebSocket、TCP、UDPに対応*1しており、TCPを使用する場合はrosbridge_tcpノードがTCPサーバーとして動作します。クライアントは指定したトピックのデータをJSONとしてPublish/Subscribeすることができますが、以下のような懸念点があります。

  • JSON化するとデータが肥大化しやすい、データをそのまま扱う場合は変換処理が冗長(→生データのまま扱いたい...)
  • pythonで動いておりパフォーマンスが不安(→C++で動かしたい...)

これらの懸念点を解決するため、以下のようにC++ノードで動作し、JSONではなくバイナリの生データで任意トピックのPublish/Subscribeをする方法について調査しました。

f:id:aptpod_tech-writer:20200731120627p:plain

続きを読む

フロントエンドエンジニア目線のデザインチェックリスト

f:id:aptpod_tech-writer:20200729165735p:plain

Webチームの蔵下です。先日、弊社デザイナーの高森が公開した記事「コンポーネントを活用したアプリケーション群のデザイン」で紹介したように、aptpodではフロントエンドエンジニアとデザイナーとで、頻繁に議論を重ねながら開発を進めています。

開発中もコミュニケーションを取り合うことでお互いの認識齟齬は減らせるのですが、実装着手前にデザイン面で不確定要素が多いほど手戻りの手間(工数)が膨らんでしまいます。

実装着手前にすべての不確定要素を解消することは難しいですが、開発中に議論になりやすいポイントにはいくつかのパターンがありました。それを実装着手前のデザインレビューで確認できるようにチェックリストとしてまとめましたので紹介します。

続きを読む

コンポーネントを活用したアプリケーション群のデザイン

f:id:aptpod_tech-writer:20200720123718j:plain aptpodデザインチームの高森です。ウェブアプリケーションのデザインをメインにスマートフォンアプリケーションや印刷物のデザインを担当しております。現在aptpodでは、intdashのサービスを利用するための周辺アプリケーションを開発中です。関連するアプリケーションを複数デザインする中で、デザイン共通化に向けた取り組みや、デザインで検討した点をまとめてみました。

続きを読む

SphinxとLuaLaTeXで、日本語PDFマニュアルを作る

f:id:aptpod_tech-writer:20200715105149j:plain

アプトポッドにて、テクニカルライターとして製品マニュアルの制作を担当している篠崎です。

現在弊社では、製品マニュアルの制作に、Sphinxを導入しようとしています。Sphinxは、1つの原稿ファイルからHTML、PDF等を出力できるドキュメントジェネレーターです。この記事では、SphinxにLuaLaTeXを組み合わせて日本語PDFを生成する方法を探ってみました。

  • 背景
  • SphinxでLuaLaTeXを使う設定
    • (A) LuaLaTeXを使用する
    • (B) LaTeXドキュメントクラスとしてltjsbookを使用する
    • (C) Polyglossiaパッケージを読み込まないようにする
    • (D) サンセリフ系フォント、ゴシック系フォントを指定する(AXISフォントを使用するため)
    • (E) デフォルトのフォントをサンセリフ系、ゴシック系に変更する(AXISフォントを使用するため)
  • おわりに、今後に向けて
  • 参考文献
続きを読む

Turtlebot3の実機を使ったSLAMとNavigationをAWS RoboMaker上でやってみた

f:id:aptpod_tech-writer:20200702163024j:plain

研究開発グループの酒井 (@neko_suki)です。

今回は、「Turtlebot3の実機を使ったSLAMとNavigationをAWS RoboMaker上でやってみた」という取り組みについて紹介します。

SLAMは、Simultaneous Localization and Mappingの略で、ロボットによる自己位置推定と地図作成を同時に行うことです。Navigationは、指定した目的地までロボットを移動させることです。

まずは、動画をご覧ください。

www.youtube.com

動画ではAWS RoboMakerのシミュレーションジョブ上で、Turtlebot3のNavigationを行うためのノードを起動します。 そして、シミュレーション上のrvizで目的地を設定します。 そうすると、Turtlebot3が自律走行していることが確認できます。

今回の記事では、この動作をどのように実現したのかをお伝えします。

なお、本内容は、ROS Japan UG #37 オンラインROS勉強会 で発表した内容をベースに執筆しております。 資料は SlideShare にアップロードしてあります。

  • 取り組みのモチベーション
  • 技術的に検討をしたポイント
    • ①インターネット経由でSLAM/Navigationを動かすために必要なROSトピックを調べる
      • SLAM に必要なROSトピックの確認
      • turtlebot3_slam_gmapping がpublish/subscribeしているROSトピックの一覧
      • Navigationに必要なROSトピックの確認
      • Navigationに使用されているROSトピックの一覧
      • 帯域の計測
    • ②AWS RoboMaker上でSLAM/Navigationを動かす。
      • ROS bag再生に対応したシミュレーションアプリケーションを作る
      • ROS bag再生用のシミュレーションジョブの作成
  • まとめ
続きを読む