PC与ROS通信

1.新建窗口创建工作空间,编译,将工作空间加到环境变量

mkdir  -p test_serial_ws(文件包名)/src
cd test_serial_ws
catkin_make(编译)
....

source devel/setup.bash(刷新环境变量)

2.创建功能包,添加依赖包serial包,编译文件

cd src
catkin_create_pkg serial_demo roscpp serial

3.src文件下,创建serial_demo.cpp的c++程序

$serial_demo
cd  src 
touch serial_demo.cpp

编辑serial_demo.cpp文件

#include <ros/ros.h>
#include <serial/serial.h>
#include <iostream>

int main(int argc,char**argv)
{
	setlocale(LC_ALL,"");
	//ros显示中文
	ros::init(argc,argv,"serial_port");
	//创建节点,节点名唯一
	ros::NodeHandle nh;
	//创建句柄 ,向ros master注册节点信息
	
	serial::Serial sp;
	//创建窗口对象
	
	try
	{
		sp.setPort("/dev/ttyUSB0");
		//设置要打开串口名称
		sp.setBaudrate(9600);
		//设置波特率
		serial::bytesize_t bytesize = serial::eightbits;
		sp.setBytesize(bytesize);
		//设置数据位
		serial::parity_t parity = serial::parity_none;
		sp.setParity(parity);
		//设置奇偶检验
		serial::stopbits_t stopbits = serial::stopbits_one;
		sp.setStopbits(stopbits) ;
		//设置停止位
		serial::Timeout to = serial::Timeout::simpleTimeout(100);
		sp.setTimeout(to);
		//设置接收字节间隔的超时时间
		sp.open();	
		//打开串口
	}
	catch(serial::IOException &e)
	{
		ROS_ERROR_STREAM("打开串口失败");//串口设备的权限不够
	}
	if(sp.isOpen())
	{
		sp.flushInput();
		//清空输入的缓存区
		ROS_INFO_STREAM("串口打开成功");	
	}
	else
	{
		return -1;
	}
	ros::Rate loop_rate(500);
	while(ros::ok())
	{
		size_t n = sp.available();
		//缓冲区中数据的字节数,函数返回值作为接收字符的长度
		if(n!=0)
		{
			std::string rev;
			rev = sp.read(n);//n为字节数
			//读取缓冲区数据
			std::cout<<rev<<std::endl;
			sp.write(rev.c_str());;
			//发送读取到的数据
		}
		loop_rate.sleep();
	}
	sp.close();
	return 0;
}

修改CMakeList文件

add_executable(serial_demo src/serial_demo.cpp)
target_link_libraries(serial_demo  ${catkin_LIBRARIES})

4.新建窗口编译

cd test_serial_ws
catkin_make
.....

5.将两个ttl模块连接rx-tx;tx-rx

    打开终端启动ros核心

roscore

新建终端运行serial_port节点

source devel/setup.bash
rosrun serial_demo serial_demo

source devel/setup.bash前需要catkin_make一下

再rosrun

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值