机器人控制器编程课程-教案01-初识

课程主要介绍Arduino,辅助补充ROS机器人操作系统(1&2)。有兴趣同学可以参考如下链接:

基于ROS_Arduino室内移动机器人SLAM实验测试


什么是机器人?什么是控制器?什么是编程?

什么是机器人控制器??什么是控制器编程??

什么是机器人控制器编程???


课程大纲和要求介绍,第一章1-24页。

分别介绍了起源、类型和安装并下载一个blink示例程序。


为什么选择Arduino,并介绍ROS?


Arduino IDE:

机器人控制器编程课程-教案01-初识_第1张图片

VS Code:

机器人控制器编程课程-教案01-初识_第2张图片

机器人控制器编程课程-教案01-初识_第3张图片


碎片与统一?


ROS机器人操作系统:

turtlesim:

ros2 run turtlesim turtlesim_node

ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.2}}"

tello:

ros2 service call /tello_action tello_msgs/TelloAction "{cmd: 'takeoff'}"

ros2 service call /tello_action tello_msgs/TelloAction "{cmd: 'land'}"

ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.2}}"

cozmo:

ros2 run cozmo_driver_ros2 cozmo_driver

ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.2}}"


如果在windows系统出现安装驱动问题,系统找不到指定文件,解决方法参考:

  • Arduino驱动安装失败解决办法——系统找不到指定文件

如果不愿意购买Arduino硬件,那么可以选用仿真完成部分实验:

  • 基于Proteus的Arduino仿真
机器人控制器编程课程-教案01-初识_第4张图片 Arduino仿真

 


了解Arduino和ROS之后,如何将两者联系起来呢?

这里以最新版本的ROS 1 Melodic做介绍。安装对应功能包:

 sudo apt install ros-melodic-rosserial-arduino 

全部支持的串口通讯方式有:

ros-melodic-rosserial                ros-melodic-rosserial-server
ros-melodic-rosserial-arduino        ros-melodic-rosserial-server-dbgsym
ros-melodic-rosserial-client         ros-melodic-rosserial-tivac
ros-melodic-rosserial-embeddedlinux  ros-melodic-rosserial-vex-cortex
ros-melodic-rosserial-mbed           ros-melodic-rosserial-vex-v5
ros-melodic-rosserial-msgs           ros-melodic-rosserial-windows
ros-melodic-rosserial-python         ros-melodic-rosserial-xbee

安装完成后,进行环境配置:

打开Arduino IDE(本文版本为1.8.9),直接进入库管理(library Manager),在搜索框输入ros查找:

机器人控制器编程课程-教案01-初识_第5张图片 rosserial arduino库

确保Rosserial Arduino Library 0.7.9安装完成。

这时候,就可以在文件File,示例Examples,自定义示例Costom中找到丰富的示例:

机器人控制器编程课程-教案01-初识_第6张图片  rosserial arduino library

 打开一个示例看一看吧,Blink(ROS版本):

/* 
 * rosserial Subscriber Example
 * Blinks an LED on callback
 */

#include 
#include 

ros::NodeHandle  nh;

void messageCb( const std_msgs::Empty& toggle_msg){
  digitalWrite(13, HIGH-digitalRead(13));   // blink the led
}

ros::Subscriber sub("toggle_led", &messageCb );

void setup()
{ 
  pinMode(13, OUTPUT);
  nh.initNode();
  nh.subscribe(sub);
}

void loop()
{  
  nh.spinOnce();
  delay(1);
}

注意串口权限问题,sudo chmod 777 /dev/ttyACM0。/dev/ttyACM0为对应串口号。

程序上传至开发版后,依次运行如下命令:

1. roscore

2. rosrun rosserial_python serial_node.py /dev/ttyACM0

机器人控制器编程课程-教案01-初识_第7张图片

使用如下命令开关LED灯:

rostopic pub toggle_led std_msgs/Empty --once

闪烁:

rostopic pub toggle_led std_msgs/Empty -r 2

/*
 * rosserial PubSub Example
 * Prints "hello world!" and toggles led
 */

#include 
#include 
#include 

ros::NodeHandle  nh;


void messageCb( const std_msgs::Empty& toggle_msg){
  digitalWrite(13, HIGH-digitalRead(13));   // blink the led
}

ros::Subscriber sub("toggle_led", messageCb );



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

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

void setup()
{
  pinMode(13, OUTPUT);
  nh.initNode();
  nh.advertise(chatter);
  nh.subscribe(sub);
}

void loop()
{
  str_msg.data = hello;
  chatter.publish( &str_msg );
  nh.spinOnce();
  delay(500);
}
机器人控制器编程课程-教案01-初识_第8张图片 pubsub rosgraph

 

你可能感兴趣的:(课程-机器人控制器编程-)