Integration
Adding as a Dependency​
package.xml
<depend>studica_control</depend>
CMakeLists.txt
find_package(studica_control REQUIRED)
rosidl_get_typesupport_target(cpp_typesupport_target
"studica_control" "rosidl_typesupport_cpp")
target_link_libraries(your_node
"${cpp_typesupport_target}"
)
ament_target_dependencies(your_node
studica_control
rclcpp
)
Calling Services​
- Python
- C++
from studica_control.srv import SetData
client = node.create_client(SetData, 'titan/titan_cmd')
client.wait_for_service()
req = SetData.Request()
req.params = 'set_speed'
req.initparams.n_encoder = 0
req.initparams.speed = 0.5
future = client.call_async(req)
rclpy.spin_until_future_complete(node, future)
print(future.result().message)
#include "studica_control/srv/set_data.hpp"
auto client = node->create_client<studica_control::srv::SetData>(
"titan/titan_cmd");
client->wait_for_service();
auto request = std::make_shared<studica_control::srv::SetData::Request>();
request->params = "set_speed";
request->initparams.n_encoder = 0;
request->initparams.speed = 0.5f;
auto future = client->async_send_request(request);
Subscribing to Sensor Data​
from sensor_msgs.msg import Imu, Range
from std_msgs.msg import Float64, Float32
# IMU
node.create_subscription(Imu, 'imu', lambda msg: ..., 10)
# Titan encoders
node.create_subscription(Float64, '/titan0/m_0/encoder', lambda msg: ..., 10)
node.create_subscription(Float64, '/titan0/m_0/rpm', lambda msg: ..., 10)
node.create_subscription(Float64, '/titan0/m_2/angle', lambda msg: ..., 10)
# Range sensors
node.create_subscription(Range, '/front/range', lambda msg: ..., 10)
# Cobra reflectance
node.create_subscription(Float32, '/line_sensor/ch_0', lambda msg: ..., 10)
Using a Custom params.yaml​
To load your own config file from a launch file:
from launch_ros.actions import Node
from ament_index_python.packages import get_package_share_directory
import os
params_file = os.path.join(
get_package_share_directory('your_package'), 'config', 'params.yaml')
Node(
package='studica_control',
executable='manual_composition',
name='control_server',
output='screen',
parameters=[params_file],
)
Install the config directory in CMakeLists.txt:
install(DIRECTORY config/
DESTINATION share/${PROJECT_NAME}/config
)