ROS笔记四:ROS通信
简要介绍一下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 COMPONENTSroscppstd_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话题上。