rosserial_java_编写ros串口节点,使用官方serial包(示例代码)
參考http://www.roswiki.com/read.php?tid=557&fid=39
1.通過sudo apt-get install ros--serial下載ROS對應版本的工具包
serial會安裝在opt/ros//share/serial目錄下,
重啟終端,輸入 roscd serial,可以檢測到serial包的路徑,說明serial包已經安裝成功
2.使用ros自帶的serial包,編寫節點
#include
#include ?//ROS已經內置了的串口包
#include
#include
serial::Serial ser; //聲明串口對象
//回調函數
void write_callback(const std_msgs::String::ConstPtr& msg)
{
ROS_INFO_STREAM("Writing to serial port" <data);
ser.write(msg->data); ? //發送串口數據
}
int main (int argc, char** argv)
{
//初始化節點
ros::init(argc, argv, "serial_example_node");
//聲明節點句柄
ros::NodeHandle nh;
//訂閱主題,并配置回調函數
ros::Subscriber write_sub = nh.subscribe("write", 1000, write_callback);
//發布主題
ros::Publisher read_pub = nh.advertise<:string>("read", 1000);
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");
}
else
{
return -1;
}
//指定循環的頻率
ros::Rate loop_rate(50);
while(ros::ok())
{
if(ser.available()){
ROS_INFO_STREAM("Reading from serial port\n");
std_msgs::String result;
result.data = ser.read(ser.available());
ROS_INFO_STREAM("Read: " << result.data);
read_pub.publish(result);
}
//處理ROS的信息,比如訂閱消息,并調用回調函數
ros::spinOnce();
loop_rate.sleep();
}
}
總結
以上是生活随笔為你收集整理的rosserial_java_编写ros串口节点,使用官方serial包(示例代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java在记事本找不到_好烦,用记事本练
- 下一篇: java8 注解增强_Java8新增的重