Main Content

sendGoal

Send goal message to action server

Description

sendGoal(client,goalMsg) sends a goal message to the action server. The specified action client tracks this goal. The function does not wait for the goal to be executed and returns immediately.

If the ActionFcn, FeedbackFcn, and ResultFcn callbacks of the client are defined, they are called when the goal is processing on the action server. All callbacks associated with a previously sent goal are disabled, but the previous goal is not canceled.

example

Examples

collapse all

This example shows how to create goal messages and send them to an active ROS action server on a ROS network. You must create a ROS action client to connect to this server.

Start ROS-Enabled Virtual Machine

Launch ROS Action Server in ROS-Enabled VM

Source the appropriate ROS environment setup script in the ROS noetic terminal before running any ROS commands.

source ~/Documents/mw_catkin_ws/devel/setup.bash

Run the action server in the ROS noetic terminal.

roslaunch turtlebot_actions server_turtlebot_move.launch

Connect to ROS from MATLAB

Connect to the ROS node using rosinit with the IP address of the ROS-enabled VM.

rosIP = "192.168.198.128"; % IP address
rosinit(rosIP,11311) % Initialize ROS connection
Initializing global node /matlab_global_node_19677 with NodeURI http://192.168.198.1:61572/ and MasterURI http://192.168.198.128:11311.

Create ROS Action Client

Create a ROS action client using rosactionclient and get a goal message. The action client object actClient connects to the already running ROS action server. The goalMsg is a valid goal message. Update the message parameters with your specific goal.

[actClient,goalMsg] = rosactionclient("/turtlebot_move");
disp(goalMsg)
  ROS TurtlebotMoveGoal message with properties:

        MessageType: 'turtlebot_actions/TurtlebotMoveGoal'
       TurnDistance: 0
    ForwardDistance: 0

  Use showdetails to show the contents of the message

Create ROS Message Using ROS Action Client

Create a message using rosmessage function and the action client object. This message sends linear and angular velocity commands to a Turtlebot® robot.

goalMsg = rosmessage(actClient);
disp(goalMsg)
  ROS TurtlebotMoveGoal message with properties:

        MessageType: 'turtlebot_actions/TurtlebotMoveGoal'
       TurnDistance: 0
    ForwardDistance: 0

  Use showdetails to show the contents of the message

Send Goal Message to Action Server

Modify the goal message parameters and send the goal to the action server.

goalMsg.ForwardDistance = 2; % in meters
sendGoal(actClient,goalMsg)

This example shows how to send and cancel goals for ROS actions. Action types must be setup beforehand with an action server running.

You must have set up the '/fibonacci' action type. To run this action server, use the following command on the ROS system:

rosrun actionlib_tutorials fibonacci_server

First, set up a ROS action client. Then, send a goal message with modified parameters. Finally, cancel your goal and all goals on the action server.

Connect to a ROS network with a specified IP address. Create a ROS action client connected to the ROS network using rosactionclient. Specify the action name. Wait for the client to be connected to the server.

rosinit('192.168.203.133',11311)
Initializing global node /matlab_global_node_18287 with NodeURI http://192.168.203.1:55284/
[actClient,goalMsg] = rosactionclient('/fibonacci','DataFormat','struct');
waitForServer(actClient);

Send a goal message with modified parameters. Wait for the goal to finish executing.

goalMsg.Order = int32(4);
[resultMsg,resultState] = sendGoalAndWait(actClient,goalMsg)
resultMsg = struct with fields:
    MessageType: 'actionlib_tutorials/FibonacciResult'
       Sequence: [0 1 1 2 3]

resultState = 
'succeeded'
rosShowDetails(resultMsg)
ans = 
    '
       MessageType :  actionlib_tutorials/FibonacciResult
       Sequence    :  [0, 1, 1, 2, 3]'

Send a new goal message without waiting.

goalMsg.Order = int32(5);
sendGoal(actClient,goalMsg)

Cancel the goal on the ROS action client, actClient.

cancelGoal(actClient)

Cancel all the goals on the action server that actClient is connected to.

cancelAllGoals(actClient)

Delete the action client.

delete(actClient)

Disconnect from the ROS network.

rosshutdown
Shutting down global node /matlab_global_node_18287 with NodeURI http://192.168.203.1:55284/

Input Arguments

collapse all

ROS action client, specified as a SimpleActionClient object handle. This simple action client enables you to track a single goal at a time.

ROS action goal message, specified as a Message object handle or structure. Update this message with your goal details and send it to the ROS action client using sendGoal or sendGoalAndWait.

Note

In a future release, ROS Toolbox will use message structures instead of objects for ROS messages.

To use message structures now, set the "DataFormat" name-value argument to "struct". For more information, see ROS Message Structures.

Extended Capabilities

Version History

Introduced in R2019b

expand all