1.下载仿真素材
<!-- 皮肤,这个标签可以直接让一个现实的机器人模型导入到link中来,当然要先制作相应的皮肤 -->
<mesh /> ---------------仿真素材就用在这个标签里使用
把下载好的两个.stl文件保存到对应工作空间的meshes文件夹下,然后在vscode里就能看到了
终端方式:
interest@interest:~$ cd 仿真素材
interest@interest:~/仿真素材$ git clone https://github.com/zx595306686/sim_demo.git
正克隆到 'sim_demo'...
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 10 (delta 0), reused 10 (delta 0), pack-reused 0
展开对象中: 100% (10/10), 4.76 MiB | 1.12 MiB/s, 完成.
如果报错,
(法二)更换手机热点网试试
(法三)可在自己电脑上下载再拉到虚拟机里
2.文件的作用
文件名 | 作用 |
launch | 同时启动多个节点,可看作一种整合工具 |
urdf | 机器人模型参数 urdf 基本的文件 (比较复杂) xacro 升级的文件(简化urdf) |
meshes | 机器人皮肤(只为支架?) |
config | 配置文件 |
3.urdf语法详解
机器人两大部分
连杆(link),机器人刚体部分(可见的),比如:雷达、支架(雷达和底盘连接的那个灰色的圆柱)、底盘、摄像头、车轮都可以看作单独的连杆。
-
collision ---> 连杆的碰撞属性;仿真环境下机器人会和周边环境产生碰撞,怎么界定与周围产生碰撞了呢? 通过碰撞参数collision,给机器人固件包裹在一个区域内,只要障碍物进入这个区域内,就会认为发生碰撞。
-
Inertial ---> 连杆的惯性矩阵;仿真时也会模拟我们真实世界的某些动作,比如:机器人在起步或刹车时,机器人固件可能会产生后仰或前移,这是有惯性导致的;甚至重心比较高,重量比较大的情况下可能还会产生翻车的情况;像这种物理运动可以通过惯性矩阵来设置,可以设置相应参数模拟真实世界的情况。
-
visual里的metrial细节:metrial是在rviz环境下生效的,为连杆设置颜色;如果是在gazebo仿真环境下还要用其他标签来设置颜色
-
<!-- 颜色: r=red g=green b=blue a=alpha透明度(0是透明,1是不透明);四者取值介于0-1之间 --> <material name="car_color"> <color rgba="0.7 0.5 0 1" /> </material>
关节(joint),机器人不可见的部分,比如:雷达和支架之间需要通过关节连接,类似于现实生活中的螺丝钉把两者钉在一起。
- 让摄像头旋转时疯狂抖动,把关节状态发布节点放在机器人状态发布节点后边和rviz启动节点放在最后一行可能会解决。
- 抖动的原因:是因为模型之间有重合,旋转碰撞后会把摄像头弹回去,调整一下相对位置就好了。
- 调整相对位置我没有解决抖动,是在网上看别人说的。
其它:
robot 根标签,类似于 launch文件中的launch标签;保证(URDF 文件是一个标准的 XML 文件)XML文件的的完整性。
gazebo标签,后期在使用 gazebo 仿真时,才需要使用到,用于配置仿真环境所需参数,比如: 机器人材料属性、gazebo插件等,但是该标签不是机器人模型必须的,只有在仿真时才需设置。
4.想要优化建好的urdf,不用每次进入rviz都要改parent link和Add
//1
<node pkg="rviz" type="rviz" name="rviz" />
//2
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf1_rviz)/config/urdf.rviz" />
解释:
先用1启动rviz,然后添加完东西好后进行保存,保存在config目录下;再用2启动rviz就可以看到上次操作保存好的。 ---------------------但我有时成功,有时不成功
保存好的放在.rviz保存在config目录下,就是机器人相关配置保存;利用args读取这里的配置就会显示默认的机器模型而不是空白。
args="xxx xxx xxx" (可选)------------------将参数传递给节点
我认为在写保存的配置文件名时,后缀应为_urdf.rviz,不然会保存不成功
5.urdf查看工具
interest@interest:~/fz6/src/urdf1_rviz/urdf/urdf$ check_urdf test.urdf //检查错误
robot name is: mycar
---------- Successfully Parsed XML ---------------
root Link: base_footprint has 1 child(ren)
child(1): base_link
child(1): back_wheel
child(2): front_wheel
child(3): left_wheel
child(4): right_wheel
interest@interest:~/fz6/src/urdf1_rviz/urdf/urdf$ urdf_to_graphiz test.urdf //生成pdf
Created file mycar.gv
Created file mycar.pdf
interest@interest:~/fz6/src/urdf1_rviz/urdf/urdf$ evince mycar.pdf //查看pdf
6.roscore报错
killall -9 roscore //如果提示未找到进程不用管,继续执行下一条
killall -9 rosmaster
7.检查xacro文件是否有错,报错了,但也能把.xacro文件解析成.urdf文件,也能正常生成rviz.
interest@interest:~/fz6/src/urdf1_rviz/urdf/xacro$ check_urdf test.urdf.xacro
Error: radius [${base_footprint_radius}] is not a valid float
at line 126 in /build/urdfdom-VnCcob/urdfdom-1.0.4+ds/urdf_parser/src/link.cpp
Error: Could not parse visual element for Link [base_footprint]
at line 453 in /build/urdfdom-VnCcob/urdfdom-1.0.4+ds/urdf_parser/src/link.cpp
Error: length [${base_link_length}] is not a valid float
at line 173 in /build/urdfdom-VnCcob/urdfdom-1.0.4+ds/urdf_parser/src/link.cpp
Error: Could not parse visual element for Link [base_link]
at line 453 in /build/urdfdom-VnCcob/urdfdom-1.0.4+ds/urdf_parser/src/link.cpp
Error: Unable to parse component [${base_joint_z}] to a double (while parsing a vector value)
at line 102 in /build/urdfdom-VnCcob/urdfdom-1.0.4+ds/urdf_parser/src/pose.cpp
Error: Malformed parent origin element for joint [base_link2base_footprint]
at line 362 in /build/urdfdom-VnCcob/urdfdom-1.0.4+ds/urdf_parser/src/joint.cpp
Error: joint xml is not initialized correctly
at line 233 in /build/urdfdom-VnCcob/urdfdom-1.0.4+ds/urdf_parser/src/model.cpp
ERROR: Model Parsing the xml failed
8.在launch文件里运行.urdf.xacro文件报错
(一)还是代码写的有问题,改代码就行
<material name="black" />错
<material name="black" >对 //1
<color rgba="0 0 0 0.2" /> //2
</material> //3
解释/,/也代表一种结束;一个标签下面有子标签就不能加,比如1、3
就自己一个标签要加,比如2
可以类比C语言中,和;的用法理解
(二).xacro只启动了生成的摄像头,没有底盘支撑着,都启动了就好了
- 9.电机差速控制器
运动方式 | 左轮速度 | 右轮速度 |
直走 | V左=V右 | |
左转 | V左 < V右 | |
右转 | V左 > V右 |
- 轮间距:计算角速度时需要用到(拐弯时)
10.控制urdf在rviz中生成的机器人运动
interest@interest:~$ rostopic list
/clicked_point
/cmd_vel //被arbotix订阅
/diagnostics
/initialpose
/joint_states
/move_base_simple/goal
/odom
/rosout
/rosout_agg
/tf
/tf_static
//发布速度消息/cmd_vel
interest@interest:~$ rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear:
x: 1.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 1.0"
11.gazebo报错
(一)一般是因为变量没有加${ } ;http://t.csdn.cn/BJEWV
(二)一般是因为launch文件里标签下面有子标签,然后“/"有没有多加的问题。
<include file="$(find gazebo_ros)/launch/empty_world.launch" >错的
<include file="$(find gazebo_ros)/launch/empty_world.launch" >对的
<!-- 别人写好的仿真环境放到功能包下,在launch文件里启动 -->
<arg name="world_name" value="$(find urdf2_gazebo)/worlds/box_house.world" />
</include>
报错:
12.问题:gazebo仿真环境中没有出现已经配置好的机器人连杆
</collision>
<xacro:cylinder_inertial_matrix m="${base_link_m}" r="${base_link_radius}"
h="${base_link_length}" />
</link>
//惯性矩阵应放在link标签结束前collision标签结束后
13.gazebo生成的问题
- 机器人轮子下陷?,未解决
- 抖动、遗落的话,可以看一下质量是否合适,从而影响惯性矩阵
14.控制机器人运动下载arbotix时下载不了,用流量试试。
把功能包复制到所需的工作空间下,不用管里边的内容,只要Ctrl_Shift+B编译成功不报错就没问题。
15.打开gazebo是空的,也找不到自己写好的模型,还报错
结束运行终端输入:
killall gzserver
启动gazebo不再报错,问题解决。
16.雷达采样参数理解
作者:21赛项负责人许燚