Ask Your Question
0

Sending Goals to the Navigation Stack Help

asked 2021-11-15 16:16:51 -0600

adamt11 gravatar image

Hello,

I am new to ROS and want to use the functionality described here to move my robot to a desired waypoint: http://wiki.ros.org/navigation/Tutori...

I am using ROS Melodic on Ubuntu 18.04. I am using a Husky simulated robot in Gazebo, and want to use code to move it to a desired waypoint. Once I reach this step: rostopic list | grep move_base/goal The tutorial says that something should show up, but when I enter this command nothing happens. There is no error, it just does nothing. The tutorial says to check the name of the action and make sure it is "move_base", and to my knowledge it is the same for the Husky robot.

Please help me get this tutorial working for my robot, or if there is something else that achieves the same goal that could also be useful.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
1

answered 2021-11-15 17:03:42 -0600

The following code is in Python but it shows you how to use Waypoints with Husky, currently is an infinite loop, but you can modify accordingly:

Launch the following in separate terminals:

$ roslaunch husky_gazebo husky_empty_world
$ roslaunch husky_viz view_robot.launch
$ roslaunch husky_navigation move_base_mapless_demo.launch

Run the following python program: navigation_husky.py

#! /usr/bin/env python3

import rospy
import actionlib
from move_base_msgs.msg import MoveBaseAction, MoveBaseResult, MoveBaseGoal

class MoveHusky(object):
  def __init__(self):
    self.client = actionlib.SimpleActionClient('/move_base', MoveBaseAction)
    self.client.wait_for_server()
    self.goal = MoveBaseGoal()

  def moveToDest(self, x, y):
    self.goal.target_pose.header.frame_id = "odom"
    self.goal.target_pose.pose.position.x = x
    self.goal.target_pose.pose.position.y = y
    self.goal.target_pose.pose.orientation.z = 0.7071
    self.goal.target_pose.pose.orientation.w = 0.7071
    rate = rospy.Rate(10)
    self.client.send_goal(self.goal)
    result = self.client.get_result()
    while result == None:
      result = self.client.get_result()
      status = self.client.get_state()
      rospy.loginfo("Status: {}".format(status))
      rospy.loginfo("Result: {}".format(result))
      rate.sleep()

if __name__ == "__main__":
  rospy.init_node("move_base_client")
  moveHusky = MoveHusky()

  while not rospy.is_shutdown():
    moveHusky.moveToDest(-4.0, 0.0)
    moveHusky.moveToDest(-4.0, -2.0)
    moveHusky.moveToDest(0.0, 0.0)
edit flag offensive delete link more

Comments

One of the particular thing with Husky, is that the header frame is odom, in the example the Navigation tutorial base_link is used instead.

osilva gravatar image osilva  ( 2021-11-15 17:21:04 -0600 )edit

Thanks, that python code ran successfully. Why does move_base_mapless_demo need to be launched? I'm not sure exactly what this does.

adamt11 gravatar image adamt11  ( 2021-11-16 10:25:31 -0600 )edit

It starts the navigation node by calling move_base.launch:

<launch>

  <!--- Run Move Base -->  
  <include file="$(find husky_navigation)/launch/move_base.launch">
    <arg name="no_static_map" value="true"/>
  </include>

</launch>

And to see what is move_base.launch refer to: https://github.com/husky/husky/blob/n...

osilva gravatar image osilva  ( 2021-11-16 10:42:32 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2021-11-15 16:16:51 -0600

Seen: 17 times

Last updated: Nov 15 '21