简要介绍一下ROS的通信
确保你已经在ROS系统中安装了serial
软件包。
如果没有安装,可以通过以下命令进行安装:sudo apt-get install ros-<distro>-serial
请将
<distro>
替换为你正在使用的ROS发行版名称,例如melodic
、noetic
等。
在工作空间中创建一个包(package),并在包下创建一个节点。
cd ~/catkin_ws/src
catkin_create_pkg serial_communication rospy std_msgs
cd serial_communication
mkdir src
cd src
touch serial_node.cpp
编写通信节点
#include <ros/ros.h>
#include <serial/serial.h>
#include <std_msgs/String.h>
int main(int argc, char** argv) {
ros::init(argc, argv, "serial_communication_node");
ros::NodeHandle nh;
// 创建一个serial对象,指定串口设备路径和波特率
serial::Serial ser("/dev/ttyUSB0", 115200, serial::Timeout::simpleTimeout(1000));
// 创建一个Publisher,用于发布接收到的串口数据
ros::Publisher pub = nh.advertise<std_msgs::String>("serial_data", 10);
while (ros::ok()) {
// 接收串口数据
if (ser.available()) {
std_msgs::String msg;
msg.data = ser.read(ser.available());
pub.publish(msg);
}
// 执行其他操作
ros::spinOnce();
}
return 0;
}
在CMakeLists.txt
文件中添加必要的构建指令和依赖项。
cmake_minimum_required(VERSION 2.8.3)
project(serial_communication)
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
)
catkin_package()
include_directories(
${catkin_INCLUDE_DIRS}
)
add_executable(serial_node src/serial_node.cpp)
target_link_libraries(serial_node ${catkin_LIBRARIES})
编译并运行ROS节点
cd ~/catkin_ws
catkin_make
source devel/setup.bash
rosrun serial_communication serial_node
现在ROS节点应该能够通过串口进行通信了。它将接收来自STM32的数据,并以std_msgs::String
消息的形式发布到serial_data
话题上。