ros_arduino_brige功能包使用和安装这里就不多说了,详情点击

先看一下ros_arduino_brige功能包的文件系统

├── README.md
├── ros_arduino_bridge                      # metapackage (元包)
│   ├── CMakeLists.txt
│   └── package.xml
├── ros_arduino_firmware                    #固件包,更新到Arduino
│   ├── CMakeLists.txt
│   ├── package.xml
│   └── src
│       └── libraries                       #库目录
│           ├── MegaRobogaiaPololu          #针对Pololu电机控制器,MegaRobogaia编码器的头文件定义
│           │   ├── commands.h              #定义命令头文件
│           │   ├── diff_controller.h       #差分轮PID控制头文件
│           │   ├── MegaRobogaiaPololu.ino  #PID实现文件
│           │   ├── sensors.h               #传感器相关实现,超声波测距,Ping函数
│           │   └── servos.h                #伺服器头文件
│           └── ROSArduinoBridge            #Arduino下位机部分,可以根据自己搭建的下位机进行修改
│               ├── commands.h              #定义命令
│               ├── diff_controller.h       #差分轮PID控制头文件
│               ├── encoder_driver.h        #编码器驱动头文件,定义插脚(pins)
│               ├── encoder_driver.ino      #编码器驱动实现, 读取编码器数据,重置编码器等
│               ├── motor_driver.h          #电机驱动头文件
│               ├── motor_driver.ino        #电机驱动实现,初始化控制器,设置速度
│               ├── ROSArduinoBridge.ino    #核心功能实现,
│               ├── sensors.h               #传感器头文件及实现
│               ├── servos.h                #伺服器头文件,定义插脚,类
│               └── servos.ino              #伺服器实现
├── ros_arduino_msgs                        #消息定义包
│   ├── CMakeLists.txt
│   ├── msg                                 #定义消息
│   │   ├── AnalogFloat.msg                 #定义模拟IO浮点消息
│   │   ├── Analog.msg                      #定义模拟IO数字消息
│   │   ├── ArduinoConstants.msg            #定义常量消息
│   │   ├── Digital.msg                     #定义数字IO消息
│   │   └── SensorState.msg                 #定义传感器状态消息
│   ├── package.xml
│   └── srv                                 #定义服务
│       ├── AnalogRead.srv                  #模拟IO输入
│       ├── AnalogWrite.srv                 #模拟IO输出
│       ├── DigitalRead.srv                 #数字IO输入
│       ├── DigitalSetDirection.srv      #数字IO设置方向
│       ├── DigitalWrite.srv                #数字IO输入
│       ├── ServoRead.srv                   #伺服电机输入
│       └── ServoWrite.srv                  #伺服电机输出
└── ros_arduino_python                      #ROS相关的Python包,用于上位机,树莓派等开发板或电脑等。├── CMakeLists.txt├── config                              #配置目录│   └── arduino_params.yaml             #定义相关参数,我们需要对此修改才能使用。由arduino.launch调用├── launch│   └── arduino.launch                  #启动文件├── nodes│   └── arduino_node.py                 #python文件,实际处理节点,由arduino.launch调用,即可单独调用。├── package.xml├── setup.py└── src                                 #Python类包目录└── ros_arduino_python├── arduino_driver.py           #Arduino驱动类├── arduino_sensors.py          #Arduino传感器类├── base_controller.py          #基本控制类,订阅cmd_vel话题,发布odom话题└── __init__.py                 #类包默认空文件

当下位机程序烧好之后,来重点看一下上位机的程序
先看一下给好的launch文件

<launch><node name="arduino" pkg="ros_arduino_python" type="arduino_node.py" output="screen"><rosparam file="$(find ros_arduino_python)/config/my_arduino_params.yaml" command="load" /></node>
</launch>

它引用的是/config/my_arduino_params.yaml这个文件,而最初的是没有这个文件的,我们只需要把/config/arduino_params.yaml复制一份改个名字就好了,一起看一下这个文件,里面有几个需要注意的地方,下面这个是我改好的我使用的

rate: 50
sensorstate_rate: 10use_base_controller: True     #你要修改的部分 改为True
base_controller_rate: 10# For a robot that uses base_footprint, change base_frame to base_footprint
base_frame: base_link# === 这部分是车子的参数,比如轮子直径,减速比,编码器信息等,根据你自己的车子来修改
wheel_diameter: 0.065        #你要修改的部分
wheel_track: 0.125          #你要修改的部分
encoder_resolution: 8384     #你要修改的部分
gear_reduction: 1.0          #你要修改的部分
motors_reversed: False        #你要修改的部分# === PID 部分,控制轮速,修改到车子能够根据命令走直线且速度稳定
Kp: 10                       #你要修改的部分
Kd: 12                       #你要修改的部分
Ki: 0                        #你要修改的部分
Ko: 50                       #你要修改的部分
accel_limit: 1.0             #你要修改的部分# === Sensor definitions.  Examples only - edit for your robot.
#     Sensor type can be one of the follow (case sensitive!):
#   * Ping
#   * GP2D12
#   * Analog
#   * Digital
#   * PololuMotorCurrent
#   * PhidgetsVoltage
#   * PhidgetsCurrent (20 Amp, DC)sensors: {#motor_current_left:   {pin: 0, type: PololuMotorCurrent, rate: 5},#motor_current_right:  {pin: 1, type: PololuMotorCurrent, rate: 5},#ir_front_center:      {pin: 2, type: GP2D12, rate: 10},#sonar_front_center:   {pin: 5, type: Ping, rate: 10},arduino_led:          {pin: 13, type: Digital, rate: 5, direction: output}
}

通常我们既然使用了这个功能包,无非改个电机驱动编码器驱动,这个use_base_controller要改为True的,要不然发布twist消息小车也不会有响应的
再检查一下电机转动方向

$ rostopic pub -1 /cmd_vel geometry_msgs/Twist '{ angular: {z: 0.5} }'

这时两个轮子的转动方向应该是一致的,都是逆时针转动(右轮前进,左轮后退)。如果它们转动方向相反,那么就将motors_reversed 参数改为与之前相反的值,然后用ctrl+c 停止该节点,然后重新启动arduino.launch文件。

现在再发布twist消息小车应该是可以正常运行的了!

查看一下rqt_graph

用键盘控制小车

方法一:
安装键盘控制程序,直接安装在小车的workspace里面就可以

cd ~/catkin_ws/src
git clone https://github.com/ros-teleop/teleop_twist_keyboard.git
catkin_make

然后先把下车运行起来之后,打开新终端,启用键盘控制

rosrun teleop_twist_keyboard teleop_twist_keyboard.py


然后小车就可以用键盘控制了!

方法二:
下载turtlebot的功能包,利用ROS的重映射机制,把本来发布给turtlebot的速度话题让我们的机器人也能接收到

sudo apt-get install ros-kinetic-turtlebot-teleop

文件目录如下

打开keyboard_teleop.launch

<launch><!-- turtlebot_teleop_key already has its own built in velocity smoother --><node pkg="turtlebot_teleop" type="turtlebot_teleop_key" name="turtlebot_teleop_keyboard"  output="screen"><param name="scale_linear" value="0.5" type="double"/><param name="scale_angular" value="1.5" type="double"/><remap from="turtlebot_teleop_keyboard/cmd_vel" to="/cmd_vel"/>//这个需要更改</node>
</launch>

上面的remap改一下,我忘了本来的是什么了,改成这样就对了,我们自己造的机器人通常都会用/cmd_vel来发布速度话题
然后

roslaunch turtlebot_teleop keyboard_teleop.launch

发现也可以控制我们的小车!!

用Xbox one手柄 控制小车

手柄的配置请看我的这篇博客
大家可以用上面博客的方法,也可以用下面这个方法

下载turtlebot的功能包,利用ROS的重映射机制,把本来发布给turtlebot的速度话题让我们的机器人也能接收到
文件目录如下:

打开xbox360_telelop.launch
(这个文件默认为只读文件,我们要修改,可以用这个命令:)

sudo gedit xbox360_telelop.launch
<launch><!--Push the left frontal button labeled as 'LB' to activate cmd_vel publishing.Move the left stick around to control the velocity.--><!--  smooths inputs from cmd_vel_mux/input/teleop_raw to cmd_vel_mux/input/teleop --><include file="$(find turtlebot_teleop)/launch/includes/velocity_smoother.launch.xml"/><node pkg="turtlebot_teleop" type="turtlebot_teleop_joy" name="turtlebot_teleop_joystick"><param name="scale_angular" value="1.5"/><param name="scale_linear" value="0.5"/><param name="axis_deadman" value="4"/><param name="axis_linear" value="1"/><param name="axis_angular" value="0"/><remap from="turtlebot_teleop_joystick/cmd_vel" to="/cmd_vel"/>//这个是要修改的地方</node><node pkg="joy" type="joy_node" name="joystick"/></launch>

上面的remap改一下,我忘了本来的是什么了,改成这样就对了,我们自己造的机器人通常都会用/cmd_vel来发布速度话题
然后,打开新终端运行:

roslaunch turtlebot_teleop xbox360_teleop.launch

然后还有一个需要注意的地方,这里需要按着LB键移动摇杆才可以,刚开始忽略了这个,浪费了很多时间~
下面移动摇杆小车就可以跑起来了!

如果还不行,那就是手柄的权限问题:https://blog.csdn.net/weixin_44827364/article/details/104024261
可以查看我的这篇博客,给手柄赋予一下权限,也可以看下面这个截图

ROS与Arduino:用Twist消息+用键盘+用Xbox one手柄 控制小车相关推荐

  1. [转]基于ROS平台的移动机器人-4-通过ROS利用键盘控制小车移动

    原文出处: https://blog.csdn.net/Forrest_Z/article/details/55002484 准备工作 1.下载串口通信的ROS包 (1)cd ~/catkin_ws/ ...

  2. ros与arduino通信控制直流电机

    前言:在成功通过arduino开发板控制直流电机后,开始尝试用ros与arduino通信来控制直流电机,为无人小车作准备 参考教程:创客智造 1.硬件 arduino开发板.杜邦线.直流电机.L298 ...

  3. 【从零开始的ROS四轴机械臂控制】(七)- ROS与arduino连接

    从零开始的ROS四轴机械臂控制(七) 十.ROS与arduino连接 1.虚拟机与arduino的连接 (1)arduino连接与IDE (2)PCA9685模块支持与测试 2.ROS与arduino ...

  4. ROS与Arduino学习(三)订阅与发布

    ROS与Arduino学习(三)订阅与发布 Tutorial Level:HelloWorld Next Tutorial:用ROS的Cmake编译程序 本节介绍如何在arduino中发布与订阅消息. ...

  5. ROS与Arduino学习(六)Logging日志

    ROS与Arduino学习(六)Logging日志 Tutorial Level:客户端与服务器 Next Tutorial:小案例节点通信      本节较为简单告诉大家如何向系统发布日志信息. T ...

  6. jeston nano开发板 在ubuntu18.04环境下搭建的ROS和arduino小车

    一.准备安装Ubuntu系统 (在vmware上安装)#方便后面的调试 首先,需要我们去官网下载镜像文件,但是由于官方的服务器搭建在境外,因此我们更倾向于使用国内镜像进行下载,比如清华大学镜像,一般来 ...

  7. ROS与Arduino的通信

    这篇文章提到可以使用两种方法对Arduino开发板进行通信,一种是基于ros通讯机制的rosserial进行通信,一种是直接使用串口进行通信.两种方法各有优缺点,本文对两种方法进行了简单的整理和总结. ...

  8. opencv + python3 利用ros 的 cv_bridge 传送图像消息的一种替代方法

    opencv + python3 利用ros 的 cv_bridge 传送图像消息的一种替代方法 利用自定义的图像类型代替sensor_msgs/Image, python2可以使用cv_bridge ...

  9. 「ROS Kinetic」发布速度消息cmd_vel

    文章目录 Twist 终端发布Twist消息控制机器人 节点发布Twist消息控制机器人 Twist 发布Twist消息控制机器人,其实这个Twist消息,它的Topic是/cmd_vel,base ...

最新文章

  1. (0001) iOS 开发之收集第三方资源篇
  2. 计算机网络怎么查看连接打印机驱动,如何检测网络打印机是否已成功连接到计算机[检测方法]...
  3. mysql自带客户端连接服务器,客户端连接mysql服务器的指令 mysql -u root -p 详细讲解及使用实例...
  4. pytorch构建LSTM处理二分类任务
  5. 警告框(AlertView)与进度轮结合使用
  6. 国内外邮箱、邮件服务大全 常见+非主流+免费+加密+域名邮箱
  7. Eviews操作笔记自用(横截面数据)
  8. ai面试的优缺点_AI面试是什么?有哪些特点呢?
  9. html中 DPlayer 播放m3u8文件【方式二】
  10. 重塑汽车产业价值链,ChinaJoy诚邀造车新势力加盟
  11. SpringBoot项目端点配置
  12. 服务器put请求获取不到参数
  13. 2016秋季找工作纪实
  14. HTML5期末大作业:体育篮球网站设计——篮球活动(9页) HTML+CSS+JavaScript 校园篮球网页作业成品 学校篮球网页制作模板 学生简单体育运动网站设计成品
  15. TPA4411RTJR
  16. 混合型数据的邻域条件互信息熵属性约简算法
  17. 深入理解c++函数调用的参数传递与局部变量申请
  18. jquery中的ready方法和window的onload方法的区别
  19. 中国PETG市场预测及战略研究报告(2022版)
  20. 2020-04-11

热门文章

  1. 初识EMC元器件(六)——磁珠的参数解读及选型应用
  2. Java对接阿里云图片审核(鉴黄、暴恐涉政、广告等等)
  3. 程序员-数据库选型经验
  4. 微信公众号、人脉拓展、运营
  5. 查看及配置交换机管理地址
  6. 解决苹果CMS采集后没有显示图片的问题
  7. putty 串口调试设置
  8. Java将文件上传到ftp服务器
  9. 【零基础学机器学习 1】什么是机器学习?
  10. lol游戏加载显示无法连接服务器,登陆了LOL之后在进入游戏加载的时候出现了没法连接服务器...