前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器人编程趣味实践03-运算(+ - × ÷)

机器人编程趣味实践03-运算(+ - × ÷)

作者头像
zhangrelay
发布2021-12-02 12:31:28
3920
发布2021-12-02 12:31:28
举报
文章被收录于专栏:机器人课程与技术

前一篇,讲解了如何在屏幕或者两台电脑之间传输一段信息:

C++的输入和输出(iostream):

  • cin
  • cout

这都是使用“流”(stream)的方式实现。

  • <<

对比,C语言中标准库函数(cstdio):

  • scanf
  • printf

使用scanf比cin效率高,速度快,思考为什么?

小贴士:命令行终端最绚丽的效果能达到什么样的程度呢?

引用别人的案例:

动态字符是最基本的效果,需要比运算更复杂的程序,下一节详细介绍;

更酷的案例如下:

C++的运算除了+ - × ÷还包括++、--;类型转换;并且提供了数学函数cmath。关于机器人的案例可以参考:

  • CppRobotics

后续会详细补充的。

  • win端出现乱码,由于中文字符导致,如何修正
  • linux端无法获取具体数值,而是采用程序初值运算

有bug代码如下:

服务器端:

代码语言:javascript
复制
#include <inttypes.h>
#include <memory>
#include "example_interfaces/srv/add_two_ints.hpp"
#include "rclcpp/rclcpp.hpp"

using AddTwoInts = example_interfaces::srv::AddTwoInts;
rclcpp::Node::SharedPtr g_node = nullptr;

void handle_service(
  const std::shared_ptr<rmw_request_id_t> request_header,
  const std::shared_ptr<AddTwoInts::Request> request,
  const std::shared_ptr<AddTwoInts::Response> response)
{
  (void)request_header;
  RCLCPP_INFO(
    g_node->get_logger(),
    "分别获取两个整数 %" PRId64 " + %" PRId64, request->a, request->b);
  response->sum = request->a + request->b;
}

int main(int argc, char ** argv)
{
  rclcpp::init(argc, argv);
  g_node = rclcpp::Node::make_shared("minimal_service");
  auto server = g_node->create_service<AddTwoInts>("add_two_ints", handle_service);
  rclcpp::spin(g_node);
  rclcpp::shutdown();
  g_node = nullptr;
  return 0;
}

客户端:

代码语言:javascript
复制
#include <chrono>
#include <cinttypes>
#include <memory>
#include "example_interfaces/srv/add_two_ints.hpp"
#include "rclcpp/rclcpp.hpp"

using AddTwoInts = example_interfaces::srv::AddTwoInts;

int main(int argc, char * argv[])
{
  rclcpp::init(argc, argv);
  auto node = rclcpp::Node::make_shared("minimal_client");
  auto client = node->create_client<AddTwoInts>("add_two_ints");
  while (!client->wait_for_service(std::chrono::seconds(1))) {
    if (!rclcpp::ok()) {
      RCLCPP_ERROR(node->get_logger(), "客户端在等待服务出现时中断.");
      return 1;
    }
    RCLCPP_INFO(node->get_logger(), "正在等待服务启动...");
  }
  auto request = std::make_shared<AddTwoInts::Request>();
  request->a = 41;
  request->b = 1;
  auto result_future = client->async_send_request(request);
  if (rclcpp::spin_until_future_complete(node, result_future) !=
    rclcpp::FutureReturnCode::SUCCESS)
  {
    RCLCPP_ERROR(node->get_logger(), "服务调用失败 :(");
    return 1;
  }
  auto result = result_future.get();
  RCLCPP_INFO(
    node->get_logger(), "结果 %" PRId64 " + %" PRId64 " = %" PRId64,
    request->a, request->b, result->sum);
  rclcpp::shutdown();
  return 0;
}

当然,嵌入式设备可以通过串口、蓝牙、wifi等与主机通信完成调用。

运算量大的程序在主机运行,嵌入式设备负责数据采集。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/05/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档