Symfoware

Symfowareについての考察blog

rosbridge + roslibpyでメッセージを配信する

websocketでROSと通信できるrosbridgeをこちらで知りました。
ROS講座53 ブラウザでpub subする

rosbridge_suite
rosbridge_suite
rosbridge_suite

プロトコルの仕様はこちら
rosbridge v2.0 Protocol Specification

インストールして動作を試してみます。


rosbridgeのインストールと起動



以下のコマンドでインストール


$ sudo apt-get install ros-melodic-rosbridge-suite



roslaunchで起動します。
roscoreも同時に起動するので、別途roscoreを実行しておく必要はありません。


$ roslaunch rosbridge_server rosbridge_websocket.launch





roslibpy



こちらを見てみると、
rosbridge_suite
・Javascript
・Java
・Python
のライブラリがあります。

今回はPythonライブラリ「roslibpy」を使用してみます。
roslibpy: ROS Bridge library

pipでインストール。


$ sudo apt install python-pip
$ pip install roslibpy



サンプルとして、こちらと同様にカメを動かしてみます。
ROS turtlesimを自動的に動かすプログラムの作成

gitのテストコードを参考に作成します。
test_topic.py

プログラムは以下のようになりました。

・sample.py


  1. # -*- coding:utf8 -*-
  2. import time
  3. from roslibpy import Message, Ros, Topic
  4. def main():
  5.     
  6.     # roscoreを実行しているサーバーへ接続
  7.     ros_client = Ros('192.168.1.104', 9090)
  8.     # Publishするtopicを指定
  9.     publisher = Topic(ros_client, '/turtle1/cmd_vel', 'geometry_msgs/Twist')
  10.     def start_sending():
  11.         while True:
  12.             if not ros_client.is_connected:
  13.                 break
  14.             
  15.             # 送信するTwistメッセージの内容
  16.             publisher.publish(Message({
  17.                 'linear': {
  18.                     'x': 2.0,
  19.                     'y': 0,
  20.                     'z': 0
  21.                 },
  22.                 'angular': {
  23.                     'x': 0,
  24.                     'y': 0,
  25.                     'z': 1.8
  26.                 }
  27.             }))
  28.             time.sleep(0.1)
  29.         publisher.unadvertise()
  30.     # Publish開始
  31.     ros_client.on_ready(start_sending, run_in_thread=True)
  32.     ros_client.run_forever()
  33. if __name__ == '__main__':
  34.     main()




プログラムを実行する前にturtlesimを実行。


$ rosrun turtlesim turtlesim_node




作成したプログラムを実行。


$ python sample.py



見事カメが動いてくれました。

930_01.png




【参考URL】
ROS講座53 ブラウザでpub subする
rosbridge_suite
rosbridge_suite
rosbridge v2.0 Protocol Specification
test_topic.py
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2018/11/19(月) 22:56:06|
  2. ROS
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Ubuntu 18.04 に Android Studio をインストール

過去記事のこちらを参考にしました。
Ubuntu 16.04 に Android Studio をインストール


Javaのインストール



以下のコマンドでopenjdkをインストール。


$ sudo apt install openjdk-11-jdk







Android Studioのインストール



https://developer.android.com/studio/

929_01.png

こちらから「android-studio-ide-181.5056338-linux.zip」をダウンロードしました。
ダウンロードサイズは1GB超えです。

こちらのインストールガイドを参考に、インストールを進めます。
https://developer.android.com/studio/install


Linux に Android Studio をインストールする手順は次の通りです。

1.ダウンロードした .zip ファイルを、利用方法に応じて適切な場所に解凍します。たとえば自身のユーザー プロファイル用であれば /usr/local/、共有ユーザー用であれば /opt/ などに解凍します。

2.Android Studio を起動するため、ターミナルを開いて android-studio/bin/ ディレクトリに移動し、studio.sh を実行します。
ヒント: すべてのディレクトリから Android Studio を起動できるようにするには、環境変数の PATH に android-studio/bin/ を追加します。

3.Android Studio の以前の設定をインポートするか否かを選択して、[OK] をクリックします。

4.Android Studio セットアップ ウィザードに従い、開発に必要な Android SDK コンポーネントのダウンロードなどのセットアップ処理を進めます。

注: 64 ビット版の Ubuntu をご利用の場合は、以下のコマンドで 32 ビット用のライブラリをいくつかインストールする必要があります。

sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++




指示に従い、必要なライブラリをインストール。
※そのままだと「libbz2-1.0が見つからない」エラーが発生するので微調整しています。


$ sudo apt-get install lib32z1 lib32ncurses5 libbz2-1.0:i386 lib32stdc++6



ダウンロードしたzipファイルをホームディレクトリの「android-studio」に解凍しました。
インストーラーを起動します。


$ ~/android-studio/bin/studio.sh



後はセットアップ手順にしたがってインストールを行います。
スクリーンキャプチャを添付しておきます。

929_02.png

929_03.png

929_04.png

929_05.png

929_06.png

929_07.png

929_08.png

929_09.png

これでセットアップは完了です。



Android Studioとエミュレーターの起動



新しいプロジェクトを作成してみます。

929_10.png

デフォルトのままウィザードを進めました。

929_11.png

929_12.png

929_13.png

929_14.png

929_15.png


雛形のプロジェクトが作成できました。
初回はgradleが必要なライブラリのダウンロードを実行するのでちょっと待ちます。
デバッグボタンを押してみます。

929_16.png


まだエミュレーターが存在しないはずなので、「Create New Virtual Device」をクリック。

929_17.png


デフォルトで選択されている「Nexus 5X」ををのまま採用しました。

929_18.png


「Download」をクリックしてOSのイメージをダウンロードします。

929_19.png

929_20.png

929_21.png

929_22.png



/dev/dvm device: permission denided.


というエラーが発生していますね。

ちなみにkvmは既にインストール済です。
Ubuntu 18.04 KVMのインストールと、bridge接続の構成

以下のコマンドでkvmグループに自分自身を追加しておきました。


$ sudo adduser `whoami` kvm
$ sudo chown `whoami` /dev/kvm



※参考
Android Studio: /dev/kvm device permission denied


エミュレーターのウィザードを進めます。

929_23.png


エミュレーターが追加されました。
選択して起動してみます。

929_24.png

動いてくれました。

929_25.png




起動アイコン



デスクトップのアイコンから起動できるよう、「android-ide.desktop」というファイルを作成。
内容はこんな感じになりました。


[Desktop Entry]
Type=Application
Name=Android IDE
GenericName=Android IDE
Comment=Android IDE
Exec=/home/<user_name>/android-studio/bin/studio.sh
Icon=/home/<user_name>/android-studio/bin/studio.png
Terminal=false
Categories=Development;IDE;
Name[ja_JP]=Android IDE



実行権限を付与しておきます。


ダブルクリックすると初回は警告が表示されますが「信頼して起動」を選択。

929_26.png

これでIDEが起動できるようになりました。

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2018/11/18(日) 19:19:07|
  2. Java
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

ROS OpenCVを利用し、画像データをPublishする(Python)

ROSにはOpenCVと連携するためのバッケージが用意されているようです。
ROS + OpenCVで画像データを配信。
Rvizで配信された画像データを表示してみます。



OpenCVのインストール



Ubuntu Server 18.04にOpenCVをインストールします。
こちらの手順を利用しました。
Ubuntu 18.04 ServerにOpenCV 3.4.1をインストール(install-opencv.sh)


$ wget --no-check-certificate https://raw.githubusercontent.com/milq/milq/master/scripts/bash/install-opencv.sh
$ chmod +x install-opencv.sh
$ ./install-opencv.sh





cv_bridgeのインストール



OpenCVの画像をROSで扱える形式に変換してくれるcv_bridge
http://wiki.ros.org/cv_bridge

以下のコマンドでインストールします。


$ sudo apt-get install ros-melodic-cv-bridge







メッセージタイプ



画像配信に適したメッセージが既に用意されているか調べてみます。
こちらが参考になりました。
ROSの標準メッセージをまとめてみた(sensor_msgs編)

sensor_msgs/Imageが使えそうです。
sensor_msgs/Image Message

プログラムは以前作成したmy_firstパッケージに作成することにしました。
ROS turtlesimを自動的に動かすプログラムの作成

roscdでパッケージに移動。
package.xmlに依存関係を追加します。


$ roscd my_first
$ vi package.xml



exec_dependに「sensor_msgs」を追加しました。

・package.xml


  1. <?xml version="1.0"?>
  2. <package format="2">
  3. <name>my_first</name>
  4. <version>0.0.0</version>
  5. <description>The my_first package</description>
  6. <maintainer email="baranche@example.com">baranche</maintainer>
  7. <license>MIT</license>
  8. <buildtool_depend>catkin</buildtool_depend>
  9. <build_depend>rospy</build_depend>
  10. <build_depend>std_msgs</build_depend>
  11. <build_export_depend>rospy</build_export_depend>
  12. <build_export_depend>std_msgs</build_export_depend>
  13. <exec_depend>rospy</exec_depend>
  14. <exec_depend>std_msgs</exec_depend>
  15. <exec_depend>geometry_msgs</exec_depend>
  16. <exec_depend>sensor_msgs</exec_depend>
  17. <export>
  18. </export>
  19. </package>





プログラム



publish_image.pyというプログラムを作成しました。

・publish_image.py


  1. #!/usr/bin/env python
  2. import os
  3. import rospy
  4. from sensor_msgs.msg import Image
  5. import cv2
  6. from cv_bridge import CvBridge
  7. def operator():
  8.     rospy.init_node('operator', anonymous=True)
  9.     pub = rospy.Publisher('image_data', Image, queue_size=10)
  10.     # read image
  11.     filepath = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'lena.png')
  12.     im = cv2.imread(filepath, cv2.IMREAD_COLOR)
  13.     # make bridge
  14.     bridge = CvBridge()
  15.     msg = bridge.cv2_to_imgmsg(im, encoding="bgr8")
  16.     rate = rospy.Rate(1) # 1hz
  17.     while not rospy.is_shutdown():
  18.         pub.publish(msg)
  19.         rate.sleep()
  20. if __name__ == '__main__':
  21.     try:
  22.         operator()
  23.     except rospy.ROSInterruptException:
  24.         pass



プログラムと同じ階層に「lena.png」も保存しておきます。
ブロクラムをビルドし、実行します。


$ cd ~/catkin_ws
$ catkin_make
$ rosrun my_first publish_image.py






画像の表示



Rvizで表示したかったのですがうまく動かず。
rqt_image_viewで表示してみます。


$ rqt_image_view



左上のノードを「/image_data」に変更すると画像が配信されていることが確認できました。

928_01.png



【参考URL】

ROSの標準メッセージをまとめてみた(sensor_msgs編)

sensor_msgs/Image Message

Converting between ROS images and OpenCV images (Python)

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2018/11/18(日) 17:32:22|
  2. ROS
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

ROS 可視化ツールRvizのインストールとリモートrosへの接続

可視化ツール「Rviz」をインストールしてみます。
Ubuntu 18.04、ROSはmelodicです。

こちらを参考にしました。
rviz UserGuide


インストール



以下のコマンドでインストール。


$ sudo apt install ros-melodic-rviz



起動します。


$ rosrun rviz rviz



これで起動する予定だったのですが、ROSは仮想OSで起動しており、
SSH接続でX Windowsをフォワードしている環境では起動できませんでした。

RVIZ through ssh



Ubuntu Desktopへのインストール



手元のUbuntu Desktop 18.04にインストールしてみます。
こちらを参考にします。
ROSをUbuntu 18.04.1にインストールする

aptリポジトリに追加
aptキーを設定
リポジトリを更新してインストール


$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
$ sudo apt-get update
$ sudo apt install ros-melodic-ros-base
$ sudo apt install ros-melodic-rviz



rosdepの初期化を実行して、update
※rvizが表示したいだけなので不要ですが一応。


$ sudo rosdep init
$ rosdep update



ログイン時、「/opt/ros/melodic/setup.bash」が実行されるようにしておきます。


$ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
$ source ~/.bashrc




rvizを起動しようとするとエラーになります。


$ rosrun rviz rviz



927_01.png


こちらを参考にROS_MASTER_URIをroscoreを実行しているサーバーに変更します。
README on getting RVIS to work over multiple computers

※今回roscoreは192.168.1.104で動作させています。


$ export ROS_MASTER_URI=http://192.168.1.104:11311



改めてrvizを起動。


$ rosrun rviz rviz




動いてくれました。

927_02.png
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2018/11/17(土) 17:54:09|
  2. ROS
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

ROS turtlesimを自動的に動かすプログラムの作成

ROSのチュートリアルを一通り見てみました。
ROSチュートリアル一覧

オリジナルのプログラムを作成してみます。

パッケージの作成



心機一転、新しいパッケージを作成します。
パッケージの作成はこちらでやりました。
ROS チュートリアル3:ROSパッケージの作成

my_firstパッケージを作成してみます。


$ cd ~/catkin_ws/src
$ catkin_create_pkg my_first std_msgs rospy



試しにパッケージをビルド


$ cd ~/catkin_ws
$ catkin_make
(略)
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~ traversing 2 packages in topological order:
-- ~~ - beginner_tutorials
-- ~~ - my_first
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(略)




ちゃんとパッケージとして認識されています。
パッケージファイルを修正。


$ roscd my_first
$ vi package.xml



こんな感じに修正しました。

・package.xml


  1. <?xml version="1.0"?>
  2. <package format="2">
  3. <name>my_first</name>
  4. <version>0.0.0</version>
  5. <description>The my_first package</description>
  6. <maintainer email="baranche@example.com">baranche</maintainer>
  7. <license>MIT</license>
  8. <buildtool_depend>catkin</buildtool_depend>
  9. <build_depend>rospy</build_depend>
  10. <build_depend>std_msgs</build_depend>
  11. <build_export_depend>rospy</build_export_depend>
  12. <build_export_depend>std_msgs</build_export_depend>
  13. <exec_depend>rospy</exec_depend>
  14. <exec_depend>std_msgs</exec_depend>
  15. <export>
  16. </export>
  17. </package>






パラメーターの調査



turtlesimのturtlesim_nodeに値を送信してカメを操作します。
何のパラメーターを送ればよいか調べてみます。

手順はこちらで試してみました。
ROS チュートリアル6:ROSトピックについて

まずroscoreを起動。

・ターミナル1


$ roscore



続いてturtlesimを起動。

・ターミナル2


$ rosrun turtlesim turtlesim_node




トピックのリストを表示してみます。


$ rostopic list -v

Published topics:
* /turtle1/color_sensor [turtlesim/Color] 1 publisher
* /rosout [rosgraph_msgs/Log] 1 publisher
* /rosout_agg [rosgraph_msgs/Log] 1 publisher
* /turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 subscriber
* /rosout [rosgraph_msgs/Log] 1 subscriber




/turtle1/cmd_velが引数を受け付けるトピックのようです。
詳細を見てみます。


$ rostopic type /turtle1/cmd_vel
geometry_msgs/Twist



「geometry_msgs/Twist」という形式を送信すれば良さそうです。
詳細を見てみます。


$ rosmsg show geometry_msgs/Twist
geometry_msgs/Vector3 linear
    float64 x
    float64 y
    float64 z
geometry_msgs/Vector3 angular
    float64 x
    float64 y
    float64 z



送信メッセージの内容がなんとなくわかりました。



依存関係の追加



geometry_msgs/Twistを作成したmy_firstパッケージで利用できるようにします。
既に存在するメッセージなので、package.xmlに追記してやります。

・package.xml


  1. <?xml version="1.0"?>
  2. <package format="2">
  3. <name>my_first</name>
  4. <version>0.0.0</version>
  5. <description>The my_first package</description>
  6. <maintainer email="baranche@example.com">baranche</maintainer>
  7. <license>MIT</license>
  8. <buildtool_depend>catkin</buildtool_depend>
  9. <build_depend>rospy</build_depend>
  10. <build_depend>std_msgs</build_depend>
  11. <build_export_depend>rospy</build_export_depend>
  12. <build_export_depend>std_msgs</build_export_depend>
  13. <exec_depend>rospy</exec_depend>
  14. <exec_depend>std_msgs</exec_depend>
  15. <exec_depend>geometry_msgs</exec_depend>
  16. <export>
  17. </export>
  18. </package>



exec_dependにgeometry_msgsを追加しました。
ちゃんと追加できたかチェックしてみます。


$ rospack depends1 my_first
rospy
std_msgs
geometry_msgs



「geometry_msgs」が表示されました。



プログラムの作成



カメを動かすプログラムを作成してみます。
my_firstパッケージに移動。
プログラムを保存する「scripts」ディレクトリを作成します。


$ roscd my_first
$ mkdir scripts
$ cd scripts



/turtle1/cmd_velにPublishするプログラムを作成します。
とりあえず、こちらで試した値を送信してみます。
ROS チュートリアル6:ROSトピックについて

・publish_sample.py


  1. #!/usr/bin/env python
  2. import rospy
  3. from geometry_msgs.msg import Twist
  4. def operator():
  5.     rospy.init_node('operator', anonymous=True)
  6.     pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
  7.     vel_msg = Twist()
  8.     vel_msg.linear.x = 2.0
  9.     vel_msg.linear.y = 0
  10.     vel_msg.linear.z = 0
  11.     vel_msg.angular.x = 0
  12.     vel_msg.angular.y = 0
  13.     vel_msg.angular.z = 1.8
  14.     
  15.     rate = rospy.Rate(1) # 1hz
  16.     while not rospy.is_shutdown():
  17.         pub.publish(vel_msg)
  18.         rate.sleep()
  19. if __name__ == '__main__':
  20.     try:
  21.         operator()
  22.     except rospy.ROSInterruptException:
  23.         pass



実行権限を付与しておきます。


$ chmod +x publish_sample.py



プログラムをビルド


$ cd ~/catkin_ws
$ catkin_make



実行してみます。


$ rosrun my_first publish_sample.py



カメが回ってくれました。

926_01.png

地味に感動します。



【参考URL】
Moving in a Straight Line
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2018/11/17(土) 16:34:48|
  2. ROS
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
次のページ