This code shows how to control a rover equipped with a Pixhawk connected to a computer that is runing this test. Communication between the computer and the Pixhawk is based on Mavlink using MAVSDK 3rd party.
#include <iostream>
#include <visp3/core/vpConfig.h>
#if defined(VISP_HAVE_MAVSDK) && ((__cplusplus >= 201703L) || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201703L))) \
&& defined(VISP_HAVE_THREADS)
#include <thread>
#include <visp3/robot/vpRobotMavsdk.h>
using std::chrono::seconds;
using std::this_thread::sleep_for;
void usage(const std::string &bin_name)
{
std::cerr << "Usage : " << bin_name << " <connection information>\n"
<< "Connection URL format should be :\n"
<< " - For TCP : tcp://[server_host][:server_port]\n"
<< " - For UDP : udp://[bind_host][:bind_port]\n"
<< " - For Serial : serial:///path/to/serial/dev[:baudrate]\n"
<< "For example, to connect to the simulator use URL: udp://:14540\n";
}
int main(int argc, char **argv)
{
#ifdef ENABLE_VISP_NAMESPACE
#endif
if (argc != 2) {
usage(argv[0]);
return EXIT_SUCCESS;
}
auto robot = vpRobotMavsdk(argv[1]);
if (!robot.setGPSGlobalOrigin(48.117266, -1.6777926, 40.0)) {
return EXIT_FAILURE;
}
std::cout << "Vehicle has flying capability: " << (robot.hasFlyingCapability() ? "yes" : "no") << std::endl;
robot.arm();
double delta_north = 1.;
double delta_east = 0.;
double delta_down = 0.;
double delta_yaw = 0.;
std::cout << "Move 1 meter north" << std::endl;;
robot.setPositionRelative(delta_north, delta_east, delta_down, delta_yaw);
frd_vel[0] = -0.3;
std::cout << "Go at 0.3m/s backward during 3 sec.\n";
std::cout << "Go at 0.3m/s forward and rotate 10 deg/s along yaw during 2 sec.\n";
frd_vel[0] = 0.3;
do {
robot.disarm();
return EXIT_SUCCESS;
}
#else
int main()
{
#ifndef VISP_HAVE_MAVSDK
std::cout << "\nThis example requires mavsdk library. You should install it, configure and rebuid ViSP.\n"
<< std::endl;
#endif
#if !((__cplusplus >= 201703L) || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201703L)))
std::cout
<< "\nThis example requires at least cxx17. You should enable cxx17 during ViSP configuration with cmake and "
"rebuild ViSP.\n"
<< std::endl;
#endif
return EXIT_SUCCESS;
}
#endif
Implementation of column vector and the associated operations.
static double rad(double deg)
void setVelocity(const vpRobot::vpControlFrameType frame, const vpColVector &vel) VP_OVERRIDE
VISP_EXPORT int wait(double t0, double t)
VISP_EXPORT void sleepMs(double t)
VISP_EXPORT double measureTimeMs()