一、使用ros-kinetic-serial包,首先安装这个package
注意,需将kinetic替换为你的ROS版本
sudo apt install ros-kinetic-serial
二、连接设备并查看串口名
关于linux串口的操作看这里 Ubuntu关于串口的操作(查看串口信息、串口助手、串口权限)
三、在package中包编写代码
1. 在工作空间中创建你自己的package
创建包具体看这里:
ROS创建工作空间添加包并编译
2. 代码如下
#include <ros/ros.h>
#include <serial/serial.h>
#include <iostream>
using namespace std;
int serial_write(serial::Serial &ser, std::string &serial_msg)
{
ser.write(serial_msg);
return 0;
}
int serial_read(serial::Serial &ser, std::string &result)
{
result = ser.read(ser.available());
return 0;
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "baseRun");
ros::NodeHandle nh;
ros::Rate loop_rate(100);
serial::Serial ser;
try
{
ser.setPort("/dev/ttyUSB0");
ser.setBaudrate(115200);
serial::Timeout to = serial::Timeout::simpleTimeout(1000);
ser.setTimeout(to);
ser.open();
}
catch (serial::IOException &e)
{
ROS_ERROR_STREAM("Unable to open port ");
return -1;
}
if (ser.isOpen())
{
ROS_INFO_STREAM("Serial Port initialized.\n");
}
else
{
return -1;
}
std::string data, state, result;
int func(0);
cout << "Please input function number:" << endl;
cout << "0:制动 1:前进 2:后退 3:向左平移 4:向右平移 5:左转 6:右转" << endl << endl;
while (ros::ok())
{
cout << "Your function number is: ";
cin >> func;
switch (func)
{
case 0:
data = "$,4,0,500,44,#\r\n";
state = "制动";
break;
case 1:
data = "$,4,1,500,44,#\r\n";
state = "前进";
break;
case 2:
data = "$,4,2,500,44,#\r\n";
state = "后退";
break;
case 3:
data = "$,4,3,500,44,#\r\n";
state = "向左平移";
break;
case 4:
data = "$,4,4,500,44,#\r\n";
state = "向右平移";
break;
case 5:
data = "$,4,5,500,44,#\r\n";
state = "左转";
break;
case 6:
data = "$,4,6,500,44,#\r\n";
state = "右转";
break;
default:
ROS_ERROR_STREAM("No this function number!!!");
break;
}
serial_write(ser, data);
cout << " the data write to serial is : " << data.c_str();
serial_read(ser, result);
cout << " the data read from serial is : " << result.c_str();
cout << " the state of robot is : " << state.c_str() << endl << endl;
}
ser.close();
return 0;
}
CMakeLists.txt 文件配置内容:
cmake_minimum_required(VERSION 3.0.2)
project(serial_port)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
serial
)
catkin_package(
)
include_directories(
${catkin_INCLUDE_DIRS}
)
add_executable(serial_port src/serial_port.cpp)
add_dependencies(serial_port
${${PROJECT_NAME}_EXPORTED_TARGETS}
${catkin_EXPORTED_TARGETS}
)
target_link_libraries(serial_port
${catkin_LIBRARIES}
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)