赞
踩
目录
1.将solidworks导出的汽车urdf文件转为xacro文件
1.Spawn service failed.Exiting.
2.TypeError:slice indices must be integers or None or have an__index__ metod
参考文章:https://blog.csdn.net/weixin_45168199/article/details/105755388
这一部分完成后的urdf模型其实具有较大的问题,比如link和joint位置混乱,惯性和碰撞属性混乱,甚至模型本身尺寸不好,车轮大小不等,仍需要对导出的urdf文件做大量的修改。所以在进行前仍需要对urdf文件的相关知识有一定程度的了解,才能得到相对理想的模型。
下载ROS提供的SolidWorks转URDF的名为sw_urdf_exporter的插件。在网址中下载sw2urdfSetup.exe文件,网址为sw_urdf_exporter - ROS Wiki。选择与自己的Solidworks相对应的版本(我选择的为2020版),下载完成后进行安装,即可在Solidworks中导出URDF模型。
在网络中寻找合适的汽车装配体进行下载,其零件实体至少需包含四个车轮和一个车架,每个link对应一个实体。
创建每一个link的点和坐标系,要与ROS中坐标系方向一致,机器人前进方向为X轴正方向,遵循右手定则。先创建base_link的点和坐标系(一般以底盘为base_link),再创建其他link的点和坐标系。
1)依次点击“装配体—参考几何体—点”,选择“面中心”后选择汽车底盘,即会在底盘中间生成一个点。为方便将其命名为“汽车底盘点”。
2)选择“汽车底盘点”后再依次点击“装配体—参考几何体—坐标系”,在底盘中间生成一个坐标系,通过左端更改坐标系方向使其与ROS中的坐标系方向相同,即令X轴指向车头。图中红色箭头所指方向为X轴,绿色箭头所指方向为Y轴,蓝色箭头所指方向为Z轴。将其命名为“汽车底盘坐标系”。
3) 以相同的方法依次为四个车轮创建点和坐标系,坐标系方向与ROS中一致。
依次点击“装配体—参考几何体—基准轴”,为车轮创建旋转轴,左右前轮共用一个基准轴“前轮轴”,左右后轮共用一个基准轴“后轮轴”,基准轴与车轮旋转轴重合。
PS:当child link要围绕基准轴做旋转运动时,child link的坐标原点要建在基准轴上,或者坐标系的一轴要与基准轴重合,才能保证child link是围绕基准轴旋转,而不是绕坐标系的轴运动。
1)依次点击“工具—Tools—Export as URDF”,进入配置界面。
2)先配置base_link。Global Origin Coordinate System选择为“汽车底盘坐标系”,Link Components选择为汽车车架,车架变为蓝色。Number or child links选为4。
3) 点击Empty_Link对child links进行配置,即对车轮进行配置。Link Name设置为wheel_lf_link,Joint Name为wheel_lf_joint,Reference Coordinate System选择为“左前轮坐标系”,Reference Axis选择为“前轮轴”,Joint Type选择为continuous,Link Components选择为左前轮,左前轮变为蓝色。同理对另外三个轮子进行配置。
4)配置完所有link后,点击“Preview and Export”选项。检查joint配置参数是否有问题,有问题的话可以在此处进行修改,没有问题点击“Next”。
将导出的文件夹放在工作空间的src目录下。经过修改代码中的文件位置和名称使其与自己的路径一致,且需删除名称中的.SLDM等,总之是一些非常细节的内容,需要一边测试一边根据报错进行修改。
配置文件后能够在Gazebo中显示汽车模型,实现了将mesh文件导入urdf。但可能是由于模型问题导致车架不太美观,车轮能完整显示。此外,urdf文件的部分link位置需要进一步调整,同时碰撞属性、质量和其他参数仍需要一边测试一边修改,才能达到相对理想的效果。
参考文章:https://blog.csdn.net/qq_45153670/article/details/124231945
直接在urdf文件中添加xmlns:xacro=xacro - ROS Wiki,然后将文件后缀改为.xacro后,重新编写launch文件即可顺利转为xacro文件并打开。
参考文章:https://blog.csdn.net/weixin_45417246/article/details/116070317
分别编写传感器的xacro文件并将它们和汽车模型集成到aodi_union.xacro中,重新编写launch文件使其调用aodi_union.xacro,然后运行进行测试不断调整直到传感器都处于合适的位置(这一部分将影响后续摄像头画面等,也可以在之后重新调整)。
参考文章:https://blog.csdn.net/weixin_51553136/article/details/123636800
1)使用sudo nautilus打开root目录,在root文件夹的building_editor_models文件夹创建my_ground_plane/materials,并在其中分别创建scripts和textures两个目录。
2)在scripts中创建材料文件,将提前绘制好的MyImage.png放置于textures中。
3)在/root/building_editor_models/my_ground_plane路径中创建并编写.sdf和.config文件。
参考文章:https://blog.csdn.net/qq_44725448/article/details/109638990
1)运行sudo gazebo(一定要加sudo,否则无法保存)并点击左上角insert,左键点击My Ground Plane并拖入(此时应将默认底板ground_plane删除,否则底板就会像截图一样将无法正常显示)。
2) 通过下载模型搭建城市环境。
3)点击File-Save world as后存在任意路径。
4)在工作空间catkin_final的src目录下使用命令catkin_create_pkg robot_room std_msgs rospy roscpp gazebo_ros gazebo_plugins创建robot_room包。
5)在robot_room包中建立一个worlds目录,用于存放需要仿真的世界文件,在该目录下创建一个city.world文件并将刚刚保存好的world内容复制到其中。
6)在robot_room编写city.launch文件。
7)更改/catkin_final/src/aodi路径下用于打开无人车的aodi.launch文件,令其在搭建好的城市中打开。
8) 编译并运行aodi.launch进行测试,可以成功将无人车在搭建的城市环境打开。
参考文章:https://blog.csdn.net/walleva96/article/details/117959957
1)由于以前只使用过两驱因此我先对后轮进行了控制,将move.xacro集成进aodi_union.xacro后进行键盘控制观察。
2) 在运行过程中发现了xacro文件存在问题,由于碰撞属性部分设置不合理而导致汽车轮子转动但无法运动,比如车架触地而导致轮胎悬空,视觉上几乎无法发现,体现为虽然驱动轮能够按照按键控制转动,小车却无法运动。分别对visual标签的mesh文件和collision标签进行了修改后,才使汽车能够前进和后退。
3)但后轮驱动时前轮作为固定部分与地面接触,在汽车转向时具有较大的侧向力阻值汽车顺利转向,需修改move.xacro为四驱。
4)使用命令rosrun teleop_twist_keyboard teleop_twist_keyboard.py调动键盘进行控制,并能够实现转向。
参考文章:https://blog.csdn.net/Travis_X/article/details/115293715
1)在aodi_union.xacro中加入gaezbo中的libgazebo_ros_p3d.so插件发布无人车的位姿真值。
2)运行gazebo,使用键盘控制小车做圆周运动,调用rqt_plot。在Topic一栏输入“/”可以看到子话题,一步步选择可以看到“/base_pose_ground_truth/twist/twist”下分别有“linear”和“angular”可以进行选择。
3) 先绘制无人车的纵横向速度。选择“linear”后再次输入“/”,然后对x、y和z进行添加。
4)修改横纵坐标的范围为小车转过一周的时间,修改标题和名称,获得相对理想的横纵向速度曲线图。其中沿z轴方向的速度始终在0附近抖动。保存至catkin_final/rqt路径(任意路径)下。
5)同理可以获得横摆角速度曲线图,保存至catkin_final/rqt路径下。
6) 可以获得无人车的行驶轨迹曲线图,保存至catkin_final/rqt路径下。
在进行自主巡线前可以使用rqt_image_view命令查看摄像头画面,发现摄像头画面不合适则需要修改xacro文件中camera和support的位置进行调整。如图分别为调整前后的画面。
1)在/catkin_final/src使用命令catkin_create_pkg follower rospy geometry_msgs sensor_msgs创建功能包。
2)在follower目录下编写过滤黄线和巡线脚本,重新编译工作空间并运行aodi.launch和follower_linear.py脚本。若发现摄像头画面的底板不断闪烁,是由于world中加入自定义底板时没有删除默认的底板ground_plane,删除后即可正常显示。如果之前保存world时没有删除,可以直接修改.world文件,将其中的ground_plane的model即可。
3)此时虽然能正常显示,但小车并不能按预期所想沿着黄线前进,而是停在原地。经检查发现虽然实现了/gazebo向/follower节点的通讯,/follower却没有向/gazebo发布消息控制小车运动。
4)检查发现小车实际的速度话题名称为/cmd_vel,而脚本中并不是这个名称,修改成一致的话题名称后即可顺利运行,小车能够完成自主巡线并返回起点。
问题:在加载入自己的.world文件后运行gazebo可能会出现如图所示报错。
解决:在自己的.world文件中查找到<sim_time>并修改为0,之后就不会再出现这个报错。
问题:自主巡线部分运行follower_line.py时出现如图报错。
解决:经搜索知版本不同的Python对浮点和整数的处理方法不同,于是我尝试将提示中所示26行前进行了除法运算的代码部分进行了强制类型转换,之后便可顺利运行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。