机器人系统实验(4):2020.10.20

it2023-02-20  80

一、实验内容

1.使用物理仿真器代替小乌龟 2.使用可视化工具观察话题数据 3.自定义物理世界模型

二、相关知识

1.Gazebo

机器人物理环境仿真工具,3D动态模拟器,能够在复杂的室内和室外环境中准确有效地模拟机器人群 用途:测试机器人算法;设计机器人;用现实场景进行回归测试 特点:包含多个物理引擎;包含丰富的机器人模型和环境库;包含各种各样的传感器;程序设计方便和具有简单的图形界面

2.RViz

ROS的三维可视化⼯具 以三维⽅式显⽰ROS消息,可以将数据进⾏可视化表达

三、实验步骤

1.新建launch文件lesson5.launch存放在launch文件夹下,在其中添加如图内容,用来启动Gazebo,注意是引用别人的包,而不是自己的包名

<launch> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="use_sim_time" value="true"/> <arg name="gui" value="true"/> </include> </launch>

2.完全启动后界面如图

3.将下载的ball.urdf文件存放在如图路径下

4.将下载的Rivz文件存放在如图路径下,并重命名为ball_clz.rviz

5.在lesson5.launch文件中新建如下内容

<node pkg=”gazebo_ros” type=”spawn_model” name=”gazebo_spawn” args=-file $(find my_first_package)/urdf/ball.urdf -urdf -x 3 -y 0 -z 0 -model MYROBOT3”/>语句用于装载全向移动小球 <param name=”robot_description” textfile=”$(find my_first_package)/urdf/ball.urdf”/>语句用于为rviz装载小球模型

6.基础launch文件如图

7.可以增加一些语句达到启动时直接运行结点以及启动rviz的功能

<launch> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="use_sim_time" value="true"/> <arg name="gui" value="true"/> </include> <node pkg=”gazebo_ros” type=”spawn_model” name=”gazebo_spawn” args=-file $(find my_first_package)/urdf/ball.urdf -urdf -x 3 -y 0 -z 0 -model MYROBOT3”/> <param name=”robot_description” textfile=”$(find my_first_package)/urdf/ball.urdf”/> <node pkg="my_first_package" name="draw_circle2" type="draw_circle2_node"/>#可以直接运行转圈文件 <node name="rviz" pkg="rviz" type="rviz"/> </launch>

8.为小球创建一个新的轨迹,命名为draw_circle2,其中大致内容与小乌龟的相同但要更改话题名称

#include "ros/ros.h" #include <geometry_msgs/Twist.h> //运动速度结构体类型 int main(int argc, char *argv[]) { ros::init(argc,argv,"fangcundi_drawcircle2_node");//对该节点进行初始化操作,并进行名称的定义 ros::NodeHandle n;//申明一个NodeHandle对象n,并用n生成一个广播对象vel_pub ros::Publisher vel_pub=n.advertise<geometry_msgs::Twist>("/cmd_vel",10);//vel_pub会在主题“/turtle1/cmd_vel”机器人速度控制主体里广播geometry_msgs::Twist类型的数据 ROS_INFO("draw_circle start...");//输出显示信息 while(ros::ok()) { /* ros::ok()返回false,可能是发生了以下事件 1、SIGINT被触发,即输入了Ctrl C,调用了ros::shetdown() 2、被另一个同名节点提出ros网络 3、ros::shutdown()被程序的一部分调用 4、节点中的所有ros::NodeHandles都已经被销毁 */ geometry_msgs::Twist vel_cmd; vel_cmd.linear.x=2.0;//控制前进后退的线速度 vel_cmd.linear.y=0.0;//控制左右平移的线速度 vel_cmd.linear.z=0.0; vel_cmd.angular.x=0; vel_cmd.angular.y=0; vel_cmd.angular.z=1.0;//控制x-y平面内旋转的角速度,逆时针为正,单位为弧度 vel_pub.publish(vel_cmd); ros::spinOnce();//调用此函数给其他回调函数得以执行 } return 0; }

9.将新建的节点信息写进cmake文件中

10.保存以上文件,运行launch文件

11.如果出现打开黑屏或者打不开的问题,输入export SVGA_VGPU10=0关闭GPU显卡

12.输入rviz ball_clz.rviz运行RViz

新开一个终端,输入:rviz rviz.rivz

13.手动添加如下两项

14.针对odometry进行具体设置

15.建立建筑模型

16.建立建筑

17.增加纹理

18.保存模型

19.插入到世界中

20.保存世界模型

四、遇到的问题及解决方法

1.问题一:启动的gazebo界面上小球是静止的而不是按圆形轨迹运动

首先推测是结点没有正常运行,可能杀死launch文件中内容有误,因此采用手动启动的方式进行检测,使用命令rosrun my_first_package draw_circle2_node

出现报错,提示找不到结点,梳理了步骤发现虽然这次记得在cmake文件里加入新代码的信息但忘记编译新写的circle2文件了

编译后即可正常运行,启动launch文件并使用rosrun命令运行结点即可得到按圆轨迹运动的小球

再使用命令rviz ball_clz.rviz即可启动rviz,使用ADD添加后即可观察到轨迹

最新回复(0)