目录
软件环境:Windows 10 + VMware 16 + Ubuntu 20.04+ Noetic
硬件包括:布瑞特拉线位移传感器,RS485协议,1024分辨率(10bit),UT-890A串口线
一、Windows环境调试
1.1下载、安装UT-890A驱动
下载地址:UT-885、890、2003A、880、8801等驱动
安装方法很简单,双击就行。
1.2接线
传感器接线说明:
UT-890A串口线用接线端子引出,便于接线,RS485A(白)接T/R+,RS485B(绿)接T/R-
1.3官方上位机调试
使用流程:串口检测——>打开串口——>连接编码器
上位机右侧区域是对传感器进行设置,包括波特率,模式,置零等。
二、ubuntu系统测试通讯
将串口线的连接转到ubuntu系统下,使用串口调试助手查看数据是否能够正常接收。可以先把传感器设置成自动回传模式,也可以手动发布数据进行查询模式接收。
三、ROS程序包解析数据
刚开始想的是解析RS485协议,找了好多资料都不能用,包括一个ROS的modbus包,版本太老了不能用。后来意识到解析RS485协议是多此一举的,直接对串口数据进行解析就可以!
3.1创建ROS工作空间和驱动包
VSCODE配置ROS编译环境_ros 编译环境_可见一班的博客-CSDN博客
3.2 C++解析数据
以这种通讯方式读取编码器值,也就是第4、5、6、7组合成编码器值,可以换算到拉绳拉出距离。
try
{
ser.setPort("/dev/ttyUSB0");
ser.setBaudrate(9600);
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");
}else{
return -1;
}
ros::Rate loop_rate(20);
while(ros::ok()){
ser.write(Query_command,8);
ros::spinOnce();
if(ser.available()){
ser.read(r_buffer,rBUFFERSIZE);
ROS_INFO_STREAM("Reading from serial port");
// 终端打印输出、转 int
// for (int i = 0; i < rBUFFERSIZE; i++)
// {
// // 16进制的方式打印到屏幕
// std::cout << std::hex << (unsigned int)(r_buffer[i]) << " ";
// // int temp_number = std::stoi(std::to_string(r_buffer[i]),NULL,16);
// // std::cout << "temp_number: " << temp_number << std::endl;
// }
// std::cout << std::endl;
int output = 0;
output = // std::stoi(std::to_string(r_buffer[3]), NULL, 16) * pow(16, 6) +
std::stoi(std::to_string(r_buffer[4]), NULL, 10) * pow(16, 4) +
std::stoi(std::to_string(r_buffer[5]), NULL, 10) * pow(16, 2) +
std::stoi(std::to_string(r_buffer[6]), NULL, 10) * pow(16, 0);
int distance = 0;
distance = output * 100 / 1024;
// std::cout << "output: " << output << std::endl;
std::cout << "distance: " << distance << std::endl;
文章评论