Skip to main content

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​

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)

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
)