串口通信在嵌入式领域的重要性我也就不多说了, 这里的ros与arduino串口通信的方案, 同样适合于stm32, 51单片机等各种芯片. 这里与rosserial有区别, rosserial是基于某种类型的板子开发的.
首先当然是需要安装serial库啦, ros官方是提供了一个编译好的包给大家使用, 就不用大家去编译了. 直接输入下面的指令, 安装即可.
sudo apt-get install ros-kinetic-serial #此处的kinetic请根据安装的ros版本进行替换
arduino的串口通信程序很简单, 当arduino接受到数据之后, 原封不动的将数据进行返回, 也就不多解释了, 看注释就行:
#include <Arduino.h>
String readStr = "";
void setup()
{
Serial.begin(9600); //打开串口, 波特率9600
}
void loop()
{
while (Serial.available()) //等待串口接受到数据
{
readStr = readStr + char(Serial.read()); //将所有接受到的数据转成字符串
delay(2); //等待串口读取完成
}
if(readStr.length()>0) //如果读到了数据
{
Serial.print(readStr); //将数据原封不懂返回
readStr = ""; //清空
}
delay(20); //延时一段时间
}
博主这里使用的还是platformio, 使用arduino IDE也行.
在ros_test文件夹下新建serial_test.cpp
文件. 说明一下: 如果你是第一次看我的博客, 可能不知道ros_test文件夹是什么, 这个是在ros工程下的自己创建的功能包, 具体请查看以往的文章.
#include <serial/serial.h>
#include <ros/ros.h>
#include <string>
int main(int argc, char **argv)
{
ros::init(argc, argv, "serial_test"); //创建节点
ros::NodeHandle nh;
serial::Serial ser;
setlocale(LC_ALL, ""); //中文支持
try
{
ser.setPort("/dev/ttyUSB0"); //设置端口号
ser.setBaudrate(9600); //设置波特率
serial::Timeout tout = serial::Timeout::simpleTimeout(1000);//设置延时等待 ms
ser.setTimeout(tout);
ser.open(); //打开串口
}
catch (serial::IOException& e)
{
ROS_ERROR_STREAM("无法打开串口 ");
return -1;
}
if(ser.isOpen()) //成功打开串口
{
ROS_INFO_STREAM("串口初始化成功");
}
else
{
return -1;
}
while(ros::ok())
{
std::string result; //接受字符串
std::string msg = "hello"; //发送数据
ser.write(msg); //像单片机发送数据
sleep(1); //等待1s
while(ser.available()>0) //当串口接受到数据时
{
result = ser.read(ser.available());//读取所有数据
std::cout<<result<<std::endl; //打印
}
}
return 0;
}
注意, 这个ros程序中, 设置的端口号, 根据你的arduino所在的端口进行配置, 查看方法:
1, 插入arduino.
2, 打开platformio的主页, 方法在上一篇文章有说.
3, 点击devices, 即可查看arduino所在的端口.
1, 修改find_package
, 新增serial包
find_package(catkin REQUIRED COMPONENTS
...
serial
)
2, 在文件的末尾, 加上:
add_executable(serial_test src/serial_test.cpp)
target_link_libraries(serial_test ${
catkin_LIBRARIES})
add_dependencies(serial_test ${
PROJECT_NAME}_generate_messages_cpp)
点击"终端"–>“新建终端”,在终端中输入"catkin_make".
1, 使用快捷键Ctrl + Shift + T 弹出系统终端,输入roscore
,启用整个ROS总节点。
2, 使用快捷键Ctrl + Shift + T 弹出系统终端,输入rosrun ros_test serial_test
,启用serial_test节点。
可以看到ros与arduino通信成功. 如果提示"无法打开串口", 请确认串口权限已经配置好, 且没有被其他程序占用.
更多机器人ROS相关,公-众-号搜索 ”机器人小站", 关注我们吧。
文章浏览阅读44次。1.在产生随机数时,在数据规模很大的时候很难出现自己要的模型,比如某个条件的数据量,此时要写一个方法,来造一批这样的数据2.将控制数量,文件路径写成配置文件的形式,以免重复打包3.输入输出文件夹,可以配置以免重复打包 ...
文章浏览阅读7.5k次,点赞5次,收藏17次。 MOS管集成电路特点: 制造工艺比较简单、成品率较高、功耗低、组成的逻辑电路比较简单,集成度高、抗干扰能力强,特别适合于大规模集成电路。 MOS管集成电路包括: NMOS管组成的NMOS管电路、PMOS管组成的PMOS管电路及由NMOS和PMOS两种管子组成的互补MOS电路,即CMOS电路。 PMOS管门电路与NMOS管电路的原理完全相同,只是..._n沟道mos管
文章浏览阅读2.1k次,点赞5次,收藏29次。底成本小车, esp32, micropython, wifi, 浏览器控制控制(四轮版)_远程控制wifi遥控小车
文章浏览阅读306次。将网络适配器中只留下一个自己用的或许有帮助。_patchdll打开闪退
文章浏览阅读429次。报错信息如下:[Code: 1093, SQL State: HY000] You can’t specify target table ‘bd_bankaccbas’ for update in FROM clause译文:不能在FROM子句中指定目标表‘bd_bankaccbas’进行更新。有问题的SQL语句如下,它在oracle数据库的语法是支持的,但是mysql就不支持直接这么写:from和update都是同一张表。<span style="col..._you can't specify target table 't_bill' for update in from clause
文章浏览阅读421次。为什么80%的码农都做不了架构师?>>> ..._@jmslistener rabitmq
文章浏览阅读6.8k次,点赞6次,收藏15次。ttlFOR SYSTEM_TIME AS OFProcessing Time Temporal Joinlookup joinlookup cacheFlink查询缓存lookup.cache.max-rowslookup.cache.ttl_flink lookup join
文章浏览阅读1.1k次。路由是数据通信网络中最基本的要素。路由信息是指导报文转发的路径信息,路由过程就是报文转发的过程。本文将会介绍路由的基本概念及相关的基本知识。_路由基础知识
文章浏览阅读223次。转载地址:https://blog.51cto.com/ucode/1750564著作权归作者所有:来自51CTO博客作者027ryan的原创作品,如需转载,请注明出处,否则将追究法律责任1、Apache worker/prefwork模式说明在linux中,我们可以用httpd-l 查看安装的模块是prefork模式还是worker模式[root@LAMP ~]# /applic..._lamp优化的提示在哪里
文章浏览阅读496次。不靠谱的博客太多了。。。网上各种方法搞得人头大,明明超级简单,但信息接收太多反而对心理造成极大负担我试了很多方法,包括各博客用清华源等等下载的、怎么离线安装、还有下载cudann啥的,其实重点很明确,就是确定自己的cuda版本和python版本,然后去官网复制命令安装。不知道折腾了这么久 我的电脑会不会有啥影响,众多没装成功pytorch会崩掉我的电脑吗。。下面是我的安装过程:先确定python版本win+R,输入cmd,打开命令窗口,然后输入python即可看到自己的版本确定是否有_python官网cuda9.2
文章浏览阅读419次,点赞12次,收藏10次。已有业务:全局业务异常处理、参数校验、基于JWT的登录认证、登录拦截器、Redis认证优化、分页查询
文章浏览阅读171次。1 安装在官网下载对应版本, 如果要破解,请找到破解用 charles.jar(charles用java写的),替换掉安装目录中 jar 文件2 取得管理权限下载证书pc移动端证书help -> proxy ssl -> 选择对应的选项,安装好选项,授权永久信任,再输入当前用户密,最后输入 grant 用户权限密码(如果自己的电脑无需)3 使用charles 配置..._macbook charles method connection