1、 运行了文章最后给的两个实例
2、安装rviz中声纳的插件
# clone and compile rviz_sonar_image repo
cd ~/uuv_ws/src/
git clone https://github.com/rolker/rviz_sonar_image
cd ../
catkin build rviz_sonar_image# run rviz after running the launch file
rviz
在运行最后rvizd的时候弹出错误,和ros的通信有问题,查找到可行的解决方法为
打开另一个终端,运行roscore即可解决问题
特别要注意,rviz是在运行launch文件后运行的,我一开始没有运行launch文件直接运行了rviz,在rviz的窗口中没有和dave项目中类似的选项
今天的学习就到这里吧
明天先整一下rviz再按照第一个找到的视频在虚拟机上学习一下,希望白天可以搞完,然后晚上可以总结一下,后天再继续学习相关的东西
新的一天!
首先运行例子:
cd ~/uuv_ws
roslaunch nps_uw_multibeam_sonar sonar_tank_blueview_p900_nps_multibeam.launch
在此之后在另一个终端运行
rviz
//之前说的运行rviz需要现在另一个终端运行roscore,现在看来并不是必须的,因为在运行launch文件的时候,roscore已经打开了(根据提示的报错看出来的),直接运行rviz后启动,在这个页面点击左下角的ADD,添加 rviz_sonar_image下的ProjectedSonarImageDisplay,就能够在左侧窗口中看到rviz_sonar_image的选项,将topic中的选到,就能够完成这部分的内容
就实现了这部分的内容
3、按照网上的教程先学习一下gazebo
整了半天编译不成功,查了半天,这视频是ubuntu18.04版本的,所用的包也是18.04的,不支持noetic,可恶啊可恶,学习未半而中道崩殂,贴一个这个视频
70分钟快速入门Gazebo机器人仿真_哔哩哔哩_bilibili
继续学新的了
看了一个仿真环境搭建的视频,要把环境和机器人的都合并成一个launch文件,然后再打开,就可以gazebo中显示场景和机器人(看了个大概,具体怎么做还需要实际操作)
但是我现在的难题是,怎么把声纳搭载在uuv上面,这个要重点解决,然后我觉得就是将一开始的dave环境中搞一个需要探索的物体,然后就把搭载了声纳的uuv去做这个显示,既然直接搞声纳的launch文件有显示的窗口,所以只用把这个文件和大家搞在一起就可以了,但是这个搭载,是怎么完成的:
1、直接把所有需要的环境、机器人、声纳都整合在一起//这个我觉得可行,但是这个声纳怎么和uuv链接也是一个问题
2、在gazebo中插入声纳//这个我总之感觉有问题
今天学习的视频:
(这里贴一下)
Failed toconnect to github.com port 443: 拒绝连接 Could not resolve host: github.com
然后就成功的把这个demo git下来了
嘻嘻我还以为没有rviz原来有的,无敌
(用rviz命令查看了一下可以打开的/不过要在另一个终端打开roscore)
实现流程:
1、新建功能包,导入依赖
2、编写urdf文件
3、在launch文件集成URDF和rviz
4、在rviz中显示机器人模型
创建urdf文件
这就创建一个盒状的机器人
在launch文件中集成urdf和rviz
<launch>
<!-- 设置参数 -->//在参数服务器载入urdf文件
<param name="robot_description" textfile="$(find urdf01_rviz)/urdf/urdf/demo01_HelloWorld.urdf" />
<!-- 启动 rviz -->
<node pkg="rviz" type="rviz" name="rviz" />
</launch>
其中robot_description是固定的,但是这个urdf01_rviz是什么我还不清楚,似乎是一个依赖包?
然后通过这一步,可以同时启动rviz
这就是urdf集成rviz//完成了嘻嘻
优化rviz启动:
重新启动配置文件后,发现之前调过的部分又没了!还需要重新搞。需要重新启动的时候不做重复操作,就把原来搞好的,在文件中保存到这个文件夹中config文件中,再在launch文件启动rviz中添加args="-d $(find urdf01_rviz)/config/rviz/show_mycar.rviz",这个show_mycar就是刚刚保存的文件名,然后再次启动,就打开保存之前配置的rviz了
两个link通过joint连接,这个joint一般是不可见的部分,然后其中连接有可以动的有不可以动的
属性:
name名称
type关节的运动形式:continuous旋转的,fixed固定的,其他的有具体的应用场景再看
子标签:
parent和child制定父子连杆,origin制定child添加在parent的哪个位置,axis围绕哪个座标轴转动
案例:添加一个摄像头,沿着z轴360度旋
launch文件只有之前的两条语句,会显示错误:
No transform from [camera] to [base_line]缺少从这个到那个的左边变换
rviz中显示urdf时必须发布不同部件之间的坐标系关系
解决方法是ros中已经提供了关于机器人模型显示的坐标发布相关节点
<node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" />
<node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" />
一个是关节状态发布节点,一个是机器人状态发布节点
关节运动控制节点,可以生成一个关节控制的Ui用来测试关节运动是否正常
<node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" name="joint_state_publisher_gui" />
由于这个长方体机器人是半沉在平面中的,所以要添加一个极小的link,再将他关联初始Link和base_link,高度就是半个底盘高度
ros中关于urdf的工具
然后是xacro,我的天我昨天写了一堆东西没有保存!!!
气死了 啊啊啊啊啊
不管了然后就是要在校车上添加雷达摄像头
要编写摄像头和雷达的xacro文件然后再编写一个组合文件,组合地盘、摄像头和雷达
最后通过launch文件启动rviz并显示模型
【昨天一部分gazebo的内容没有写,后面要补充一下】
仿真环境:
1、在包中创建一个worlds文件夹,然后将保存好的环境文件复制到worlds文件夹中
2、修改启动文件,在空的环境中加入这个功能包下的这个环境文件
3、然后就可以实现将机器人在下载好的环境中实现
4、还可以通过gazebo环境自己搭建,保存为.world文件
综合应用:通过gazebo运行传感器,然后再rviz中显示传感器感知到的数据
1、运动控制及里程信息显示
arbotix只能让机器人在rviz中运动,对gazebo不生效,这就涉及到另外一个组件——ros_control
这个可以保证ROS程序的可移植性,gazebo已经实现了ros_control的相关接口,如果要在gazebo中控制机器人运动,直接调用相关接口即可
2、其他的部分依次运行过了
接下来的部分是运行demo的文档中的内容
<!-- use Gazebo's empty_world.launch with dave_ocean_waves.world -->
//使用空的gazebo世界显示水下dave世界模型
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(arg world_name)"/>
<arg name="paused" value="$(arg paused)"/>
<arg name="use_sim_time" value="true"/>
<arg name="gui" value="$(arg gui)"/>
<arg name="headless" value="false"/>
<arg name="debug" value="false"/>
<arg name="verbose" value="false"/>
</include>
哦我现在觉得可以直接在写一个文件然后在水下的世界中显示沉船/花瓶模型,下午应该就能弄出来,而且这个沉船模型中是直接有声纳的,对我还要添加一个Rviz的部分进行显示,然后可以对比以下水下与不是水下的不同,然后AUV部分还是有问题
安装了vscode然后再学习一下工作空间
mkdir -p xxx_ws/src
cd xxx_ws
catkin_make
cd .
就启动了vscode
可以直接在海底的环境中insert声纳,我是在那个花瓶的基础上更改了他的world文件,但是与此同时这个花瓶也没有了,只剩下了海底的环境和声纳
所以可以用声纳进行海底环境的探索,生成声纳的关键代码段是
<!-- 这部分是显示的声纳模型 -->
<param name="$(arg sonar_name)"
command="$(find xacro)/xacro '$(find nps_uw_multibeam_sonar)/urdf/multibeam_sonar_blueview_p900.xacro'
standalone:=$(arg standalone) name:=$(arg sonar_name) scale:=$(arg sonar_scale) debug:=$(arg debug)
sonar_image_topic:=$(arg sonar_image_topic) sonar_image_raw_topic:=$(arg sonar_image_raw_topic)
maxDistance:=$(arg maxDistance) raySkips:=$(arg raySkips) plotScaler:=$(arg plotScaler)
sensorGain:=$(arg sensorGain) writeLog:=$(arg writeLog) writeFrameInterval:=$(arg writeFrameInterval)
artificialVehicleVibration:=$(arg artificialVehicleVibration) constantReflectivity:=$(arg constantReflectivity)
reflectivityDatabaseFile:=$(arg reflectivityDatabaseFile) ray_visual:=$(arg ray_visual)"/>
<node name="spawn_$(arg sonar_name)" pkg="gazebo_ros" type="spawn_model"
args="-param $(arg sonar_name) -urdf -x $(arg sonar_x) -y $(arg sonar_y) -z $(arg sonar_z)
-R $(arg sonar_roll) -P $(arg sonar_pitch) -Y $(arg sonar_yaw) -model $(arg sonar_name)" />
<!-- image_view for sonar image 这里获取的声纳的结果图像-->
<node name="image_view_sonar" pkg="image_view" type="image_view"
args="image:=/$(arg sonar_name)/$(arg sonar_image_topic)">
<param name="window_name" value="$(arg sonar_name)" />
<param name="autosize" value="true" />
<param name="filename_format" value="/tmp/SonarImage_capture_%04i.jpg" />
</node>
<node pkg="tf" type="static_transform_publisher" name="multibeam_sonar_base_link"
args="0 0 0 0 0 0 map forward_sonar_optical_link 50" />
现在思考的问题是,在环境中插入目标物体,比如船体/花瓶的模型,观察在有无海洋环境的时候的影响,哦哦哦哦哦哦哦!我知道怎么插入物体了,然后调整他的位置,但是问题是为什么不能固定,它就自己滚下来了哈哈哈
可以修改launch文件中声纳的初始位置,从而不用在gazebo中进行修改,现在考虑修改花瓶的文件。
以后在文件的基础上进行修改的时候一定要先复制再修改不然把原来的文件都弄丢了要
只有海底环境的时候:
以下是对损坏的沉船的显示图
以下是未损坏的沉船图
这是在没有海底环境的情况下船的两种情况 ,也可以看出来明显的差异
直接在这个文件中用rviz是不可行的,其中一个link有问题,然后就用能够正常显示rviz的文件显示原来的海底world
显示沉船模型如下图
浅学了一下sdf、urdf、xacro文件的相同点和不同点
相同点:都是模型文件
不同点:
urdf文件,和xacro的区别主要在于参数的设置
xacro文件,可以在rviz和gazebo中显示,但和urdf比较,多出来了inertial和collision的标签
sdf文件,有自己的行为,不能使sdf文件动起来,他有自己的行为//这个有自己的行为是什么个意思
在这个项目中既然提到了关于rviz的方面,那我觉得还是直接用test2的方法更简单,同时也功能更强大更完善,只需要在world文件中加入model就可以,相关的位置也可以根据情况修改(而且这个修改还是在world文件中,并不影响生成声纳的sdf文件)!