TECH: ROSパッケージ作りたくないがROS通信したい
WSLメモ
- WSL2 install
WSLのときこんなに簡単だったっけ?
- WSLにROSをインストール
xserver入れないとrviz、gazeboが見えないとのこと。
WSLのインストール
とりあえず、WSLのインストールはpowershellで以下コマンド
wsl --install
注意事項にも書いてあるけど、上記でインストールできない場合は、下記でディストリビューションを指定してインストールする。
wsl --install -d <DistroName>
インストール可能なディストリビューション名は以下から取得する。
wsl --list --online
最初からやり直すには
一度入れたWSLをアンインストールするにはWindowsの設定→アプリ→アプリと機能から該当するディストリビューションを選択しアンインストールする
同じディストリビューションをまっさらな状態にしたいときは、同じようにアプリと機能の該当ディストリビューションから詳細オプションをクリックし、リセット
WSLなどへのリモート接続のVScode拡張機能
VSCodeを使っているならRemote Development
拡張機能をインストールをするのが便利
(ssh通信もVSCodeからできるようになるし、ssh.confに設定残して置けるのでそういう意味でも便利)
インストール後は左のバーからリモートエクスプローラのタブが出る
WSL Targetsからディストリビューションを選べば、WSLにログインができる
WSLの初期設定
ここからはWSLでの作業
sudo apt update
sudo apt install x11-apps -y
2行目はX Window Systemと通信するためのクライアントアプリのインストール
~/.bashrcに以下を記述
# rvizとx serverの通信設定
export LIBGL_ALWAYS_INDIRECT=""
# gazeboとx serverの通信設定
export GAZEBO_IP=127.0.0.1
# wslがx serverを見つけられるようにするための設定
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
最後はresolv.conf
に書いてあるnameserver
のIPアドレスをDISPLAY
環境変数に設定するよ、ということ
↓こちらのかたの解説が役に立った
最後にbashの更新
source ~/.bashrc
X Window systemサーバの構築
WindowsでVcXsrvをインストールする
- 「スタート」からxlaunch.exeを起動。
- multiple windowを選択し, 次へ。
- start no client を選択し, 次へ.
- Additional parameters for VcXsrv という入力フォームに 「-ac -nowgl」と入力し、次へ。
- Save configurationを押下して、設定ファイルをどこかに保存。
- 完了を押下して、VcXsrvを起動。
※4は超重要
これがないとXserverにrviz、gazeboが映らない
Windows + R
でファイル名を指定して実行にshell:startup
と打ち込み、開いたフォルダにVcxsrvを起動したときに作られた設定ファイルを配置する
→これで起動時にXserverの設定がされる
以下でXserverの動作確認
xeyes
漫画チックな目が出たらOK
忘れてた
ROS1 melodicならUbuntu18.04にする必要がある
ROS2 foxyはUbuntu20.04をWSLにインストールする必要がある
別々の環境として1つのWSLに管理できるのは良き
ROS1
roscore
ROS1の起動の仕方
ターミナル開き、ROS masterを起動する
roscore
rviz, gazebo
別のターミナル開いて
rviz
や
gazebo
で起動確認してみる
turtlesim
turtlesim
パッケージのturtlesim_node
の起動
rosrun turtlesim turtlesim_node
キーボードの矢印キーで制御できるturtle_teleop_key
の起動
rosrun turtlesim turtle_teleop_key
turtlesimの画面上をアクティブにし、キーボード矢印を押す
ROS2
rviz, gazebo
rvizはrviz
からrviz2
へ
rviz2
gazeboは最初のROS2パッケージに含まれてないぽいのでaptでインストールする必要がある
sudo apt install ros-foxy-gazebo-ros-pkgs
それから以下コマンドで起動(こっちは変わらない)
gazebo
turtlesim
ROS1と同様turtlesim
パッケージのturtlesim_node
の起動
rosrun
コマンドはros2 run
へ
ros2 run turtlesim turtlesim_node
turtle_teleop_key
でキーボード制御できるノードの起動
ros2 run turtlesim turtle_teleop_key
rosbridge, roslibpyメモ
ROS1はこれでいけそう。
ROS2も同様にturtlesimの亀さんを動かすことを目標に
ROS1
たぶんこれはこのままでいける
$ sudo apt-get install ros-melodic-rosbridge-suite
起動は以下
roslaunchでroscoreも立ち上がる
$ roslaunch rosbridge_server rosbridge_websocket.launch
pipでroslibpy
のインストール
$ pip install roslibpy
pipない場合
以下でインストール
$ sudo apt install python-pip
pythonから亀を動かすサンプルコード
とりあえず、pythonコードは丸パクリ
python -> rosbridge -> ros
# -*- coding:utf8 -*-
import time
from roslibpy import Message, Ros, Topic
def main():
# roscoreを実行しているサーバーへ接続
ros_client = Ros('192.168.1.104', 9090)
# Publishするtopicを指定
publisher = Topic(ros_client, '/turtle1/cmd_vel', 'geometry_msgs/Twist')
def start_sending():
while True:
if not ros_client.is_connected:
break
# 送信するTwistメッセージの内容
publisher.publish(Message({
'linear': {
'x': 2.0,
'y': 0,
'z': 0
},
'angular': {
'x': 0,
'y': 0,
'z': 1.8
}
}))
time.sleep(0.1)
publisher.unadvertise()
# Publish開始
ros_client.on_ready(start_sending, run_in_thread=True)
ros_client.run_forever()
if __name__ == '__main__':
main()
turtlesim_node
の起動をして、
rosrun turtlesim turtlesim_node
sample.py
の起動
python sample.py
亀が動くはず
ROS2で普通にできた。
ROS1でもたぶんできるのでしょう。
記事にしたので、クローズする。