机器人控制器编程课程-教案03-进阶

先简要复习一下上次课的内容,主要介绍了一些理论上的知识,希望有一个宏观上的概念。

比如点-线-面-体,>感知<~~>控制<的维度需要匹配等。更多详细内容可以查看:

机器人感知-视觉部分:https://blog.csdn.net/ZhangRelay/article/details/81352622

并思考:二维空间导航与三维空间抓取操作的异同之处?

机器人的空间、时间和频率

同时可以回顾,信息传输的时间与频率的关系,各种维度的信息需要的数据带宽。

书中40页先讲述了数字IO,然后在54页讲解了模拟IO。这些都是arduino本身具备的功能。

串口的使用(67页),类似于点对点的网络,使得其可以与其他单片机或各种支持串口通信的设备交互信息。

时间控制函数也需要理解后再掌握其用法。


arduino是一款典型的开源IoT设备,课程本身只针对讲解C语言编程ROS接口

但是arduino玩法是非常多了(APP与API),下面简单列一下,有兴趣的小伙伴可以自己动手尝试起来:

全仿真:7 best Arduino simulators for PC to use today

课程重点讲解Proteus 8 + Arduino:

模拟输入调节LED闪烁时间

Matlab:完美支持,自主学习探索

Arduino Support from MATLAB

Python:Arduino-Python3-Command-API

arduino-python教程

JavaScript:http://johnny-five.io/

johnny-five

总之,目前主流的编程语言,都可以实现对Arduino直接或者间接代码调试!!!(ROS部分稍后详细介绍)

代码也不想写,可不可以呢?Scratch+Arduino,需要先安装插件

Chrome插件

这里需要注意,下图中间的arduino指示灯:

黄色-设备未连接

配置正确后,可以进行框图程序设计。

云端编程,免费的云端ROS学习体验环境可以参考如下链接:

https://www.shiyanlou.com/courses/854

arduino自然也提供了类似功能,不需要在本地安装arduino IDE:

create

 

原理示意图
连线示意图
编译程序并下载
下载成功!

C语言编程官方案例

1.基础知识 Basics

  • Analog Read Serial:读取电位计,将其状态输出到Arduino串行口监视器。
  • Bare Minimum:启动Arduino所需的最少代码。
  • Blink:打开和关闭LED。
  • Digital Read Serial:读取开关量,将状态发布到Arduino串行监视器。
  • Fade(呼吸灯):演示使用模拟输出实现渐变亮度的LED。
  • Read Analog Voltage:读取模拟输入并将电压发布到串口监视器。

2.数字量 Digital

3.模拟量 Analog

  • Analog In Out Serial:读取模拟输入引脚,输出结果,然后使用该数据调暗或增亮LED。
  • Analog Input:使用电位计控制LED的闪烁。
  • Analog Write Mega:使用Arduino Mega板逐个打开和关闭12个LED。
  • Calibration:定义预期模拟传感器值的最大值和最小值。
  • Fading:使用模拟输出(PWM引脚)缓慢变化亮度的LED。
  • Smoothing:平滑模拟输入的多个读数。

4.通信 Communication

这些示例包括允许Arduino与计算机上运行的Processing进行通信的代码。有关更多信息或下载Processing,请参阅processing.org。还有Max / MSP补丁也可以与每个Arduino进行通信。有关Max / MSP的更多信息,请参阅Cycling 74

  • ASCIITable:演示Arduino的高级串行输出功能。
  • Dimmer:移动鼠标以改变LED的亮度。
  • Graph:将数据发送到计算机并在Processing中绘制图表。
  • Midi:连续发送MIDI音符信息。
  • Multi Serial Mega:使用Arduino Mega上提供的两个串行端口。
  • Physical Pixel:通过Processing或Max / MSP向Arduino发送数据来打开和关闭LED。
  • Read ASCII String:解析以逗号分隔的整数字符串以调节LED亮度。
  • Serial Call Response:使用呼叫和响应(握手)方法发送多个变量。
  • Serial Call Response ASCII:使用呼叫和响应(握手)方法发送多个变量,并在发送之前对值进行ASCII编码。
  • Serial Event:演示SerialEvent()的使用。
  • Serial Passthrough:演示如何虚拟连接Serial和Serial1。
  • Virtual Color Mixer:将多个变量从Arduino发送到您的计算机,并在Processing或Max / MSP中读取它们。

5.控制结构 Control Structures

6.传感器 Sensors

  • ADXL3xx:读取ADXL3xx加速度计。
  • Knock:用压电元件检测敲击。
  • Memsic2125:双轴加速度计。
  • Ping:使用超声波测距仪检测物体。

7.显示 Display

8.字符串 Strings

9. USB (此部分课程中不讲解C语言版本,UNO不支持!但是通过ROS可以UNO功能极大扩展

键盘和鼠标示例是Leonardo,Micro和Due独有的。演示了如何使用板上独有的库。

键盘 KEYBOARD

鼠标 MOUSE

10. Starterkit和BasicKit

套件中包含的Project Book中提供 了StarterKit示例的教程,如果您购买了BasicKit,将能够在Project Ignite上在线访问项目。

11. Arduino ISP

Arduino ISP将Arduino转变为在线编程器,重新编程AtMega芯片。如果需要在Arduino上重新加载引导加载程序,如果 从面板上的Arduino转到AtMega ,或者如果在面包板上制作自己的Arduino兼容电路,则非常有用


ROS接口官方案例

  1. Arduino IDE设置

    本教程逐步介绍如何设置Arduino IDE以使用rosserial。

  2. Hello World(发布器示例)

    本教程逐步介绍如何使用rosserial创建发布器。

  3. 闪烁LED Blink(接收器示例)

    本教程逐步介绍如何将rosserial与接收器一起使用。

  4. 记录rosserial

    本教程逐步介绍了如何使用rosserial的日志记录。

  5. 使用时间和坐标变换TF

    本教程介绍如何使用ros :: Time和TF在Arduino上创建tf发布者。

  6. 温度感应器

    使用TMP102测量温度

  7. 按钮

    监视按钮并在ROS中发布其状态

  8. 用rosserial_arduino来制作CMake

    本教程介绍如何将CMake构建系统与rosserial_arduino一起使用。

  9. 伺服控制器示例

    使用rosserial和Arduino控制R / C伺服的教程

  10. IR Ranger教程

    使用带有rosserial和Arduino的IR Ranger

  11. SRF08超声波传感器

    在本教程中,我们将使用Arduino和SRF08超声波传感器作为测距仪.SRF08通过SPI / I2C与Arduino通信。

  12. BlinkM教程

    使用Arduino和rosserial通过ROS控制BlinkM

  13. Arduino示波器

    在本教程中,我们将使用Arduino的ADC(模数转换器)和rqt_plot制作一个简易的示波器。

  14. NodeHandle和ArduinoHardware的高级配置。

    本教程逐步介绍如何配置NodeHandleArduinoHareware以更好地满足用户需求。

rosserial overview:


配置具体内容参考初识,链接如下:

https://blog.csdn.net/ZhangRelay/article/details/100385715

了解Arduino和ROS之后,如何将两者联系起来呢?

这里以最新版本的ROS 1 Melodic做介绍。安装对应功能包:

 sudo apt install ros-melodic-rosserial-arduino 

全部支持的串口通讯方式有:

ros-melodic-rosserial                ros-melodic-rosserial-server
ros-melodic-rosserial-arduino        ros-melodic-rosserial-server-dbgsym
ros-melodic-rosserial-client         ros-melodic-rosserial-tivac
ros-melodic-rosserial-embeddedlinux  ros-melodic-rosserial-vex-cortex
ros-melodic-rosserial-mbed           ros-melodic-rosserial-vex-v5
ros-melodic-rosserial-msgs           ros-melodic-rosserial-windows
ros-melodic-rosserial-python         ros-melodic-rosserial-xbee

安装完成后,进行环境配置:

打开Arduino IDE(本文版本为1.8.9),直接进入库管理(library Manager),在搜索框输入ros查找:

rosserial arduino库



确保Rosserial Arduino Library 0.7.9安装完成。

这时候,就可以在文件File,示例Examples,自定义示例Costom中找到丰富的示例:

 rosserial arduino library



打开一个示例看一看吧,Blink(ROS版本):

/* 
 * rosserial Subscriber Example
 * Blinks an LED on callback
 */
 
#include <ros.h>
#include <std_msgs/Empty.h>
 
ros::NodeHandle  nh;
 
void messageCb( const std_msgs::Empty& toggle_msg){
  digitalWrite(13, HIGH-digitalRead(13));   // blink the led
}
 
ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );
 
void setup()
{ 
  pinMode(13, OUTPUT);
  nh.initNode();
  nh.subscribe(sub);
}
 
void loop()
{  
  nh.spinOnce();
  delay(1);
}


注意串口权限问题,sudo chmod 777 /dev/ttyACM0。/dev/ttyACM0为对应串口号。

程序上传至开发版后,依次运行如下命令:

1. roscore

2. rosrun rosserial_python serial_node.py /dev/ttyACM0

使用如下命令开关LED灯:

rostopic pub toggle_led std_msgs/Empty --once
闪烁:

rostopic pub toggle_led std_msgs/Empty -r 2

toggle_led

发布和订阅示例:

/*
 * rosserial PubSub Example
 * Prints "hello world!" and toggles led
 */
 
#include <ros.h>
#include <std_msgs/String.h>
#include <std_msgs/Empty.h>
 
ros::NodeHandle  nh;
 
 
void messageCb( const std_msgs::Empty& toggle_msg){
  digitalWrite(13, HIGH-digitalRead(13));   // blink the led
}
 
ros::Subscriber<std_msgs::Empty> sub("toggle_led", messageCb );
 
 
 
std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);
 
char hello[13] = "hello world!";
 
void setup()
{
  pinMode(13, OUTPUT);
  nh.initNode();
  nh.advertise(chatter);
  nh.subscribe(sub);
}
 
void loop()
{
  str_msg.data = hello;
  chatter.publish( &str_msg );
  nh.spinOnce();
  delay(500);
}
pubsub

 

rosgraph


 


Some features can be enabled depending of #define statements added before including ros.h in the sketch.

Platform

Feature

#define

Arduino based on 32u4 (Leonardo, Micro)

USB Serial (not pin 0 & 1)

USE_USBCON

All Arduino variants

Use Ethernet shield for rosserial over TCP

ROSSERIAL_ARDUINO_TCP


扩展阅读:

课堂上演示了Leap Motion,并在休息时间开启demo供有兴趣的同学玩耍。

Leap Motion中文官网:https://www.leapmotion.com/zh-hans/

目前支持,Arduino的外部设备非常多!

Cylon.js的一大优点是,它使您可以轻松地将基于计算机的平台(如Leap Motion)与较小的微控制器(如Arduino)集成在一起。本示例说明了如何与Arduino开发板无线连接以打开或关闭LED。

有关此代码示例的注释版本,请单击此处

Leap Motion
"use strict";

var Cylon = require("cylon");

Cylon.robot({
  connections: {
    leap: { adaptor: "leapmotion" },
    arduino: { adaptor: "firmata", port: "/dev/ttyACM0" }
  },

  devices: {
    led: { driver: "led", pin: 13, connection: "arduino" }
  },

  work: function(my) {
    my.leapmotion.on("frame", function(frame) {
      if (frame.hands.length > 0) {
        my.led.turnOn();
      } else {
        my.led.turnOff();
      }
    });
  }
}).start();

阅读:通过Arduino + Leap Motion手势控制的机器人手

手势映射机械手

 当然,大部分同学并没有机械手,怎么办?仿真一样ok。

参考:人机智能交互技术示例-Leap Motion通过ROS控制机械手Gazebo仿真

https://blog.csdn.net/zhangrelay/article/details/77995133

仿真

Arduino + 3D打印机

这个来自Andrew Maxwell-Parish的处理代码可通过手部运动控制Makerbot 3D打印机。它通过从Leap Motion API收集手指的XYZ位置,将其转​​换为3D打印机所需的笛卡尔坐标,将其包装为G代码格式,然后通过基于Arduino的控制器将其发送到打印机来工作。

Arduino马达+时钟马达

Arduino的电机是一个额外的工具包,很容易让你来控制电机的方向和速度与Arduino。(查看此出色的Instructables教程进行设置。)交互式设计专业的学生James Miller使用Motor Shield和Processing脚本创建了BLAST:Time,这是一个带有时钟的小雕塑,可以响应人们的手部动作。

 


 

zhangrelay CSDN认证博客专家 不合格高校讲师
LoveRobot,Go!!!!人工智能和机器人粉,从事机器人工程专业本科教学和科研工作,研究方向包括多机器人仿真技术,控制与协作,机器人系统软硬件开发等。
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页