ROS与Arduino-Hello World

ROS与Arduino-Hello World

说明:
• 这个教程介绍如何通过rosserial创建发布者并且显示主题chatter
• 例子来自Arduino IDE,File->Example->ros_lib下的hello world
• 本例子在Arduino MEGA 2560开发板验证通过


代码:

/*
 * rosserial Publisher Example
 * Prints "hello world!"
 */

#include <ros.h>
#include <std_msgs/String.h>

ros::NodeHandle  nh;

std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);

char hello[13] = "hello world!";

void setup()
{
  nh.initNode();
  nh.advertise(chatter);
}

void loop()
{
  str_msg.data = hello;
  chatter.publish( &str_msg );
  nh.spinOnce();
  delay(1000);
}

代码分析:

**1. 代码**
#include <ros.h>
#include <std_msgs/String.h>

解释:
• <ros.h>库包含Arduino-to-ROS客户端功能。节点会发布String类型的消息,所以需要先包含该消息类型的头文件String.h。该头文件根据Sring.msg的消息结构定义自动生成,我们也可以自定义消息结构,并生成所需要的头文件。
2. 代码

ros::NodeHandle nh;

解释:
• 创建一个节点句柄,方便对节点资源的使用和管理。初始化节点实例,可以用它创建发布或订阅
3. 代码

std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);

解释:
• 在ROS Master 端注册一个Publisher,并告诉系统Publisher节点将会发布以chatter为话题的String类型消息。
4. 代码

void setup()
{
  nh.initNode();
  nh.advertise(chatter);
}

解释:
• Arduino的Setup函数,需要初始化ROS节点处理,并宣告所有的发布或订阅
5. 代码

void loop()
{
  str_msg.data = hello;
  chatter.publish( &str_msg );
  nh.spinOnce();
  delay(1000);
}

解释:
• 在Arduino的loop函数,定义发布的内容,并调用nh.spinOnce(),这样所有的ROS回调函数就会被处理。设置delay函数延时。
代码上传
• 利用Arduino IDE编译代码,如下图:
在这里插入图片描述
• 然后使用upload功能上传代码到Arduino
• 代码上传过程可能会提示如下图所示错误:
在这里插入图片描述
• 可以通过更改权限:一般使用USB口,无论USB转什么口,串口之类的,启动时容易出现:/dev/ttyUSB0 permission denied.
• 因为一般情况下不是root用户,对端口没有权限.
• 遇到这种情况,一般这样做:
终端输入:sudo chmod 777 /dev/ttyUSB0
在这里插入图片描述
• 修改权限为可读可写可执行,但是这种设置电脑重启后,又会出现这种问题,还要重新设置.因此查询资料,可以用下面这条指令:
• 终端输入:sudo usermod -aG dialout wsh
• 其中wsh是我的用户名,换成你想用USB的用户名即可.把此用户名加入dialout用户组,然后注销下电脑,即可.这样下次重启也不用修改权限了
在这里插入图片描述
ROS运行代码

  1. 新终端运行roscore
$ roscore
  1. 新终端运行,/dev/ttyUSB0为Arduino设备端口号
rosrun rosserial_python serial_node.py /dev/ttyUSB0

rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0

在这里插入图片描述
3. 新端口显示主题chatter,获取Arduino板反馈的信息

rostopic echo chatter

在这里插入图片描述


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值