Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ find_package(rclpy REQUIRED)

if(BUILD_TESTING)
find_package(ament_cmake_gtest REQUIRED)
find_package(action_tutorials_interfaces REQUIRED)
find_package(example_interfaces REQUIRED)
ament_add_gtest(${PROJECT_NAME}_smoke_test test/smoke.cpp)

ament_target_dependencies(${PROJECT_NAME}_smoke_test
action_tutorials_interfaces
action_msgs
example_interfaces
rclcpp
rclcpp_action
)
Expand All @@ -41,8 +41,8 @@ if(BUILD_TESTING)
ament_add_gtest(${PROJECT_NAME}_complex_test test/complex_setup.cpp)

ament_target_dependencies(${PROJECT_NAME}_complex_test
action_tutorials_interfaces
action_msgs
example_interfaces
rclcpp
rclcpp_action
)
Expand Down
40 changes: 20 additions & 20 deletions doc/CPlusPlusClient.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@
## Minimal Example
Sends the goal, and ignores the result and the feedback
```cpp
#include <action_tutorials_interfaces/action/fibonacci.hpp>
#include <example_interfaces/action/fibonacci.hpp>
#include <simple_actions/simple_client.hpp>

int main(int argc, char * argv[])
{
rclcpp::init(argc, argv);
rclcpp::Node::SharedPtr node = std::make_shared<rclcpp::Node>("client_demo");
simple_actions::SimpleActionClient<action_tutorials_interfaces::action::Fibonacci> client(node, "fibonacci");
simple_actions::SimpleActionClient<example_interfaces::action::Fibonacci> client(node, "fibonacci");

action_tutorials_interfaces::action::Fibonacci::Goal goal_msg;
example_interfaces::action::Fibonacci::Goal goal_msg;
goal_msg.order = 10;
client.sendGoal(goal_msg);
rclcpp::shutdown();
Expand All @@ -24,16 +24,16 @@ int main(int argc, char * argv[])
This example sends the goal and waits for the result.

```cpp
#include <action_tutorials_interfaces/action/fibonacci.hpp>
#include <example_interfaces/action/fibonacci.hpp>
#include <simple_actions/simple_client.hpp>

int main(int argc, char * argv[])
{
rclcpp::init(argc, argv);
rclcpp::Node::SharedPtr node = std::make_shared<rclcpp::Node>("client_demo");
simple_actions::SimpleActionClient<action_tutorials_interfaces::action::Fibonacci> client(node, "fibonacci");
simple_actions::SimpleActionClient<example_interfaces::action::Fibonacci> client(node, "fibonacci");

action_tutorials_interfaces::action::Fibonacci::Goal goal_msg;
example_interfaces::action::Fibonacci::Goal goal_msg;
goal_msg.order = 10;
auto result = client.execute(goal_msg);
for (const auto& n : result.sequence)
Expand All @@ -48,21 +48,21 @@ int main(int argc, char * argv[])
## Example with Callbacks
This example uses custom callbacks for the result and feedback.
```cpp
#include <action_tutorials_interfaces/action/fibonacci.hpp>
#include <example_interfaces/action/fibonacci.hpp>
#include <simple_actions/simple_client.hpp>

void feedbackCallback(const action_tutorials_interfaces::action::Fibonacci::Feedback& feedback)
void feedbackCallback(const example_interfaces::action::Fibonacci::Feedback& feedback)
{
std::stringstream ss;
ss << "Next number in sequence received: ";
for (auto number : feedback.partial_sequence) {
for (auto number : feedback.sequence) {
ss << number << " ";
}
std::cout << ss.str() << std::endl;
}

void resultCallback(simple_actions::ResultCode code,
const action_tutorials_interfaces::action::Fibonacci::Result& result)
const example_interfaces::action::Fibonacci::Result& result)
{
if (code == simple_actions::ResultCode::SUCCEEDED)
{
Expand All @@ -85,9 +85,9 @@ int main(int argc, char * argv[])
using namespace std::placeholders;
rclcpp::init(argc, argv);
rclcpp::Node::SharedPtr node = std::make_shared<rclcpp::Node>("client_demo");
simple_actions::SimpleActionClient<action_tutorials_interfaces::action::Fibonacci> client(node, "fibonacci");
simple_actions::SimpleActionClient<example_interfaces::action::Fibonacci> client(node, "fibonacci");

action_tutorials_interfaces::action::Fibonacci::Goal goal_msg;
example_interfaces::action::Fibonacci::Goal goal_msg;
goal_msg.order = 10;
client.sendGoal(goal_msg, std::bind(resultCallback, _1, _2), std::bind(feedbackCallback, _1));
rclcpp::spin(node);
Expand All @@ -97,7 +97,7 @@ int main(int argc, char * argv[])

### Example With Class Callbacks
```cpp
#include <action_tutorials_interfaces/action/fibonacci.hpp>
#include <example_interfaces/action/fibonacci.hpp>
#include <simple_actions/simple_client.hpp>

class FibonacciActionClient
Expand All @@ -112,28 +112,28 @@ public:
{
using namespace std::placeholders;

auto goal_msg = action_tutorials_interfaces::action::Fibonacci::Goal();
auto goal_msg = example_interfaces::action::Fibonacci::Goal();
goal_msg.order = 10;

client_.sendGoal(goal_msg, std::bind(&FibonacciActionClient::resultCallback, this, _1, _2), std::bind(&FibonacciActionClient::feedbackCallback, this, _1));
}

private:
rclcpp::Node::SharedPtr node_;
simple_actions::SimpleActionClient<action_tutorials_interfaces::action::Fibonacci> client_;
simple_actions::SimpleActionClient<example_interfaces::action::Fibonacci> client_;

void feedbackCallback(const action_tutorials_interfaces::action::Fibonacci::Feedback& feedback)
void feedbackCallback(const example_interfaces::action::Fibonacci::Feedback& feedback)
{
std::stringstream ss;
ss << "Next number in sequence received: ";
for (auto number : feedback.partial_sequence) {
for (auto number : feedback.sequence) {
ss << number << " ";
}
RCLCPP_INFO(node_->get_logger(), ss.str().c_str());
}

void resultCallback(simple_actions::ResultCode code,
const action_tutorials_interfaces::action::Fibonacci::Result & result)
const example_interfaces::action::Fibonacci::Result & result)
{
if (code == simple_actions::ResultCode::SUCCEEDED)
{
Expand Down Expand Up @@ -175,7 +175,7 @@ You can also specify a feedback callback with the call operator, a la
By default, creating the `SimpleActionClient` will wait for the server to come up. You can disable that by passing in `wait_for_server=False` and then calling `waitForServer()` later.

```cpp
simple_actions::SimpleActionClient<action_tutorials_interfaces::action::Fibonacci> client(node, "fibonacci", false);
simple_actions::SimpleActionClient<example_interfaces::action::Fibonacci> client(node, "fibonacci", false);

# Do something else
client.waitForServer();
Expand All @@ -193,7 +193,7 @@ C++ exception with description "Node '/XYZ' has already been added to an executo
In this case, you can use the `spin_locally` flag in the `SimpleActionClient::execute()` function to avoid using the implicit executor.

```cpp
#include <action_tutorials_interfaces/action/fibonacci.hpp>
#include <example_interfaces/action/fibonacci.hpp>
#include <simple_actions/simple_client.hpp>

class MyComplexClass
Expand Down
14 changes: 7 additions & 7 deletions doc/CPlusPlusServer.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
Listens for goal, returns the result (no feedback)

```cpp
#include <action_tutorials_interfaces/action/fibonacci.hpp>
#include <example_interfaces/action/fibonacci.hpp>
#include <simple_actions/simple_server.hpp>

bool execute(const action_tutorials_interfaces::action::Fibonacci::Goal& goal,
action_tutorials_interfaces::action::Fibonacci::Result& result)
bool execute(const example_interfaces::action::Fibonacci::Goal& goal,
example_interfaces::action::Fibonacci::Result& result)
{
rclcpp::Rate loop_rate(1);
std::vector<int> sequence;
Expand All @@ -29,7 +29,7 @@ int main(int argc, char* argv[])
{
rclcpp::init(argc, argv);
rclcpp::Node::SharedPtr node = std::make_shared<rclcpp::Node>("server_demo");
simple_actions::SimpleActionServer<action_tutorials_interfaces::action::Fibonacci> server(
simple_actions::SimpleActionServer<example_interfaces::action::Fibonacci> server(
node, "fibonacci", std::bind(&execute, std::placeholders::_1, std::placeholders::_2));
rclcpp::spin(node);
return 0;
Expand All @@ -40,13 +40,13 @@ int main(int argc, char* argv[])
You need the `action_server` reference to send feedback, so its easier to do it within a class then deal with global variables or lambdas. YMMV.

```cpp
#include <action_tutorials_interfaces/action/fibonacci.hpp>
#include <example_interfaces/action/fibonacci.hpp>
#include <simple_actions/simple_server.hpp>

class FibonacciActionServer
{
public:
using Fibonacci = action_tutorials_interfaces::action::Fibonacci;
using Fibonacci = example_interfaces::action::Fibonacci;

explicit FibonacciActionServer(rclcpp::Node::SharedPtr node)
: node_(node),
Expand All @@ -63,7 +63,7 @@ private:
{
rclcpp::Rate loop_rate(1);
auto feedback = std::make_shared<Fibonacci::Feedback>();
auto& sequence = feedback->partial_sequence;
auto& sequence = feedback->sequence;
sequence.push_back(0);
sequence.push_back(1);

Expand Down
8 changes: 4 additions & 4 deletions doc/PythonClient.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Sends the goal, and ignores the result and the feedback
import rclpy
from rclpy.node import Node
from simple_actions import SimpleActionClient
from action_tutorials_interfaces.action import Fibonacci
from example_interfaces.action import Fibonacci


def main(args=None):
Expand All @@ -29,7 +29,7 @@ This example sends the goal and waits for the result.
import rclpy
from rclpy.node import Node
from simple_actions import SimpleActionClient
from action_tutorials_interfaces.action import Fibonacci
from example_interfaces.action import Fibonacci


def main(args=None):
Expand All @@ -53,11 +53,11 @@ This example uses custom callbacks for the result and feedback.
import rclpy
from rclpy.node import Node
from simple_actions import SimpleActionClient
from action_tutorials_interfaces.action import Fibonacci
from example_interfaces.action import Fibonacci


def my_awesome_feedback_cb(feedback):
print(f'Feedback: {feedback.partial_sequence}')
print(f'Feedback: {feedback.sequence}')


def my_awesome_result_cb(result_code, result):
Expand Down
12 changes: 6 additions & 6 deletions doc/PythonServer.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import time
import rclpy
from rclpy.node import Node
from simple_actions import SimpleActionServer
from action_tutorials_interfaces.action import Fibonacci
from example_interfaces.action import Fibonacci


def fibonacci_action(goal):
Expand Down Expand Up @@ -43,7 +43,7 @@ import time
import rclpy
from rclpy.node import Node
from simple_actions import SimpleActionServer
from action_tutorials_interfaces.action import Fibonacci
from example_interfaces.action import Fibonacci


class FibonacciServer:
Expand All @@ -52,16 +52,16 @@ class FibonacciServer:

def fibonacci_action(self, goal):
feedback_msg = Fibonacci.Feedback()
feedback_msg.partial_sequence = [0, 1]
feedback_msg.sequence = [0, 1]

for i in range(1, goal.order):
feedback_msg.partial_sequence.append(
feedback_msg.partial_sequence[i] + feedback_msg.partial_sequence[i - 1])
feedback_msg.sequence.append(
feedback_msg.sequence[i] + feedback_msg.sequence[i - 1])
self.action_server.publish_feedback(feedback_msg)
time.sleep(1.0)

result = Fibonacci.Result()
result.sequence = feedback_msg.partial_sequence
result.sequence = feedback_msg.sequence
return result


Expand Down
2 changes: 1 addition & 1 deletion package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<depend>rclcpp_action</depend>
<depend>rclpy</depend>

<test_depend>action_tutorials_interfaces</test_depend>
<test_depend>example_interfaces</test_depend>

<export>
<build_type>ament_cmake</build_type>
Expand Down
6 changes: 3 additions & 3 deletions simple_actions/utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
def get_action_name(action_type):
"""Return a cleaned up version of the action type."""
# Mildly hacky, but works for now
class_name_str = str(action_type) # e.g. <class 'action_tutorials_interfaces.action._fibonacci.Fibonacci'>
class_name = class_name_str.split("'")[1] # e.g. action_tutorials_interfaces.action._fibonacci.Fibonacci
class_name_str = str(action_type) # e.g. <class 'example_interfaces.action._fibonacci.Fibonacci'>
class_name = class_name_str.split("'")[1] # e.g. example_interfaces.action._fibonacci.Fibonacci
parts = class_name.split('.')
return '.'.join([parts[0], parts[1], parts[-1]]) # e.g. action_tutorials_interfaces.action.Fibonacci
return '.'.join([parts[0], parts[1], parts[-1]]) # e.g. example_interfaces.action.Fibonacci
6 changes: 3 additions & 3 deletions test/complex_setup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,12 @@
#include <gtest/gtest.h>
#include <simple_actions/simple_client.hpp>
#include <simple_actions/simple_server.hpp>
#include <action_tutorials_interfaces/action/fibonacci.hpp>
#include <example_interfaces/action/fibonacci.hpp>

#include <action_tutorials_interfaces/action/fibonacci.hpp>
#include <example_interfaces/action/fibonacci.hpp>
#include <simple_actions/simple_client.hpp>

using Fibonacci = action_tutorials_interfaces::action::Fibonacci;
using Fibonacci = example_interfaces::action::Fibonacci;

class TestComplexSetup : public ::testing::Test
{
Expand Down
10 changes: 5 additions & 5 deletions test/smoke.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,27 +37,27 @@
#include <gtest/gtest.h>
#include <simple_actions/simple_client.hpp>
#include <simple_actions/simple_server.hpp>
#include <action_tutorials_interfaces/action/fibonacci.hpp>
#include <example_interfaces/action/fibonacci.hpp>
using namespace std::chrono_literals;

bool execute(const action_tutorials_interfaces::action::Fibonacci::Goal&,
action_tutorials_interfaces::action::Fibonacci::Result&)
bool execute(const example_interfaces::action::Fibonacci::Goal&,
example_interfaces::action::Fibonacci::Result&)
{
return false;
}

TEST(Smoke, clientTest)
{
rclcpp::Node::SharedPtr node = std::make_shared<rclcpp::Node>("client_demo");
simple_actions::SimpleActionClient<action_tutorials_interfaces::action::Fibonacci> client(node, "fibonacci", false);
simple_actions::SimpleActionClient<example_interfaces::action::Fibonacci> client(node, "fibonacci", false);
EXPECT_FALSE(client.waitForServer(1s));
EXPECT_FALSE(client.getLatestResultCode());
}

TEST(Smoke, serverTest)
{
rclcpp::Node::SharedPtr node = std::make_shared<rclcpp::Node>("server_demo");
simple_actions::SimpleActionServer<action_tutorials_interfaces::action::Fibonacci> server(
simple_actions::SimpleActionServer<example_interfaces::action::Fibonacci> server(
node, "fibonacci", std::bind(&execute, std::placeholders::_1, std::placeholders::_2));
}

Expand Down