ROS与STM32串口通信
对于不是noetic版本的ros来说,是集成了serial功能包的,但是笔者在实践中发现,最新的noetic版本并没有serial功能包,也就是说通过命令
sudo apt install ros-noetic-serial
下载是行不通的=,只会得到这样的结果
其他版本的话可以直接下载对应功能包
sudo apt install ros-版本-serial
那么对于noetic版本我们应该怎样下载呢?
首先我们借用已经开源的文件下载,在你的功能包下的src目录执行
git clone https://github.com/wjwwood/serial.git
然后在下载的文件夹内进行编译下载
cd serial
make
make test
make doc
make install
如果报错make无效什么的话,可以先执行
sudo apt install doxygen-latex
然后再返回上面的过程。
最后得到以下结果
然后进入serial目录,在CMakeLists.txt文件中修改以下内容为
include_directories(include ${catkin_INCLUDE_DIRS})
修改后的结果如图所示:
最后就是在你所需要设置串口的功能包内的package.xml文件中添加对应依赖即可
<build_depend>serial</build_depend>
<build_export_depend>serial</build_export_depend>
<exec_depend>serial</exec_depend>
CMakelist.txt文件的find语句中添加serial即可
find_package(catkin REQUIRED COMPONENTS
巴拉巴拉
serial
巴拉巴拉
)
或者你可以直接创建一个依赖serial的功能包,具体如下
在src目录下打开终端,输入以下内容分即可
catkin_create_pkg roscar_serial roscpp rospy std_msgs serial
得到的结果如图所示
最后对应ros的文件可以参考匿名科创的代码
//serial_port.cpp
#include <ros/ros.h>
#include "serial/serial.h"
#include <iostream>
#include <math.h>
#include "ano_tc_v4/sdk_ano_tc_v4.hpp"
SDK_ANO_TC_V4 ano_tc;
serial::Serial sp;
int main(int argc, char** argv)
{
ros::init(argc, argv, "serial_port");
ros::NodeHandle nh;
//
ano_tc.set_dev(&sp,"/dev/ttyUSB1",57600);
ano_tc.open_dev(&sp);
// simulate sin data
ros::Rate loop_rate(5760); //
while (ros::ok())
{
ano_tc.receive_info_from_ano_tc(&sp);
ros::spinOnce();
loop_rate.sleep();
}
ano_tc.close_dev(&sp);
return 0;
}