現象

こちらの記事を参考にさせていただきながら、turtlebot3のシミュレーション上でのSLAMを試そうとしていました。・・が、Gazeboを立ち上げteleop経由で操作をしようとしたところ、Gazebo上のロボットが動かない現象に悩まされました。

rostopic list -v

Gazeboを立ち上げ中に上記コマンドでtopicを調べたところ、/cmd_velのtopicが発行されていませんでした。

Spec

  • Jetson Nano / Ubuntu 18.04
  • ROS melodic

gazebo_ros_pkgsをインストールしていなかった

結論、gazebo_ros_pkgsをインストールをしていなかったというイージーミスでした。

sudo apt-get install ros-melodic-desktop-full 

でrosをインストールしたときに付属しているGazeboは本体のみなので、下記コマンドでrosとの繋ぎこみ用の付属パッケージをインストールする必要がありました。

sudo apt install ros-melodic-gazebo-ros-pkgs

インストールをすると、無事にSubscribed topicsの中に/cmd_velが追加されました。

roslaunch turtlebot3_gazebo turtlebot3_world.launch
rostopic list -v
Subscribed topicsの中に/cmd_velが入っていればok
roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

さらに、上記コマンドを別々のターミナルで実行し、操作することでSLAMも無事に動作させることができました。

RViz上でのSLAMも成功

Related Posts

L293Dモータシールドを用いて4つのDCモータを1つの基盤で制御
L293Dモータシールドを用いて4つのDCモータを1つの基盤で制御
概要 DCモータをArduinoなどのマイコンで制御する場合、モータドライバやモータコントローラを使用します。 ただし、複数のDCモータを制御しようとすると、モータドライバ、電源、マイコン間の配線が増え、構成が複雑になりがちです。特に...
Read More
ROSのPythonで他のサービスが立ち上がるまで待つ方法
ROSのPythonで他のサービスが立ち上がるまで待つ方法
ROSでパッケージを作成する時に他のサービスが発行するトピックに依存している時など、他のサービスが立ち上がるまで待つ必要がある時があります。 その場合、wait_for_service()関数を使用することで実現できます。この関数は、...
Read More
ROSのLaserScanデータの一定角度の範囲を無視する方法
ROSのLaserScanデータの一定角度の範囲を無視する方法
ROSでLidarセンサーを使う時、ロボットの車体など一定角度の範囲に常に障害物があり、これを無視したい時があると思いますが、その方法を紹介します。 以下は、得られた/scan_rawトピックのデータの一定角度の範囲を無視して新しい/...
Read More