serial安装
sudo apt-get install ros--serial, 由于是Ubuntu 18, 那么就是:
sudo apt install ros-melodic-serial
安装好后,在ROS终端中输入如下,创建ros_serial 功能包
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_create_pkg serial_port roscpp std_msgs serial
打开 cd serial_port/src
将serial_port.cpp文件添加进去,
//serial_port.cpp
#include
#include
#include
int main(int argc, char** argv)
{
ros::init(argc, argv, “serial_port”);
//创建句柄(虽然后面没用到这个句柄,但如果不创建,运行时进程会出错)
ros::NodeHandle n;
//创建一个serial类serial::Serial sp;//创建timeoutserial::Timeout to = serial::Timeout::simpleTimeout(100);//设置要打开的串口名称sp.setPort("/dev/ttyUSB1");//设置串口通信的波特率sp.setBaudrate(115200);//串口设置timeoutsp.setTimeout(to);try{ //打开串口 sp.open();}catch(serial::IOException& e){ ROS_ERROR_STREAM("Unable to open port."); return -1;}//判断串口是否打开成功if(sp.isOpen()){ ROS_INFO_STREAM("/dev/ttyUSB1 is opened.");}else{ return -1;}ros::Rate loop_rate(500);while(ros::ok()){ //获取缓冲区内的字节数 size_t n = sp.available(); if(n!=0) { uint8_t buffer[1024]; uint8_t IMU_data[15]; uint8_t Txbuffer[3]={0x01,0x02,0x03}; //读出数据 n = sp.read(buffer, n); for(int i=0; i
="=0xa5" &&buffer[i+1]="=0x5a&&" buffer[i+2]="=0x2e)" imu_data[0]="buffer[i+3];" imu_data[1]="buffer[i+4];" imu_data[2]="buffer[i+5];" imu_data[3]="buffer[i+6];" imu_data[4]="buffer[i+7];" imu_data[5]="buffer[i+8];" imu_data[6]="buffer[i+9];" break;="" }="" 16进制的方式打印到屏幕="" ros_info("read:="" %d",imu_data[0]);="" std::cout="" <<="" std::hex="" (imu_data="" &="" 0xff)="" "="" ";="" std::endl;="" 把数据发送回去="" %d",&imu_data);="" for(int="" i="0;" i<6;="" sp.write(txbuffer,="" 3);="" ros::rate="" loop_rate(50);="" loop_rate.sleep();="" 关闭串口="" sp.close();="" return="" 0;=""
在caktin_ws目录下catkin_make
然后,重新打开终端,运行roscore
然后在运行 $ rosrun serial_port serial_port
注意,如果u***端口不正确可能不成功,
此时可以通过$ ls -l /dev |grep ttyUSB 来查看u***的端口号,在serial.cpp里面进行修改,修改保存完毕后,进行编译
再次运行$ rosrun serial_port serial_port
serial安装
sudo apt-get install ros--serial, 由于是Ubuntu 18, 那么就是:
sudo apt install ros-melodic-serial
安装好后,在ROS终端中输入如下,创建ros_serial 功能包
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_create_pkg serial_port roscpp std_msgs serial
打开 cd serial_port/src
将serial_port.cpp文件添加进去,
//serial_port.cpp
#include
#include
#include
int main(int argc, char** argv)
{
ros::init(argc, argv, “serial_port”);
//创建句柄(虽然后面没用到这个句柄,但如果不创建,运行时进程会出错)
ros::NodeHandle n;
//创建一个serial类serial::Serial sp;//创建timeoutserial::Timeout to = serial::Timeout::simpleTimeout(100);//设置要打开的串口名称sp.setPort("/dev/ttyUSB1");//设置串口通信的波特率sp.setBaudrate(115200);//串口设置timeoutsp.setTimeout(to);try{ //打开串口 sp.open();}catch(serial::IOException& e){ ROS_ERROR_STREAM("Unable to open port."); return -1;}//判断串口是否打开成功if(sp.isOpen()){ ROS_INFO_STREAM("/dev/ttyUSB1 is opened.");}else{ return -1;}ros::Rate loop_rate(500);while(ros::ok()){ //获取缓冲区内的字节数 size_t n = sp.available(); if(n!=0) { uint8_t buffer[1024]; uint8_t IMU_data[15]; uint8_t Txbuffer[3]={0x01,0x02,0x03}; //读出数据 n = sp.read(buffer, n); for(int i=0; i="=0xa5" &&buffer[i+1]="=0x5a&&" buffer[i+2]="=0x2e)" imu_data[0]="buffer[i+3];" imu_data[1]="buffer[i+4];" imu_data[2]="buffer[i+5];" imu_data[3]="buffer[i+6];" imu_data[4]="buffer[i+7];" imu_data[5]="buffer[i+8];" imu_data[6]="buffer[i+9];" break;="" }="" 16进制的方式打印到屏幕="" ros_info("read:="" %d",imu_data[0]);="" std::cout="" <<="" std::hex="" (imu_data="" &="" 0xff)="" "="" ";="" std::endl;="" 把数据发送回去="" %d",&imu_data);="" for(int="" i="0;" i<6;="" sp.write(txbuffer,="" 3);="" ros::rate="" loop_rate(50);="" loop_rate.sleep();="" 关闭串口="" sp.close();="" return="" 0;=""
在caktin_ws目录下catkin_make
然后,重新打开终端,运行roscore
然后在运行 $ rosrun serial_port serial_port
注意,如果u***端口不正确可能不成功,
此时可以通过$ ls -l /dev |grep ttyUSB 来查看u***的端口号,在serial.cpp里面进行修改,修改保存完毕后,进行编译
再次运行$ rosrun serial_port serial_port
举报