1. 简介
- 这个教程展示如何安装arduino IDE和使用rosserial
- Arduino和Arduino IDE是进行硬件开发的非常好的辅助工具
- rosserial_arduino包可让ROS和ArduinoIDE一起工作
- rosserial提供的ROS通讯协议工作在Arduino的UART上,它让Arduino成为标准的ROS节-点,可以发布和订阅ROS消息,发布TF转换,获取ROS系统时间
- 通过arduino ide将编写好的程序上传到arduino,ROS通过串口运行该arduino结点
ROS环境配置参考:【1. ubuntu18.04安装ROS Melodic】
2. 安装
Arduino 和 Arduino IDE 是快速轻松地对硬件进行编程的绝佳工具。使用rosserial_arduino包,您可以直接将ROS与Arduino IDE一起使用。rosserial提供了一个ROS通信协议,可以在Arduino的UART上运行。它允许你的Arduino成为一个成熟的ROS节点,可以直接发布和订阅ROS消息,发布TF转换,并获取ROS系统时间。
注意:如果您尚未安装 Arduino IDE,请从 Arduino 网站下载。最好将应用程序安装到应用程序 PATH、桌面或主文件夹上的文件夹中。安装后,启动应用程序以选择您的素描本位置。(参见arduino官方网站,sketchbook是存储程序或草图的标准位置)。完成后关闭 IDE。
我们的 ROS 绑定作为 Arduino 库实现。与所有Arduino库一样,ros_lib将其库实现放入素描本的库文件夹中。如果您的素描簿中还没有库文件夹,请创建一个。然后,您可以使用以下说明安装库。
为了在您自己的代码中使用 rosserial 库,您必须首先将
#include <ros.h>
在包含任何其他头文件之前,例如
#include <std_msgs/String.h>
否则,Arduino IDE将无法找到它们。
2.1 Ubuntu下的Arduino IDE安装
去官网下载最新arduino(1.8.19),Ubuntu18.04不支持安装2.0
https://www.arduino.cc/en/software
然后解压安装
cd arduino-1.8.19/ ll sudo ./install.sh
解决方法是:插上你的arduino到电脑的USB上,在命令行里运行:
dmesg | tail# 初始化设备 ls -l /dev/ttyUSB0#这个0就是上面检测到的 sudo usermod -a -G dialout name#这里的name是自己电脑用户的名字 ls -ld /run/lock#锁定设备 sudo chmod +rwx /run/lock# 添加🔓权限 sudo chmod 777 /dev/ttyUSB0# 添加端口权限
设置标签
2.在ubuntu下,预置安装了一个叫brltty的程序与Arduino有冲突,卸载即可。这个东西是为盲人设计的,所以大可放心卸载,没有什么问题。卸载完重启电脑。
sudo apt-get remove brltty
打开Arduino
arduino
测试blink
/* Blink Turns an LED on for one second, then off for one second, repeatedly. Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to the correct LED pin independent of which board is used. If you want to know what pin the on-board LED is connected to on your Arduino model, check the Technical Specs of your board at: https://www.arduino.cc/en/Main/Products modified 8 May 2014 by Scott Fitzgerald modified 2 Sep 2016 by Arturo Guadalupi modified 8 Sep 2016 by Colby Newman This example code is in the public domain. https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink */ // the setup function runs once when you press reset or power the board 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 }
在工具中绑定端口和开发板,点击上传妙传
开发板就会闪烁
2.2 Ubuntu下rosserial arduino软件安装
您可以通过运行以下命令为 Arduino 安装 rosserial :
sudo apt-get install ros-melodic-rosserial-arduino sudo apt-get install ros-melodic-rosserial
2.3 安装ros_lib到Arduino IDE开发环境
上面的安装会得到ros_lib,它需要复制到Arduino的开发环境,以启用Arduino与ROS通讯。Rosserial自时髦版本以来就被猫化了,工作流程与Fuerte和早期版本略有不同。与其在要使用的每个包上运行库生成器,不如运行一次并为所有已安装的消息生成库。在下面的说明中,<arduino_ws> 表示您的 catkin 工作区。
conda deactivate mkdir -p arduino_ws/src cd ~/arduino_ws/src/ git clone https://github.com/ros-drivers/rosserial.git cd arduino_ws catkin_make catkin_make install
这些命令从 github 存储库克隆 rosserial,生成通信所需的rosserial_msgs,并在 /devel/lib 目录中创建库文件。
注意:目前您必须运行catkin_make安装,否则ros_lib目录的某些部分将丢失。希望这将很快得到解决。
3. 将ros_lib配置到 Arduino 环境库中
前面的安装步骤创建了必要的库,现在下面的步骤将创建Arduino构建环境所需的ros_lib文件夹,以使Arduino程序能够与ROS交互。
在以下步骤中,是Linux Arduino环境保存草图的目录。通常,这是主目录中称为素描簿或Arduino的目录。例如 cd ~/Arduino/libraries
conda deactivate cd Arduino/libraries rm -rf ros_lib rosrun rosserial_arduino make_libraries.py .
注意:目前您可以直接在Arduino IDE中安装Arduino libaries。只需从 Sketch -> 包含库 -> 管理库“中的 IDE 菜单中打开库管理器。然后搜索“rosserial”。如果您需要处理Arduino草图,但又不想设置完整的ROS工作站,这将非常有用。而其需要在python2.7环境
4. 使用helloword
打开example>ros_lib>helloworld,创建一个helloword的话题
helloworld.ino
/* * rosserial Publisher Example * Prints "hello world!" */ #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); }
使用arduino ide上传到arduino
5. 实验验证
运行roscore:
roscore
运行结点
开新终端运行结点(这里我的arduino串口为/dev/ttyUSB0):
conda deactivate rosrun rosserial_python serial_node.py /dev/ttyUSB0
再开新终端,查看该话题消息:
rostopic echo /chatter
创建成功
消息通讯机制
rqt_graph
6.总结
首先配置了arduino匹配的ROS环境,通过arduino 将编写好的程序上传到Uno,ROS通过串口运行该arduino结点,打印hello word.非常感谢你的阅读,如果有任何问题请在下面流言!!!
本文学习了Arduino与ros通讯,我会作树莓派小车,后期会分享更多有趣的操作从而实现对外部世界进行感知,充分认识这个有机与无机的环境,科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。✨✨✨
参考文献: