机器人CPP编程基础-01第一个程序Hello World

很多课程先讲C/C++或者一些其他编程课,称之为基础课程。然后到本科高年级进行机器人专业课学习,这样时间损失非常大,效率非常低。

C++/单片机/嵌入式/ROS等这些编程基础可以合并到一门课中进行实现,这些素材已经迭代三轮以上,全部公开,需要可以参考,不需要,我就当写给自己的^_^感谢大家一直以来的帮助、支持和鼓励。

html 复制代码
https://www.lanqiao.cn/courses/854

适用于

  1. C++ 11 14 17 20......
  2. Arduino UNO DUE ESP8266 ESP32......
  3. ARM......
  4. ROS1 kinetic melodic noetic......
  5. ROS2 foxy humble......

素材只公开部分,主要原因是内容太多......


C++

cpp 复制代码
#include<iostream>
using namespace std;

main()
{
    cout<<"Hello World !";
}

这是一个使用C++语言编写的简单的程序。让我用中文为你详细解释一下:

首先,#include<iostream>是一个预处理指令,告诉编译器在程序运行之前要包含iostream文件。iostream文件包含了我们需要进行输入/输出操作的函数和对象。

然后,using namespace std;告诉编译器我们打算使用std命名空间。这是因为iostream文件中的函数和对象都在std命名空间中。

接下来是main()函数,这是C++程序的入口点。当你运行程序时,main函数就会被调用。

在main函数中,我们使用cout来输出一条消息,即"Hello World !"。cout是一个流对象,它表示标准输出(通常是显示器)。在这里,我们使用cout对象来发送一个字符串(即"Hello World !")到标准输出。

总的来说,这个程序的作用就是输出一条"Hello World !"的消息。


Arduino

在Arduino IDE中,使用C++编程语言,你需要使用Serial.print()Serial.println()函数来输出到串行端口,而不是cout。此外,Arduino IDE不支持using namespace std;,因此你需要使用完整的标准库名称。

以下是修改后的代码:

cpp 复制代码
#include <iostream>  
  
int main()  
{  
    Serial.print("Hello World !");  
    return 0;  
}

注意:该代码在Arduino IDE中可能无法直接运行。Arduino IDE主要用于微控制器编程,它与标准的C++编译器有所不同。要在Arduino IDE中打印"Hello World!",你可以使用以下代码:

cpp 复制代码
void setup() {  
  Serial.begin(9600);  
}  
  
void loop() {  
  Serial.println("Hello World!");  
  delay(1000);  
}

上述代码将在打开串行连接后立即打印"Hello World!",然后等待1秒钟,并重复此过程。这是Arduino IDE中常见的串行通信方式。

M5ATOMS3基础01按键


ROS1

在ROS1中,你可以使用ROS_INFO函数来替代cout进行消息输出。下面是将代码改写为使用ROS_INFO的示例:

cpp 复制代码
#include <ros/ros.h>  
  
int main(int argc, char **argv)  
{  
    ros::init(argc, argv, "my_node");  
    ros::NodeHandle nh;  
  
    ROS_INFO("Hello World !");  
  
    return 0;  
}

在上述代码中,我们包含了ros/ros.h头文件,这是ROS1中的主要头文件。然后,我们使用ros::init函数初始化ROS节点,并创建一个节点句柄(ros::NodeHandle)。接下来,我们使用ROS_INFO函数输出"Hello World !"消息。

请注意,你需要将此代码与ROS1环境一起编译和运行,以确保正确地处理ROS的相关功能和消息传递。


ROS2

能否快速独立完成???

在ROS2中,你可以使用rclcpp库中的RCL_INFO宏来替代cout进行消息输出。下面是将代码改写为使用RCL_INFO宏的示例:

cpp 复制代码
#include <rclcpp/rclcpp.hpp>  
  
int main(int argc, char **argv)  
{  
    rclcpp::init(argc, argv);  
  
    rclcpp::Node::SharedPtr node = rclcpp::Node::make_shared("my_node");  
    rclcpp::Rate rate(1);  // 设置一个频率为1Hz的定时器  
  
    while (rclcpp::ok()) {  
        node->get_logger().info("Hello World !");  // 使用RCL_INFO宏输出消息  
        rate.sleep();  // 等待一段时间以保持1Hz的频率  
    }  
  
    rclcpp::shutdown();  // 关闭ROS节点  
  
    return 0;  
}

在上述代码中,我们首先包含了rclcpp/rclcpp.hpp头文件。然后,我们使用rclcpp::init函数初始化ROS节点。接下来,我们创建一个共享的节点句柄,并设置一个频率为1Hz的定时器。在循环中,我们使用RCL_INFO宏将"Hello World !"消息输出到ROS系统的日志中。然后,我们通过调用rate.sleep()来等待一段时间,以保持1Hz的频率。最后,我们使用rclcpp::shutdown()函数关闭ROS节点。

请注意,你需要将此代码与ROS2环境一起编译和运行,以确保正确地处理ROS的相关功能和消息传递。


ROS1 & Arduino

cpp 复制代码
#include <ros.h>
#include <std_msgs/String.h>

ros::NodeHandle nh;

std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);

char hello[13] = "hello world!";

void setup()
{
  nh.initNode();
  nh.advertise(chatter);
}

void loop()
{
  str_msg.data = hello;
  chatter.publish( &str_msg );
  nh.spinOnce();
  delay(1000);
}

这段代码是一个简单的ROS(Robot Operating System)节点,它使用C++编写。ROS是一个用于编写机器人软件的框架,它支持多种编程语言,包括C++、Python和Java等。

代码的主要功能是发布一个包含字符串"hello world!"的消息到名为"chatter"的ROS话题。让我们详细解释一下代码的各个部分:

  1. #include <ros.h>: 这是包含ROS框架的头文件。
  2. #include <std_msgs/String.h>: 这是包含标准消息类型(Standard Message Types)中字符串消息的头文件。在ROS中,消息是用于在节点之间传递数据的自定义数据类型。
  3. ros::NodeHandle nh;: 创建一个ROS节点句柄对象。节点句柄是用于与ROS系统进行交互的主要接口。
  4. std_msgs::String str_msg;: 创建一个字符串消息对象,该对象将用于发布消息。
  5. ros::Publisher chatter("chatter", &str_msg);: 创建一个发布者对象,该对象将用于发布消息到名为"chatter"的话题。
  6. char hello[13] = "hello world!";: 创建一个字符数组,存储字符串"hello world!"。
  7. void setup(): 定义一个名为"setup"的函数,该函数将在节点初始化时执行一次。
  8. nh.initNode();: 初始化节点。
  9. nh.advertise(chatter);: 宣布发布者,使节点开始监听名为"chatter"的话题,并准备发布消息。
  10. void loop(): 定义一个名为"loop"的函数,该函数将在节点运行时不断执行。
  11. str_msg.data = hello;: 将字符串"hello world!"赋值给消息对象的数据字段。
  12. chatter.publish( &str_msg );: 发布消息到"chatter"话题。
  13. nh.spinOnce();: 轮询一次消息队列,以接收来自其他节点的消息。
  14. delay(1000);: 延迟1秒钟,然后重复执行循环。

总体来说,这段代码创建了一个简单的ROS节点,它不断发布包含字符串"hello world!"的消息到名为"chatter"的话题。

M5ATOMS3基础03给ROS1发一个问候(rosserial)


ROS2 & Arduino

M5ATOMS3基础04给ROS2发一个问候(micro-ROS)


相关推荐
星汇极客15 小时前
【星汇极客】单片机竞赛之2024睿抗机器人大赛-火线速递赛道(持续更新)
stm32·单片机·嵌入式硬件·机器人
云卓科技1 天前
无人机之数据提取篇
科技·安全·机器人·无人机·制造
悲欢唯谁懂1 天前
FANUC机器人—PCDK
机器人
kuan_li_lyg1 天前
MATLAB - 机械臂手眼标定(眼在手内) - 估计安装在机器人上的移动相机的姿态
开发语言·人工智能·matlab·机器人·ros·机械臂·手眼标定
kuan_li_lyg2 天前
MATLAB - 机械臂手眼标定(眼在手外) - 估算固定相机相对于机器人基座的姿态
开发语言·人工智能·matlab·机器人·ros·机械臂·手眼标定
xwz小王子2 天前
CoRL 2024 麻省理工学院提出T3触觉Transformer,打破触觉感知的壁垒,重塑未来机器人
深度学习·机器人·transformer
敢敢のwings2 天前
经典文献阅读之--WiROS(用于机器人的WiFi感知工具箱)
机器人
black_blank2 天前
机器人跳跃问题
数据结构·算法·机器人
热心市民R先生2 天前
ros2 colcon build 构建后,install中的local_setup.bash 和setup.bash有什么区别
开发语言·机器人·bash
云卓科技3 天前
无人机之编队控制篇
科技·安全·机器人·无人机·制造