机器人控制器编程课程-教案03-进阶
先简要复习一下上次课的内容,主要介绍了一些理论上的知识,希望有一个宏观上的概念。
比如点-线-面-体,>感知<~~>控制<的维度需要匹配等。更多详细内容可以查看:
机器人感知-视觉部分:https://blog.csdn.net/ZhangRelay/article/details/81352622
并思考:二维空间导航与三维空间抓取操作的异同之处?
![](/assets/blank.gif)
同时可以回顾,信息传输的时间与频率的关系,各种维度的信息需要的数据带宽。
书中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:
![](/assets/blank.gif)
Matlab:完美支持,自主学习探索
![](/assets/blank.gif)
Python:Arduino-Python3-Command-API
![](/assets/blank.gif)
JavaScript:http://johnny-five.io/
![](/assets/blank.gif)
总之,目前主流的编程语言,都可以实现对Arduino直接或者间接代码调试!!!(ROS部分稍后详细介绍)
代码也不想写,可不可以呢?Scratch+Arduino,需要先安装插件。
![](/assets/blank.gif)
这里需要注意,下图中间的arduino指示灯:
![](/assets/blank.gif)
配置正确后,可以进行框图程序设计。
云端编程,免费的云端ROS学习体验环境可以参考如下链接:
https://www.shiyanlou.com/courses/854
arduino自然也提供了类似功能,不需要在本地安装arduino IDE:
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
C语言编程官方案例
1.基础知识Basics
- Analog Read Serial:读取电位计,将其状态输出到Arduino串行口监视器。
- Bare Minimum:启动Arduino所需的最少代码。
- Blink:打开和关闭LED。
- Digital Read Serial:读取开关量,将状态发布到Arduino串行监视器。
- Fade(呼吸灯):演示使用模拟输出实现渐变亮度的LED。
- Read Analog Voltage:读取模拟输入并将电压发布到串口监视器。
2.数字量Digital
- Blink Without Delay:不使用延迟 delay() 功能使LED闪烁。
- Button:使用按钮控制LED。
- Debounce:读取一个按钮状态,过滤噪音。
- Digital Input Pullup:使用pinMode()演示INPUT_PULLUP的使用。
- State Change Detection:计算按钮按下的次数。
- Tone Keyboard:使用力传感器和压电扬声器的三键音乐键盘。
- Tone Melody:用压电扬声器演奏旋律。
- Tone Multiple:使用tone()命令依次在多个扬声器上播放音调。
- Tone Pitch Follower:根据模拟输入在压电扬声器上演奏音高。
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
- Arrays:For循环示例的变体,演示如何使用数组。
- For Loop Iteration:使用for循环和控制多个LED。
- If Statement Conditional:使用'if语句'根据更改输入条件更改输出条件。
- Switch Case:如何在离散数量的值之间进行选择。
- Switch Case 2:第二个switch-case示例,显示如何根据串行端口中收到的字符执行不同的操作。
- While Statement Conditional:如何在读取按钮时使用while循环校准传感器。
6.传感器Sensors
- ADXL3xx:读取ADXL3xx加速度计。
- Knock:用压电元件检测敲击。
- Memsic2125:双轴加速度计。
- Ping:使用超声波测距仪检测物体。
7.显示Display
- Bar Graph:制作LED条形图。
- RowColumnScanning:控制8x8 LED矩阵。
8.字符串Strings
- Character Analysis:使用运算符识别我们正在处理的字符类型。
- String Addition Operator:以各种方式将字符串添加到一起。
- String Append Operator:使用+ =运算符和concat()方法将字符串附加到字符串。
- String Case Changes:更改字符串的大小写。
- String Characters:获取/设置字符串中特定字符的值。
- String Comparison Operators:按字母顺序比较字符串。
- String Constructors:初始化字符串对象。
- String Index Of:查找字符串中字符的第一个/最后一个实例。
- String Length & String Length Trim:获取并修剪字符串的长度。
- String Replace:替换字符串中的单个字符。
- String Start With Ends With:检查给定字符串的开头或结尾字符/子字符串。
- String Substring:查找给定字符串中的“短语”。
- String To Int:允许您将String转换为整数。
9. USB (此部分课程中不讲解C语言版本,UNO不支持!但是通过ROS可以UNO功能极大扩展)
键盘和鼠标示例是Leonardo,Micro和Due独有的。演示了如何使用板上独有的库。
键盘KEYBOARD
- Keyboard Logout:使用键盘命令注销当前用户。
- Keyboard Message:按下按钮时发送文本字符串。
- Keyboard Reprogram:在Arduino IDE中打开一个新窗口,并使用简单的闪烁程序重新编程Leonardo。
- Keyboard Serial:从串行端口读取一个字节,然后发回键击。
- Keyboard Mouse Control:在一个程序中演示鼠标和键盘命令。
鼠标MOUSE
- Button Mouse Control:使用5个按钮控制光标移动。
- Joystick Mouse Contol:按下按钮时,使用操纵杆控制计算机的光标移动。
10. Starterkit和BasicKit
套件中包含的Project Book中提供 了StarterKit示例的教程,如果您购买了BasicKit,将能够在Project Ignite上在线访问项目。
11. Arduino ISP
Arduino ISP将Arduino转变为在线编程器,重新编程AtMega芯片。如果需要在Arduino上重新加载引导加载程序,如果 从面板上的Arduino转到AtMega ,或者如果在面包板上制作自己的Arduino兼容电路,则非常有用。
ROS接口官方案例
- Arduino IDE设置
本教程逐步介绍如何设置Arduino IDE以使用rosserial。
- Hello World(发布器示例)
本教程逐步介绍如何使用rosserial创建发布器。
- 闪烁LED Blink(接收器示例)
本教程逐步介绍如何将rosserial与接收器一起使用。
- 记录rosserial
本教程逐步介绍了如何使用rosserial的日志记录。
- 使用时间和坐标变换TF
本教程介绍如何使用ros :: Time和TF在Arduino上创建tf发布者。
- 温度感应器
使用TMP102测量温度
- 按钮
监视按钮并在ROS中发布其状态
- 用rosserial_arduino来制作CMake
本教程介绍如何将CMake构建系统与rosserial_arduino一起使用。
- 伺服控制器示例
使用rosserial和Arduino控制R / C伺服的教程
- IR Ranger教程
使用带有rosserial和Arduino的IR Ranger
- SRF08超声波传感器
在本教程中,我们将使用Arduino和SRF08超声波传感器作为测距仪.SRF08通过SPI / I2C与Arduino通信。
- BlinkM教程
使用Arduino和rosserial通过ROS控制BlinkM
- Arduino示波器
在本教程中,我们将使用Arduino的ADC(模数转换器)和rqt_plot制作一个简易的示波器。
- NodeHandle和ArduinoHardware的高级配置。
本教程逐步介绍如何配置NodeHandle和ArduinoHareware以更好地满足用户需求。
rosserial overview:
NodeHandles and Initialization
Messages
Publishers and Subscribers
Time
Logging
Limitations
Protocol
Parameters
配置具体内容参考初识,链接如下:
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查找:
![](/assets/blank.gif)
确保Rosserial Arduino Library 0.7.9安装完成。
这时候,就可以在文件File,示例Examples,自定义示例Costom中找到丰富的示例:
![](/assets/blank.gif)
打开一个示例看一看吧,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
![](/assets/blank.gif)
发布和订阅示例:
/** 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);
}
![](/assets/blank.gif)
![](/assets/blank.gif)
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。
有关此代码示例的注释版本,请单击此处。
![](/assets/blank.gif)
"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手势控制的机器人手
![](/assets/blank.gif)
当然,大部分同学并没有机械手,怎么办?仿真一样ok。
参考:人机智能交互技术示例-Leap Motion通过ROS控制机械手Gazebo仿真
(https://blog.csdn.net/zhangrelay/article/details/77995133)
![](/assets/blank.gif)
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,这是一个带有时钟的小雕塑,可以响应人们的手部动作。
机器人控制器编程课程-教案03-进阶相关推荐
- 机器人控制器编程课程-教案06-理论课总结
理论课程本周结束.课程全部资源,查看机器人控制器编程课程专题,链接如下: 课程-机器人控制器编程- 自学能力是大学课程的核心与关键,也是终身学习的必备要素. 课程讲述了,使用arduino搭建如上图所 ...
- 机器人控制器编程课程-教案01-初识
课程主要介绍Arduino,辅助补充ROS机器人操作系统(1&2).有兴趣同学可以参考如下链接: 基于ROS_Arduino室内移动机器人SLAM实验测试 什么是机器人?什么是控制器?什么是编 ...
- 机器人控制器编程课程-教案04-综合
课程已经接近尾声,那么制作一台可以远程遥控的机器人小车最少需要多少钱呢?支持ROS1和ROS2. ¥99元可以吗?只是遥控小车用不了那么多- 底盘: 控制器: 驱动: 一共14.71+13.50+5. ...
- 机器人控制器编程课程-教案05-秘籍
机器人操作系统从广义上讲,属于物联网系统的一部分.在学习完成Arduino全部课程之后,必须掌握的机器人工具之一. 这里推荐两款物联网系统: Windows IoT:https://developer ...
- 机器人控制器编程课程大纲(Arduino+ROS+IoT+SLAM……)2019-2020-1
补充说明:很多中小学已经开设了此类课程(需要预习哦): 面向中小学的Arduino机器人课程 全国青少年机器人等级考试1-6级大纲下载链接: 链接:https://pan.baidu.com/s/1M ...
- 机器人控制器编程整理汇总-辞旧迎新-
从微控制器到机器人: 旧版测试视频: turtlesim_esp32发布速度测试 课程进化如下设备: CoCube群机器人预览→资讯剧透← CoCube群机器人预览 从简单8位单片机,到网络化结合RO ...
- ROS1Melodic+ROS2Dashing+Arduino+SLAM学习镜像(机器人控制器编程等课程资料)
学习镜像供机器人工程专业机器人控制器编程课程学生使用,镜像融合了博客中所有经典的ROS1Melodic版本和ROS2Dashing版本案例,涵盖Arduino AVR和ARM全部独立知识点及其与ROS ...
- 机器人控制器编程教学进度表
受疫情影响调整较多,授课效果不好,向学生致歉. 周次 起止日期 讲课内容分章和分节的名称 课时数 习题.实验.设计.实践或科学实验名称 课时数 1 机器人控制器基本知识和Arduino[ESP32]入 ...
- PLC机器人控制器编程笔记
开发平台:开启时代四代集成开发平台 参考文献:[1]开启时代四代开发平台使用说明书 文章整理了相关基础知识,并以实际应用的消防排烟机器人的控制程序为例,描述了变量捕捉.线性变换等常用的功能,详细阐述了 ...
最新文章
- 红旗系统linux忘了开机密码,红旗Linux6.0中忘记了root密码
- 2021.08.24学习内容torch.utils.data.DataLoader以及CUDA与GPU的关系
- nginx基本配置与参数说明-【转】
- 如何检查PHP数组是关联数组还是顺序数组?
- [摘抄]隧道尽头的灯
- git学习(二)查看log历史记录
- C# 使用 Topshelf 创建Windows服务
- 使用xml和java代码混合控制UI界面
- 我们工作到底为了什么
- 打印DPI如何与计算机DPI一致,像素英寸与dpi的那些事儿
- Promise中then的返回值
- GetComponentsInChildren 不能获取enabled = false的子物体
- uniapp抖音小程序发布激励广告
- 股票融资融券通俗理解及利率
- iOS APP上架App Store其中一个步骤就是要把ipa文件上传到App Store
- 智能代还行业怎么样?合法吗?代还APP开发靠谱吗?
- 全球工业半导体市场占有率十大排名出炉
- UID-( Unique Identifiers ) 唯一标志值的解释
- 清华大学计算机博后,科学网—我在清华做博士后的收获 - 喻海良的博文
- 议题全面曝光!40+干货议题及重磅讲师阵容,这场大会很有看点