没有合适的资源?快使用搜索试试~ 我知道了~
ROS机器人操作系统.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 3 浏览量
2023-07-11
22:06:30
上传
评论
收藏 2.88MB DOCX 举报
温馨提示
试读
70页
ROS机器人操作系统.docx
资源推荐
资源详情
资源评论
根目录中还有 rviz 的配置文件 urdf.vcg,只要大家在 rviz 中修改界面或者参数,推出
的时候保存,就会自动修改这个文件了。
config 文件夹下的是仿真用到的配置文件。
ROS(Robot Operating System)操作系统探索总结(八)
键盘控制
如果尝试过前面的例子,有没有感觉每次让机器人移动还要在终端里输入指令,这也太
麻烦了,有没有办法通过键盘来控制机器人的移动呢?答案室当然的了。我研究了其他几个机
器人键盘控制的代码,还是有所收获的,最后移植到了 smartcar 上,实验成功。
一、创建控制包
首先,我们为键盘控制单独建立一个包:
01.roscreate-pkg smartcar_teleop rospy geometry_msgs std_msgs roscpp
02.rosmake
二、简单的消息发布
在机器人仿真中,主要控制机器人移动的就是 在机器人仿真中,主要控制机器人移动的
就是 Twist()结构,如果我们编程将这个结构通过程序发布成 topic,自然就可以控制机器人
了。我们先用简单的 python 来尝试一下。
之前的模拟中,我们使用的都是在命令行下进行的消息发布,现在我们需要把这些命令
转换成 python 代码,封装到一个单独的节点中去。针对之前的命令行,我们可以很简单的在
smartcar_teleop /scripts 文件夹下编写如下的控制代码:
01.#!/usr/bin/env python
02.import roslib; roslib.load_manifest('smartcar_teleop')
03.import rospy
04.from geometry_msgs.msg import Twist
05.from std_msgs.msg import String
06.
07.class Teleop:
08. def __init__(self):
09. pub = rospy.Publisher('cmd_vel', Twist)
10. rospy.init_node('smartcar_teleop')
11. rate = rospy.Rate(rospy.get_param('~hz', 1))
12. self.cmd = None
13.
14. cmd = Twist()
15. cmd.linear.x = 0.2
16. cmd.linear.y = 0
17. cmd.linear.z = 0
18. cmd.angular.z = 0
19. cmd.angular.z = 0
20. cmd.angular.z = 0.5
21.
22. self.cmd = cmd
23. while not rospy.is_shutdown():
24. str = "hello world %s" % rospy.get_time()
25. rospy.loginfo(str)
26. pub.publish(self.cmd)
27. rate.sleep()
28.
29.if __name__ == '__main__':Teleop()
python 代码在 ROS 重视不需要编译的。先运行之前教程中用到的 smartcar 机器人,在 rviz
中进行显示,然后新建终端,输入如下命令:
01.rosrun smartcar_teleop teleop.py
也可以建立一个 launch 文件运行:
01.<launch>
02. <arg name="cmd_topic" default="cmd_vel" />
03. <node pkg="smartcar_teleop" type="teleop.py" name="smartcar_teleop">
04. <remap from="cmd_vel" to="$(arg cmd_topic)" />
05. </node>
06.</launch>
在 rviz 中看一下机器人是不是动起来了!
三、加入键盘控制
当然前边的程序不是我们要的,我们需要的键盘控制。
1、移植
因为 ROS 的代码具有很强的可移植性,所以用键盘控制的代码其实可以直接从其他机器
人包中移植过来,在这里我主要参考的是 erratic_robot,在这个机器人的代码中有一个
erratic_teleop 包,可以直接移植过来使用。
首先,我们将其中 src 文件夹下的 keyboard.cpp 代码文件直接拷贝到我们
smartcar_teleop 包的 src 文件夹下,然后修改 CMakeLists.txt 文件,将下列代码加入文件
底部:
01.rosbuild_add_boost_directories()
02.rosbuild_add_executable(smartcar_keyboard_teleop src/keyboard.cpp)
03.target_link_libraries(smartcar_keyboard_teleop boost_thread)
编译完成后,运行 smartcar 模型。重新打开一个终端,打开键盘控制节点:
在终端中按下键盘里的“W”、“S”、“D”、“A”以及“Shift”键进行机器人的控制。
效果如下图:
2、复用
因为代码是我们直接复制过来的,其中有很多与之前 erratic 机器人相关的变量,我们
把代码稍作修改,变成自己机器人可读性较强的代码。
01.#include <termios.h>
02.#include <signal.h>
03.#include <math.h>
04.#include <stdio.h>
05.#include <stdlib.h>
06.#include <sys/poll.h>
07.
08.#include <boost/thread/thread.hpp>
09.#include <ros/ros.h>
10.#include <geometry_msgs/Twist.h>
11.
12.#define KEYCODE_W 0x77
13.#define KEYCODE_A 0x61
14.#define KEYCODE_S 0x73
15.#define KEYCODE_D 0x64
16.
17.#define KEYCODE_A_CAP 0x41
18.#define KEYCODE_D_CAP 0x44
19.#define KEYCODE_S_CAP 0x53
20.#define KEYCODE_W_CAP 0x57
21.
22.class SmartCarKeyboardTeleopNode
23.{
24. private:
25. double walk_vel_;
26. double run_vel_;
27. double yaw_rate_;
28. double yaw_rate_run_;
29.
30. geometry_msgs::Twist cmdvel_;
31. ros::NodeHandle n_;
32. ros::Publisher pub_;
33.
34. public:
35. SmartCarKeyboardTeleopNode()
36. {
37. pub_ = n_.advertise<geometry_msgs::Twist>
("cmd_vel", 1);
38.
39. ros::NodeHandle n_private("~");
40. n_private.param("walk_vel", walk_vel_, 0.5);
41. n_private.param("run_vel", run_vel_, 1.0);
42. n_private.param("yaw_rate", yaw_rate_, 1.0);
43. n_private.param("yaw_rate_run", yaw_rate_run_,
1.5);
44. }
45.
46. ~SmartCarKeyboardTeleopNode() { }
47. void keyboardLoop();
48.
49. void stopRobot()
50. {
51. cmdvel_.linear.x = 0.0;
52. cmdvel_.angular.z = 0.0;
53. pub_.publish(cmdvel_);
54. }
55.};
56.
57.SmartCarKeyboardTeleopNode* tbk;
58.int kfd = 0;
59.struct termios cooked, raw;
60.bool done;
61.
62.int main(int argc, char** argv)
63.{
64. ros::init(argc,argv,"tbk", ros::init_options::AnonymousName |
ros::init_options::NoSigintHandler);
65. SmartCarKeyboardTeleopNode tbk;
剩余69页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 79
- 资源: 2万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功