机器人程序设计入门(C++/Arduino/ROS)(转载2020版)

本文主要介绍机器人程序设计入门的安装和配置,并通过简洁的示例演示基于Arduino和ROS构建的机器人物联网系统雏形。Arduino和ROS都支持使用C++进行程序设计。

机器人程序设计入门(C++/Arduino/ROS)

ROS+Arduino

安装

推荐使用安装环境为windows10,当然也支持MacOS和Linux,为保证通用性,以Windows环境为默认配置。

机器人程序设计入门(C++/Arduino/ROS)

UNO

1.1 下载Arduino并安装

目前最新版本为arduino-1.8.10-windows,双击下载的安装包(管理员权限)。

机器人程序设计入门(C++/Arduino/ROS)

同意协议

机器人程序设计入门(C++/Arduino/ROS)

全选组件

机器人程序设计入门(C++/Arduino/ROS)

安装目录

如果需要更改,在此步骤进行修改,然后点击安装:

机器人程序设计入门(C++/Arduino/ROS)

等待安装结束

机器人程序设计入门(C++/Arduino/ROS)

点击关闭,安装完成

双击桌面Arduino图标,就可以打开IDE进行程序设计了。

机器人程序设计入门(C++/Arduino/ROS)

Arduino IDE

1.2 安装ROS

机器人操作系统ROS,可以被理解为一个特定的应用于机器人领域的物联网(IoT)系统,很多知识点和技能相似相通,学习并掌握这个工具非常重要。ROS接口丰富,并可与OpenCV,OpenAI等多种第三方开源工具结合,开发出新奇实用的各类机器人。

Windows的ROS1&2需要64位Windows 10桌面版或Windows 10 IoT物联网企业版。

  • 在继续操作之前,请清理并备份c:\opt下的所有现有数据。
  • c:\opt是指定的安装位置。当前未启用重定位。不支持安装在其他位置!!!
  • 请确保C:\ 驱动器上有10 GB的可用空间用于安装和开发。
  • 安装Visual Studio 2019
  • 安装软件包管理器
  • 安装Git:choco upgrade git -y
  • 安装ROS 1 Melodic或ROS 2 Dashing,这里以ROS 1为例。
choco source add -n=ros-win -s="https://roswin.azurewebsites.net/api/v2" --priority=1
choco upgrade ros-melodic-desktop_full -y --execution-timeout=0

创建ROS启动快捷方式:

C:\Windows\System32\cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat" -arch=amd64 -host_arch=amd64 && c:\opt\ros\melodic\\x64\setup.bat

更新ROS:

choco upgrade ros-melodic-desktop_full -y --execution-timeout=0

测试

2.1 Arduino程序

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

如上所示,是Arduino闪烁13号引脚LED灯程序

机器人程序设计入门(C++/Arduino/ROS)

Uno

编译并上传到Arduino:

机器人程序设计入门(C++/Arduino/ROS)

LED13灯闪烁

一切正常!

2.2 ROS

启动roscore,然后启动turtlesim。

机器人程序设计入门(C++/Arduino/ROS)

rosrun

机器人程序设计入门(C++/Arduino/ROS)

turtlesim

一切正常!

示例

Arduino的A0/A1引脚分别接滑动变阻器和光敏电阻。使用如下程序,将数值发送到电脑端:

打开Arduino IDE,选择工具->管理库……

机器人程序设计入门(C++/Arduino/ROS)

rosserial库

然后,打开文件->示例->第三方库示例->Rosserial Arduino Library->ADC:

/* 
 * rosserial ADC Example
 * 
 * This is a poor man's Oscilloscope.  It does not have the sampling 
 * rate or accuracy of a commerical scope, but it is great to get
 * an analog value into ROS in a pinch.
 */

#if (ARDUINO >= 100)
 #include <Arduino.h>
#else
 #include <WProgram.h>
#endif
#include <ros.h>
#include <rosserial_arduino/Adc.h>

ros::NodeHandle nh;

rosserial_arduino::Adc adc_msg;
ros::Publisher p("adc", &adc_msg);

void setup()
{ 
  pinMode(13, OUTPUT);
  nh.initNode();

  nh.advertise(p);
}

//We average the analog reading to elminate some of the noise
int averageAnalog(int pin){
  int v=0;
  for(int i=0; i<4; i++) v+= analogRead(pin);
  return v/4;
}

long adc_timer;

void loop()
{
  adc_msg.adc0 = averageAnalog(0);
  adc_msg.adc1 = averageAnalog(1);
  adc_msg.adc2 = averageAnalog(2);
  adc_msg.adc3 = averageAnalog(3);
  adc_msg.adc4 = averageAnalog(4);
  adc_msg.adc5 = averageAnalog(5);
    
  p.publish(&adc_msg);

  nh.spinOnce();
}

这段代码的作用是将Arduino全部AD口数据以ROS消息的格式发送到电脑端,编译上传。

这里,已经知道Arduino下载程序端口为COM3,开启roscore后,启动如下命令:

rosrun rosserial_python serial_node.py COM3

机器人程序设计入门(C++/Arduino/ROS)

开启rosserial_python使用COM3口

使用rostopic list,查看一下:

机器人程序设计入门(C++/Arduino/ROS)

/adc

将主题/adc数值显示出来:

机器人程序设计入门(C++/Arduino/ROS)

模拟量数据

使用rqt_plot:

机器人程序设计入门(C++/Arduino/ROS)

传感器数据的曲线

总结

本文实现在windows10系统下,进行Arduino和ROS编程的安装和配置,并将示例C++程序进行演示,将单片机传感器数据发送到电脑端并用绘图工具制作出数值曲线,更多细节与详细内容,将在后续内容中,逐步介绍。

发布了472 篇原创文章 · 获赞 1300 · 访问量 214万+

猜你喜欢

转载自blog.csdn.net/ZhangRelay/article/details/104668711