Repository Summary
Checkout URI | https://github.com/THA-Embedded-Systems-Lab/soar_ros.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-04-25 |
Dev Status | MAINTAINED |
CI status | No Continuous Integration |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Packages
Name | Version |
---|---|
soar_ros | 0.0.2 |
README
soar_ros: A ROS 2 Interface for Soar
This ROS2 package provides an interface for the Soar cognitive architecture by creating wrappers for ROS2 messages and handling the Soar kernel in a continuos mode.
Soar is a cognitive architecture developed at the University of Michigan. It is used in the field of cognitive robotics in different projects, e.g. a drone or a robot. However, the integration of Soar and ROS 2 is currently difficult for complex projects, which include multiple publishers, subscribers, services or clients. The main limitation orginates from the synchronous callback model used by Soar which inspired the creation of this wrapper. A detailed explanation about the reason for the development of the package can be read in the software architecture.
The package relies on a forked version of Soar. The major changes
include a cmake
-based build instead of scons
and removal of SWIG
language interfaces. For a detailed comparison have a look at the commit
history of the fork.
Features
The library is developed targeting ROS 2 Humble on Ubuntu 22.04. Other configurations were not tested. It provides
- Non blocking Soar kernel
- Publisher
- Subscriber
- Service
- Client
The following features are not supported, yet.
- Action Server and Client
- Multiple Soar agents
Definition and description of the public API
The API documentation is generated via rosdoc2, cf. how to build documentation.
Examples
The following examples are an extract of the test cases in test/test_soar_ros.cpp.
Publisher
The soar_ros::Publisher
extends the ROS Publisher
so the user only
needs to define how data are converted between ROS data types and Soar
data types.
class TestOutput : public soar_ros::Publisher<std_msgs::msg::String>
{
public:
TestOutput(sml::Agent * agent, rclcpp::Node::SharedPtr node, const std::string & topic)
: Publisher<std_msgs::msg::String>(agent, node, topic) {}
~TestOutput() {}
std_msgs::msg::String parse(sml::Identifier * id) override
{
std_msgs::msg::String msg;
msg.data = id->GetParameterValue("data");
std::cout << id->GetCommandName() << " " << msg.data << std::endl;
return msg;
}
};
Service
In the following example, the ROS2 example AddTwoInts
is implemented.
Soar adds two integers and sends the result as a ROS2 Service, based on
the soar_ros::Service
class. The code is from
test/test_soar_ros.cpp.
- ``` cpp
- class TestService : public soar_ros::Service<example_interfaces::srv::AddTwoInts>
- {
- public:
- TestService(sml::Agent * agent, rclcpp::Node::SharedPtr node, const std::string & topic)
- Service<example_interfaces::srv::AddTwoInts>(agent, node, topic) {} ~TestService() {}
example_interfaces::srv::AddTwoInts::Response::SharedPtr parse(sml::Identifier * id) override { example_interfaces::srv::AddTwoInts::Response::SharedPtr response = std::make_shared<example_interfaces::srv::AddTwoInts::Response>(); auto sum = id->GetParameterValue(“sum”); int32_t num = std::stoi(sum); response.get()->sum = num; RCLCPP_INFO(m_node->get_logger(), “Computed: Sum=%ld”, response.get()->sum);
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
You are very welcome to contribute to the project by creating issues or submitting a pull-request. Please follow standard contributing guidelines, for instance (non extensive list):
- Check for existing issues before creating a new one
- Check with maintainers before starting to work on an issue or submit a PR in order to prevent duplicate work
- Commit messages correspond to the changes
Mandatory Checks
The changelog is generated based on commit messages and therefore the conventional commit style is enforced. Please ensure that the commit messages are formatted accordingly.
There is a pre-commit file to ensure compliance if you prefer to use a tool.
Code Style
The project follows the ROS2 coding style.
Repository Summary
Checkout URI | https://github.com/THA-Embedded-Systems-Lab/soar_ros.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-04-25 |
Dev Status | MAINTAINED |
CI status | No Continuous Integration |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Packages
Name | Version |
---|---|
soar_ros | 0.0.2 |
README
soar_ros: A ROS 2 Interface for Soar
This ROS2 package provides an interface for the Soar cognitive architecture by creating wrappers for ROS2 messages and handling the Soar kernel in a continuos mode.
Soar is a cognitive architecture developed at the University of Michigan. It is used in the field of cognitive robotics in different projects, e.g. a drone or a robot. However, the integration of Soar and ROS 2 is currently difficult for complex projects, which include multiple publishers, subscribers, services or clients. The main limitation orginates from the synchronous callback model used by Soar which inspired the creation of this wrapper. A detailed explanation about the reason for the development of the package can be read in the software architecture.
The package relies on a forked version of Soar. The major changes
include a cmake
-based build instead of scons
and removal of SWIG
language interfaces. For a detailed comparison have a look at the commit
history of the fork.
Features
The library is developed targeting ROS 2 Humble on Ubuntu 22.04. Other configurations were not tested. It provides
- Non blocking Soar kernel
- Publisher
- Subscriber
- Service
- Client
The following features are not supported, yet.
- Action Server and Client
- Multiple Soar agents
Definition and description of the public API
The API documentation is generated via rosdoc2, cf. how to build documentation.
Examples
The following examples are an extract of the test cases in test/test_soar_ros.cpp.
Publisher
The soar_ros::Publisher
extends the ROS Publisher
so the user only
needs to define how data are converted between ROS data types and Soar
data types.
class TestOutput : public soar_ros::Publisher<std_msgs::msg::String>
{
public:
TestOutput(sml::Agent * agent, rclcpp::Node::SharedPtr node, const std::string & topic)
: Publisher<std_msgs::msg::String>(agent, node, topic) {}
~TestOutput() {}
std_msgs::msg::String parse(sml::Identifier * id) override
{
std_msgs::msg::String msg;
msg.data = id->GetParameterValue("data");
std::cout << id->GetCommandName() << " " << msg.data << std::endl;
return msg;
}
};
Service
In the following example, the ROS2 example AddTwoInts
is implemented.
Soar adds two integers and sends the result as a ROS2 Service, based on
the soar_ros::Service
class. The code is from
test/test_soar_ros.cpp.
- ``` cpp
- class TestService : public soar_ros::Service<example_interfaces::srv::AddTwoInts>
- {
- public:
- TestService(sml::Agent * agent, rclcpp::Node::SharedPtr node, const std::string & topic)
- Service<example_interfaces::srv::AddTwoInts>(agent, node, topic) {} ~TestService() {}
example_interfaces::srv::AddTwoInts::Response::SharedPtr parse(sml::Identifier * id) override { example_interfaces::srv::AddTwoInts::Response::SharedPtr response = std::make_shared<example_interfaces::srv::AddTwoInts::Response>(); auto sum = id->GetParameterValue(“sum”); int32_t num = std::stoi(sum); response.get()->sum = num; RCLCPP_INFO(m_node->get_logger(), “Computed: Sum=%ld”, response.get()->sum);
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
You are very welcome to contribute to the project by creating issues or submitting a pull-request. Please follow standard contributing guidelines, for instance (non extensive list):
- Check for existing issues before creating a new one
- Check with maintainers before starting to work on an issue or submit a PR in order to prevent duplicate work
- Commit messages correspond to the changes
Mandatory Checks
The changelog is generated based on commit messages and therefore the conventional commit style is enforced. Please ensure that the commit messages are formatted accordingly.
There is a pre-commit file to ensure compliance if you prefer to use a tool.
Code Style
The project follows the ROS2 coding style.
Repository Summary
Checkout URI | https://github.com/THA-Embedded-Systems-Lab/soar_ros.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-04-25 |
Dev Status | MAINTAINED |
CI status | No Continuous Integration |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Packages
Name | Version |
---|---|
soar_ros | 0.0.2 |
README
soar_ros: A ROS 2 Interface for Soar
This ROS2 package provides an interface for the Soar cognitive architecture by creating wrappers for ROS2 messages and handling the Soar kernel in a continuos mode.
Soar is a cognitive architecture developed at the University of Michigan. It is used in the field of cognitive robotics in different projects, e.g. a drone or a robot. However, the integration of Soar and ROS 2 is currently difficult for complex projects, which include multiple publishers, subscribers, services or clients. The main limitation orginates from the synchronous callback model used by Soar which inspired the creation of this wrapper. A detailed explanation about the reason for the development of the package can be read in the software architecture.
The package relies on a forked version of Soar. The major changes
include a cmake
-based build instead of scons
and removal of SWIG
language interfaces. For a detailed comparison have a look at the commit
history of the fork.
Features
The library is developed targeting ROS 2 Humble on Ubuntu 22.04. Other configurations were not tested. It provides
- Non blocking Soar kernel
- Publisher
- Subscriber
- Service
- Client
The following features are not supported, yet.
- Action Server and Client
- Multiple Soar agents
Definition and description of the public API
The API documentation is generated via rosdoc2, cf. how to build documentation.
Examples
The following examples are an extract of the test cases in test/test_soar_ros.cpp.
Publisher
The soar_ros::Publisher
extends the ROS Publisher
so the user only
needs to define how data are converted between ROS data types and Soar
data types.
class TestOutput : public soar_ros::Publisher<std_msgs::msg::String>
{
public:
TestOutput(sml::Agent * agent, rclcpp::Node::SharedPtr node, const std::string & topic)
: Publisher<std_msgs::msg::String>(agent, node, topic) {}
~TestOutput() {}
std_msgs::msg::String parse(sml::Identifier * id) override
{
std_msgs::msg::String msg;
msg.data = id->GetParameterValue("data");
std::cout << id->GetCommandName() << " " << msg.data << std::endl;
return msg;
}
};
Service
In the following example, the ROS2 example AddTwoInts
is implemented.
Soar adds two integers and sends the result as a ROS2 Service, based on
the soar_ros::Service
class. The code is from
test/test_soar_ros.cpp.
- ``` cpp
- class TestService : public soar_ros::Service<example_interfaces::srv::AddTwoInts>
- {
- public:
- TestService(sml::Agent * agent, rclcpp::Node::SharedPtr node, const std::string & topic)
- Service<example_interfaces::srv::AddTwoInts>(agent, node, topic) {} ~TestService() {}
example_interfaces::srv::AddTwoInts::Response::SharedPtr parse(sml::Identifier * id) override { example_interfaces::srv::AddTwoInts::Response::SharedPtr response = std::make_shared<example_interfaces::srv::AddTwoInts::Response>(); auto sum = id->GetParameterValue(“sum”); int32_t num = std::stoi(sum); response.get()->sum = num; RCLCPP_INFO(m_node->get_logger(), “Computed: Sum=%ld”, response.get()->sum);
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
You are very welcome to contribute to the project by creating issues or submitting a pull-request. Please follow standard contributing guidelines, for instance (non extensive list):
- Check for existing issues before creating a new one
- Check with maintainers before starting to work on an issue or submit a PR in order to prevent duplicate work
- Commit messages correspond to the changes
Mandatory Checks
The changelog is generated based on commit messages and therefore the conventional commit style is enforced. Please ensure that the commit messages are formatted accordingly.
There is a pre-commit file to ensure compliance if you prefer to use a tool.
Code Style
The project follows the ROS2 coding style.
Repository Summary
Checkout URI | https://github.com/THA-Embedded-Systems-Lab/soar_ros.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-04-25 |
Dev Status | MAINTAINED |
CI status | No Continuous Integration |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Packages
Name | Version |
---|---|
soar_ros | 0.0.2 |
README
soar_ros: A ROS 2 Interface for Soar
This ROS2 package provides an interface for the Soar cognitive architecture by creating wrappers for ROS2 messages and handling the Soar kernel in a continuos mode.
Soar is a cognitive architecture developed at the University of Michigan. It is used in the field of cognitive robotics in different projects, e.g. a drone or a robot. However, the integration of Soar and ROS 2 is currently difficult for complex projects, which include multiple publishers, subscribers, services or clients. The main limitation orginates from the synchronous callback model used by Soar which inspired the creation of this wrapper. A detailed explanation about the reason for the development of the package can be read in the software architecture.
The package relies on a forked version of Soar. The major changes
include a cmake
-based build instead of scons
and removal of SWIG
language interfaces. For a detailed comparison have a look at the commit
history of the fork.
Features
The library is developed targeting ROS 2 Humble on Ubuntu 22.04. Other configurations were not tested. It provides
- Non blocking Soar kernel
- Publisher
- Subscriber
- Service
- Client
The following features are not supported, yet.
- Action Server and Client
- Multiple Soar agents
Definition and description of the public API
The API documentation is generated via rosdoc2, cf. how to build documentation.
Examples
The following examples are an extract of the test cases in test/test_soar_ros.cpp.
Publisher
The soar_ros::Publisher
extends the ROS Publisher
so the user only
needs to define how data are converted between ROS data types and Soar
data types.
class TestOutput : public soar_ros::Publisher<std_msgs::msg::String>
{
public:
TestOutput(sml::Agent * agent, rclcpp::Node::SharedPtr node, const std::string & topic)
: Publisher<std_msgs::msg::String>(agent, node, topic) {}
~TestOutput() {}
std_msgs::msg::String parse(sml::Identifier * id) override
{
std_msgs::msg::String msg;
msg.data = id->GetParameterValue("data");
std::cout << id->GetCommandName() << " " << msg.data << std::endl;
return msg;
}
};
Service
In the following example, the ROS2 example AddTwoInts
is implemented.
Soar adds two integers and sends the result as a ROS2 Service, based on
the soar_ros::Service
class. The code is from
test/test_soar_ros.cpp.
- ``` cpp
- class TestService : public soar_ros::Service<example_interfaces::srv::AddTwoInts>
- {
- public:
- TestService(sml::Agent * agent, rclcpp::Node::SharedPtr node, const std::string & topic)
- Service<example_interfaces::srv::AddTwoInts>(agent, node, topic) {} ~TestService() {}
example_interfaces::srv::AddTwoInts::Response::SharedPtr parse(sml::Identifier * id) override { example_interfaces::srv::AddTwoInts::Response::SharedPtr response = std::make_shared<example_interfaces::srv::AddTwoInts::Response>(); auto sum = id->GetParameterValue(“sum”); int32_t num = std::stoi(sum); response.get()->sum = num; RCLCPP_INFO(m_node->get_logger(), “Computed: Sum=%ld”, response.get()->sum);
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
You are very welcome to contribute to the project by creating issues or submitting a pull-request. Please follow standard contributing guidelines, for instance (non extensive list):
- Check for existing issues before creating a new one
- Check with maintainers before starting to work on an issue or submit a PR in order to prevent duplicate work
- Commit messages correspond to the changes
Mandatory Checks
The changelog is generated based on commit messages and therefore the conventional commit style is enforced. Please ensure that the commit messages are formatted accordingly.
There is a pre-commit file to ensure compliance if you prefer to use a tool.
Code Style
The project follows the ROS2 coding style.