Doly C++ SDK v1.00
Loading...
Searching...
No Matches
ArmControl/main.cpp

Demonstrates:

#include <chrono>
#include <thread>
#include <spdlog/spdlog.h>
#include <ArmControl.h>
#include <ArmEvent.h>
#include <Helper.h>
void onArmComplete(uint16_t id, ArmSide side)
{
spdlog::info("Arm complete id={} side={}", id, (int)side);
}
void onArmError(uint16_t id, ArmSide side, ArmErrorType errorType)
{
spdlog::error("Arm error id={} side={} type={}",
id, (int)side, (int)errorType);
}
void onArmStateChange(ArmSide side, ArmState state)
{
spdlog::info("Arm state side={} state={}", (int)side, (int)state);
}
void onArmMovement(ArmSide side, float degreeChange)
{
spdlog::info("Arm movement side={} degreeChange={}", (int)side, degreeChange);
}
int main()
{
// Setup spdlog
spdlog::set_level(spdlog::level::info); // Set as needed
spdlog::flush_on(spdlog::level::trace); // flush everything
// *** IMPORTANT ***
// Stop doly service if running,
// otherwise instance of libraries cause conflict
spdlog::error("Doly service stop failed");
return -1;
}
// Read settings for servo calibration data, otherwise arm control won't work.
// one time read is sufficient for the lifetime of the application
int8_t res = Helper::readSettings();
if (res < 0)
{
spdlog::error("Read settings failed with code: {}", res);
return -1;
}
// get ArmControl version
spdlog::info("ArmControl Version:{:.3f}", ArmControl::getVersion());
// Register event listeners if needed
// Initialize ArmControl
if (ArmControl::init() < 0)
{
spdlog::error("ArmControl init failed");
return -2;
}
// Set arm angle (non-blocking)
ArmControl::setAngle(1, ArmSide::BOTH, 50, 90, false);
// Wait until done (simple polling example)
std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
// Get position of arms
// Position calculated based on servo potantiometer feedback,
// and may not be accurate due to mechanical slippage etc.
spdlog::info("Estimated Arm Positions:");
for (const auto& a : arms) {
spdlog::info(" Side:{} Angle:{}", (int)a.side, a.angle);
}
// Cleanup
return 0;
}
Public API for Doly arm motion control.
Event dispatcher API for the Doly ArmControl subsystem.
Shared helper utilities and common types used across the Doly SDK.
ArmState
High-level state of an arm operation.
Definition ArmEventListener.h:55
ArmSide
Which arm side an operation or event relates to.
Definition ArmEventListener.h:40
ArmErrorType
Error categories reported by the arm subsystem.
Definition ArmEventListener.h:28
@ COMPLETED
Definition ArmEventListener.h:60
@ BOTH
Definition ArmEventListener.h:42
std::vector< ArmData > getCurrentAngle(ArmSide side)
Get the current angle(s) for the requested side(s).
int8_t setAngle(uint16_t id, ArmSide side, uint8_t speed, uint16_t angle, bool with_brake=false)
Command the arm to move to an angle.
int8_t dispose()
Dispose/stop the arm subsystem and release resources.
int8_t init()
Initialize the arm subsystem.
float getVersion()
Get SDK/library version.
ArmState getState(ArmSide side)
Get current operation state for a side.
void AddListenerOnStateChange(void(*onEvent)(ArmSide side, ArmState state))
Register a C-style callback for state changes.
void AddListenerOnComplete(void(*onEvent)(uint16_t id, ArmSide side))
Register a C-style callback for “command complete” events.
void AddListenerOnMovement(void(*onEvent)(ArmSide side, float degreeChange))
Register a C-style callback for movement notifications.
void RemoveListenerOnStateChange(void(*onEvent)(ArmSide side, ArmState state))
Remove a previously registered state-change callback.
void RemoveListenerOnComplete(void(*onEvent)(uint16_t id, ArmSide side))
Remove a previously registered “command complete” callback.
void AddListenerOnError(void(*onEvent)(uint16_t id, ArmSide side, ArmErrorType errorType))
Register a C-style callback for error events.
void RemoveListenerOnMovement(void(*onEvent)(ArmSide side, float degreeChange))
Remove a previously registered movement callback.
void RemoveListenerOnError(void(*onEvent)(uint16_t id, ArmSide side, ArmErrorType errorType))
Remove a previously registered error callback.
int8_t stopDolyService()
Stop the background Doly service (if running).
int8_t readSettings()
Read default settings from the platform settings file.