当前位置:   article > 正文

Franka机械臂代码学习——echo_robot_state.cpp例程_机器人手臂代码

机器人手臂代码

在第一次运行Franka机械臂的时候,FCI手册上让我们跑的就是echo_robot_state.cpp这个例程。这个例程主要目的是读取机械臂的各个状态,比如关节角之类的。下面我们就来解读一下这个例程:

  1. #include <iostream>
  2. // C++中的输入输出流库
  3. #include <franka/exception.h>
  4. // 包含用于异常处理的类
  5. #include <franka/robot.h>
  6. /**
  7. * @example echo_robot_state.cpp
  8. * 一个连续读取机械臂状态的例程
  9. */
  10. int main(int argc, char** argv) {
  11. if (argc != 2) {
  12. std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
  13. return -1;
  14. }
  15. try {
  16. // try模块中存放可能出现异常的代码,后面通常有一个或多个catch块
  17. franka::Robot robot(argv[1]);
  18. // 回调函数
  19. size_t count = 0; // size_t类型表示C/C++中任何对象所能达到的最大长度,无符号整数
  20. robot.read([&count](const franka::RobotState& robot_state)
  21. {
  22. // Printing to std::cout adds a delay. This is acceptable for a read loop such as this, but should not be done in a control loop.
  23. std::cout << robot_state << std::endl;
  24. return count++ < 100;
  25. });
  26. std::cout << "Done." << std::endl;
  27. } catch (franka::Exception const& e) { // catch跟在try后面捕获异常
  28. std::cout << e.what() << std::endl; // 抛出异常
  29. return -1; // return -1表示有异常信息,函数失败
  30. }
  31. return 0;
  32. }

franka::RobotState 结构体提供了机械臂的状态信息,主要包括三类:

  • 关节空间信息:如关节角度、角速度、关节力矩、估计出的外部力矩、碰撞/接触状态等。
  • 笛卡尔空间信息:末端参数、末端位置、速度、估计出的外部扭矩等。
  • 接口信号:最后一个控制信号和期望信号等。

对于一个简单的读取操作,可以使用 franka::Robot::readOnce 函数:

franka::RobotState state = robot.readOnce();

franka::Robot:;read 函数的定义如下:

void franka::Robot::read(std::function< bool(const RobotState &)> read_callback)

 实际上,读取依靠的是 franka::RobotState 结构体,即 franka::Robot::read 函数的输入参数。而该参数在 franka::Robot::control 函数中也有,用起来都是当作反映机器人当前状态信息的常量。因此,很多时候并不需要单独使用 franka::Robot::read 函数专门读取数据,在控制环中也可以读取。但是,如前所述,每个控制周期内留个程序执行的时间一般小于300微妙,对于上述例程中用count输出信息的操作在实际控制环路中要尽量避免,使用读取函数就可以接受。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/746913
推荐阅读
相关标签
  

闽ICP备14008679号