f
文章目录
前言
硬件
英伟达NX
USB转串口模块
环境
Ubuntu18.04
ROS Melodic
串口助手
一、安装ROS串口驱动
安装ROS串口
sudo apt-get install ros-melodic-serial
安装完后在一个新的终端里输入
roscd serial/
如果能够正常cd到/opt/ros/melodic/share/serial
,说明串口驱动安装成功.
二、新建软件包编译
mkdir -p ~/serial_ws/src
cd ~/serial_ws/src/
catkin_init_workspace
cd ~/serial_ws/
catkin_make
echo "source ~/serial_ws/devel/setup.bash">>~/.bashrc
source ~/.bashrc
echo $ROS_PACKAGE_PATH
新建功能包:
cd ~/serial_ws/src/
catkin_create_pkg serial_test roscpp rospy std_msgs serial
编辑代码
cd ~/serial_ws/src/serial_test/src
gedit serial_test.cpp
填入以下代码并保存
代码取自
//serial_port.cpp
int main(int argc, char** argv)
{
ros::init(argc, argv, "serial_port");
//创建句柄(虽然后面没用到这个句柄,但如果不创建,运行时进程会出错)
ros::NodeHandle n;
//创建一个serial类
serial::Serial sp;
//创建timeout
serial::Timeout to = serial::Timeout::simpleTimeout(100);
//设置要打开的串口名称
sp.setPort("/dev/ttyTHS0");
//设置串口通信的波特率
sp.setBaudrate(115200);
//串口设置timeout
sp.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/ttyTHS0 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];
//读出数据
n = sp.read(buffer, n);
for(int i=0; i<n; i++)
{
//16进制的方式打印到屏幕
std::cout << std::hex << (buffer[i] & 0xff) << " ";
}
std::cout << std::endl;
//把数据发送回去
sp.write(buffer, n);
}
loop_rate.sleep();
}
//关闭串口
sp.close();
return 0;
}
修改~/serial_ws/src/serial_test/
下的CmakeLists.txt.
cd ~/serial_ws/src/serial_test/
gedit CMakeLists.txt
在文件的最后加上:
add_executable(serial_test src/serial_test.cpp)
add_dependencies(serial_test ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(serial_test ${catkin_LIBRARIES})
编译
cd ~/serial_ws
catkin_make
. ~/serial_ws/devel/setup.bash
三、测试
NX上有三个板载串口,我这里使用ttyTHS0.
对应的引脚如下:
其中ttyTHS0的TX对应上图引脚8,RX对应上图引脚10.
将ttyTHS0的TX接到USB转串口模块的RX,将tyTHS0的RX接到USB转串口模块的TX,同时将USB转串口模块的GND接到NX上的GND,我这里接的是6号引脚.
接好线后,将USB转串口模块接到电脑的串口助手上.
可以在NX的终端上查看一下串口的端口号
cd /dev
ls
ttyTHS开头的就是板载串口
在NX上先执行如下命令赋予权限,否则无法打开串口
sudo chmod 777 /dev/ttyTHS0
然后运行节点
roscore
rosrun serial_test serial_test
打开串口助手,连接上USB转串口模块,设置波特率为115200,数据位8位,无校验位,1位停止位,无流控,然后发送一些数据进行测试,电脑每向NX发送一个数据,NX会向电脑返回发送相同的数据.如下图:
在NX上运行节点的终端上可以看到接收到的数据(我在串口助手上是以文本进行发送的,终端是以ASCII码进行显示的)
代码地址: