0

购物车

客服

收藏

公众号

公众号

反馈

︿

顶部

首页 > 工控资讯 > 产品资讯 >电气安装>资讯详情

控制伺服机运转顺畅的ROS程序设计

2019-03-06 浏览量:75

点击分享到微信

  ROS(Robot OperatingSystem)是开源的机器人系统平台。使用这个之后,机器人就可以看见东西、测绘、导航,或是以最新的算法作用于周围的环境当中。假如想要制造复杂的机器人,已经准备好的ROS程序代码就能派上用场。ROS能在最低限度下运用。这可以透过Raspberry Pi等级的计算机安装。

  做为ROS的入门篇我们来看看如何控制伺服机。伺服机的缺点是会尽快遵照指令运转,因此头部常常会突然活动,以至于失去平衡。不过使用ROS之后,就可以进行正弦曲线运动,让机器人保持稳定。由于可以在ROS当中进行这项操作,因此无须改写控制用的程序代码。另外,连接伺服机和ROS的程序代码,以及伺服机的硬件都无须变更。再者,程序代码还可以任意使用。

  ROS很适合用在Ubuntu或Debian上,无须编译。建置时要在Linux机器上执行Ubuntu,使用业余用伺服机、Arduino和普通的导线。ROS要在Ubuntu机器上启动,讯息则透过USB传送到Arduino。只要安装二进制的ROS套件,就会在主控台程序(像是gnome-terminal或konsole)追加以下指令,这样Arduino系统就能辨识ROS函式库。

  cd~/sketchbook/libraries

  rm-rf ros_lib

  rosrunrosserial_arduino make_l ibraries.py .

  Arduino的程序

  接下来要将程序代码上传到Arduino当中,执行低阶的伺服机控制,以便能从Linux机器操作。这时要以限制范围内的百分比(0.0~1.0)指定伺服机的位置。之所以使用百分比而不是写明角度,是因为Arduino的程序代码限制了正确的角度,要避免在指定角度时发生冲突。

  就如各位所见,使用ROS之后,一般的循环函数就会变得相当简单。循环函数只会订阅(subscribe)数据,任何Arduino循环都一样。设定时要将ROS初始化,将各个ROS讯息订阅者的订阅叫出来。每个订阅者会占据Arduino的RAM,数量取决于要用程序代码做什么,以6个到12个为限。

  #include

  #include

  #include

  #include

  #define SERVOPIN 3

  Servo servo;

  void servo_cb( const std_msgs::Float32& msg )

  {

  const float min = 45;

  const float range = 90;

  float v = msg.data;

  if( v > 1 ) v = 1;

  if( v < 0 ) v = 0;

  float angle = min + (range * v);

  servo.write(angle);

  }

  ros::Subscriber

  ros::NodeHandle nh;

  void setup()

  {

  servo.attach(SERVOPIN);

  nh.initNode();

  nh.subscribe(sub);

  }

  void loop()

  {

  nh.spinOnce();

  delay(1); }

  接下来要设法透过Arduino在ROS的世界说话。最简单的方法是使用机器人启动档。虽然以下的档案内容非常简单,但是这里要追加启动档,如此一来即使是非常复杂的机器人,也能用一个指令启动。

  $ cat rosservo.launch

  $ roslaunch ./rosservo.lanch

  rostopic指令可以看出ROS讯息传送到机器人的哪个部位。看了下面的程序代码就会发现,「/head/tilt」可以透过Arduino使用。讯息要使用「rostopic」传送。-1的选项只会发布(publish)讯息一次,通知/head/tilt传送一个浮点数。

  $ rostopic list

  /diagnostics

  /head/tilt

  /rosout

  /rosout_agg

  $ rostopic pub -1 /head/tiltstd_msgs/Float32 0.4

  $ rostopic pub -1 /head/tilt std_msgs/Float320.9

  这个阶段当中,能够将所有发布数值到ROS的已知方法用在控制伺服机上。假如从0改成1,伺服机就会全速运行。这本来并没有问题,但实际上我们想要逐渐加速以达到全速,然后再逐渐减速,停在目标角度上。假如伺服机骤然运转,机器人的动作就会变得僵硬,让周围的人吓一跳。

文章图片来源于网络
免责声明: 凡注明来源“易卖工控网”的所有作品,均为本站合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本站作品均来自互联网,转载目的仅作为互联网信息传播之用,并不代表本网赞同其观点和对其真实性、完整性、及时性不作任何保证或负责。

热门产品资讯
最新产品资讯
相关资讯
产品推广
为您推荐“电气安装”相关产品