move_baseを使っていると、障害物が無いのにコストマップで障害物判定されてしまうことがあります。そのようなときは、コストマップを一度クリアしましょう。

コマンドから

 

move_baseノードには、コストマップをクリアする方法があります。このためには、move_baseノードに対してclear_costmapsサービスを送信する必要があります。

下記のコマンドを実行することでコストマップをクリアできます。

$ rosservice call /move_base/clear_costmaps

 

コード(Python)から

Pythonからもclear_costmapsサービスを呼び出すことができます。

以下は、Pythonスクリプトからclear_costmapsサービスを呼び出す例です。

#!/usr/bin/env python
import rospy
from std_srvs.srv import Empty

rospy.init_node('clear_costmaps_client')

# サービスが提供されるまで待機
rospy.wait_for_service('/move_base/clear_costmaps')

try:
    # clear_costmapsサービスを呼び出す
    clear_costmaps = rospy.ServiceProxy('/move_base/clear_costmaps', Empty)
    clear_costmaps()
    rospy.loginfo("Clear costmaps service called successfully.")
except rospy.ServiceException as e:
    rospy.logerr("Failed to call clear costmaps service: %s" % e)

 このスクリプトでは、rospyを使用してclear_costmapsサービスを呼び出しています。std_srvsパッケージのEmptyクラスをインポートして、clear_costmapsサービスに対するクライアントを作成し、clear_costmaps関数を実行することでコストマップをクリアしています。

Move_baseRos

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