先简要复习一下上次课的内容,主要介绍了一些理论上的知识,希望有一个宏观上的概念。
比如点-线-面-体,>感知<~~>控制<的维度需要匹配等。更多详细内容可以查看:
机器人感知-视觉部分: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 MATLABPython: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原理示意图 连线示意图 编译程序并下载 下载成功!
1.基础知识 Basics
2.数字量 Digital
3.模拟量 Analog
4.通信 Communication
这些示例包括允许Arduino与计算机上运行的Processing进行通信的代码。有关更多信息或下载Processing,请参阅processing.org。还有Max / MSP补丁也可以与每个Arduino进行通信。有关Max / MSP的更多信息,请参阅Cycling 74。
5.控制结构 Control Structures
6.传感器 Sensors
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兼容电路,则非常有用。
本教程逐步介绍如何设置Arduino IDE以使用rosserial。
本教程逐步介绍如何使用rosserial创建发布器。
本教程逐步介绍如何将rosserial与接收器一起使用。
本教程逐步介绍了如何使用rosserial的日志记录。
本教程介绍如何使用ros :: Time和TF在Arduino上创建tf发布者。
使用TMP102测量温度
监视按钮并在ROS中发布其状态
本教程介绍如何将CMake构建系统与rosserial_arduino一起使用。
使用rosserial和Arduino控制R / C伺服的教程
使用带有rosserial和Arduino的IR Ranger
在本教程中,我们将使用Arduino和SRF08超声波传感器作为测距仪.SRF08通过SPI / I2C与Arduino通信。
使用Arduino和rosserial通过ROS控制BlinkM
在本教程中,我们将使用Arduino的ADC(模数转换器)和rqt_plot制作一个简易的示波器。
本教程逐步介绍如何配置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查找:
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
#include
ros::NodeHandle nh;
void messageCb( const std_msgs::Empty& toggle_msg){
digitalWrite(13, HIGH-digitalRead(13)); // blink the led
}
ros::Subscriber
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
/*
* rosserial PubSub Example
* Prints "hello world!" and toggles led
*/
#include
#include
#include
ros::NodeHandle nh;
void messageCb( const std_msgs::Empty& toggle_msg){
digitalWrite(13, HIGH-digitalRead(13)); // blink the led
}
ros::Subscriber
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
————————————————