FAQ
Frequently asked questions.
General
Q: What’s the difference between RaisinClient and Direct Network?
A: RaisinClient is an example wrapper class for common use cases.
Direct Network uses the raisin_network library directly for more fine-grained control.
RaisinClient: Quick start, simple API
Direct Network: Custom services, advanced features
Q: Can I use it without GPS?
A: Yes. PCD map-based autonomous navigation works without GPS.
// PCD map based (no GPS required)
client.setMap("office.pcd", 0, 0, 0, 0, "office");
Waypoint("office", 5.0, 3.0); // Map coordinates
GPS requires a GPS module installed on the robot.
Q: Can I control multiple robots simultaneously?
A: Yes. Create separate RaisinClient instances for each robot.
raisin_sdk::RaisinClient client1("controller1");
raisin_sdk::RaisinClient client2("controller2");
client1.connect("robot1_id");
client2.connect("robot2_id");
Waypoints
Q: Why is the Waypoint frame important?
A: The frame specifies the coordinate system. The map_name set in setMap()
must match the Waypoint frame for the robot to navigate correctly.
// If map_name = "floor1"
client.setMap("map.pcd", 0, 0, 0, 0, "floor1");
// Waypoint must also use "floor1" frame
Waypoint("floor1", 10.0, 5.0); // ✓
// Using different frame won't work
Waypoint("map", 10.0, 5.0); // ✗
Q: How do I set up infinite patrol?
A: Set repetition to 0 or use startPatrol().
// Method 1
client.setWaypoints(waypoints, 0); // repetition = 0
// Method 2
client.startPatrol(waypoints);
Q: Can I add waypoints during patrol?
A: Yes. Use appendWaypoint().
// Add new waypoint to existing mission
client.appendWaypoint(raisin_sdk::Waypoint("my_map", 15.0, 10.0));
Control
Q: How do I switch between manual and autonomous control?
A: Use setManualControl() and setAutonomousControl().
// Manual control (joystick)
client.setManualControl();
// Autonomous control
client.setAutonomousControl();
client.setWaypoints(waypoints, 1);
Q: How do I emergency stop?
A: Use stopNavigation() to stop autonomous navigation.
// Stop autonomous navigation
client.stopNavigation();
For actual robot emergency stop, use the emergency stop button on the joystick.
Data
Q: What coordinate system is Odometry data in?
A: Map-based coordinates if a map is loaded, otherwise odom coordinates relative to start position.
Q: What is the PointCloud data format?
A: Provided as a vector of Point3D structs.
struct Point3D { float x, y, z; };
client.subscribePointCloud([](const std::vector<raisin_sdk::Point3D>& points) {
for (const auto& p : points) {
// Use p.x, p.y, p.z
}
});
Q: How do I check battery level?
A: Subscribe to battery information using subscribeRobotState().
client.subscribeRobotState([](const raisin_sdk::ExtendedRobotState& state) {
double percentage = 0.0;
if (state.max_voltage > state.min_voltage) {
percentage = (state.voltage - state.min_voltage) /
(state.max_voltage - state.min_voltage) * 100.0;
}
std::cout << "Battery: " << percentage << "%" << std::endl;
});
Compatibility
Q: Which robots are supported?
A: Supports the Raibo2 platform. Autonomy and Fast-LIO plugins must be loaded.
Q: Can I use it on Windows?
A: Currently only Ubuntu Linux is officially supported. Windows support is under consideration.
Q: Can I use it on ARM64 (Jetson, etc.)?
A: Yes. Both x86_64 and arm64 architectures are supported.