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

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

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


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

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

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


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

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


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


Arduino IDE:

VS Code:


碎片与统一?


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仿真

 


了解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查找:

rosserial arduino库

确保Rosserial Arduino Library 0.7.9安装完成。

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

 rosserial arduino library

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

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

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

ros::NodeHandle  nh;

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

ros::Subscriber<std_msgs::Empty> 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

使用如下命令开关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 <ros.h>
#include <std_msgs/String.h>
#include <std_msgs/Empty.h>

ros::NodeHandle  nh;


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

ros::Subscriber<std_msgs::Empty> 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);
}
pubsub
rosgraph

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangrelay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值