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

举报
zhangrelay 发表于 2021/07/14 22:43:54 2021/07/14
【摘要】 前一篇,讲解了如何在屏幕或者两台电脑之间传输一段信息: https://zhangrelay.blog.csdn.net/article/details/116241480 C++的输入和输出(iostream): cincout 这都是使用“流”(stream)的方式实现。 >><< 对比,C语言中标准库函数(cstdio): scanfpr...

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

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

  • cin
  • cout

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

  • >>
  • <<

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

  • scanf
  • printf

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

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

引用别人的案例:

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

更酷的案例如下:


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

  • CppRobotics

后续会详细补充的。

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

有bug代码如下:

服务器端:


  
  1. #include <inttypes.h>
  2. #include <memory>
  3. #include "example_interfaces/srv/add_two_ints.hpp"
  4. #include "rclcpp/rclcpp.hpp"
  5. using AddTwoInts = example_interfaces::srv::AddTwoInts;
  6. rclcpp::Node::SharedPtr g_node = nullptr;
  7. void handle_service(
  8. const std::shared_ptr<rmw_request_id_t> request_header,
  9. const std::shared_ptr<AddTwoInts::Request> request,
  10. const std::shared_ptr<AddTwoInts::Response> response)
  11. {
  12. (void)request_header;
  13. RCLCPP_INFO(
  14. g_node->get_logger(),
  15. "分别获取两个整数 %" PRId64 " + %" PRId64, request->a, request->b);
  16. response->sum = request->a + request->b;
  17. }
  18. int main(int argc, char ** argv)
  19. {
  20. rclcpp::init(argc, argv);
  21. g_node = rclcpp::Node::make_shared("minimal_service");
  22. auto server = g_node->create_service<AddTwoInts>("add_two_ints", handle_service);
  23. rclcpp::spin(g_node);
  24. rclcpp::shutdown();
  25. g_node = nullptr;
  26. return 0;
  27. }

客户端:


  
  1. #include <chrono>
  2. #include <cinttypes>
  3. #include <memory>
  4. #include "example_interfaces/srv/add_two_ints.hpp"
  5. #include "rclcpp/rclcpp.hpp"
  6. using AddTwoInts = example_interfaces::srv::AddTwoInts;
  7. int main(int argc, char * argv[])
  8. {
  9. rclcpp::init(argc, argv);
  10. auto node = rclcpp::Node::make_shared("minimal_client");
  11. auto client = node->create_client<AddTwoInts>("add_two_ints");
  12. while (!client->wait_for_service(std::chrono::seconds(1))) {
  13. if (!rclcpp::ok()) {
  14. RCLCPP_ERROR(node->get_logger(), "客户端在等待服务出现时中断.");
  15. return 1;
  16. }
  17. RCLCPP_INFO(node->get_logger(), "正在等待服务启动...");
  18. }
  19. auto request = std::make_shared<AddTwoInts::Request>();
  20. request->a = 41;
  21. request->b = 1;
  22. auto result_future = client->async_send_request(request);
  23. if (rclcpp::spin_until_future_complete(node, result_future) !=
  24. rclcpp::FutureReturnCode::SUCCESS)
  25. {
  26. RCLCPP_ERROR(node->get_logger(), "服务调用失败 :(");
  27. return 1;
  28. }
  29. auto result = result_future.get();
  30. RCLCPP_INFO(
  31. node->get_logger(), "结果 %" PRId64 " + %" PRId64 " = %" PRId64,
  32. request->a, request->b, result->sum);
  33. rclcpp::shutdown();
  34. return 0;
  35. }

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

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


 

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/116449478

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。