一、实验内容
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,其中大致内容与小乌龟的相同但要更改话题名称
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添加后即可观察到轨迹