CARLA
 
载入中...
搜索中...
未找到
Actor.cpp
浏览该文件的文档.
1// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma
2// de Barcelona (UAB).
3//
4// This work is licensed under the terms of the MIT license.
5// For a copy, see <https://opensource.org/licenses/MIT>.
6
7#include "carla/client/Actor.h"// 引入Carla模拟器中参与者模块的头文件
8
9#include "carla/Logging.h"// 引入Carla日志模块的头文件
10#include "carla/client/detail/Simulator.h"// 引入Carla客户端库中模拟器实现的细节头文件,包含模拟器状态管理和控制的相关实现
11
12namespace carla {
13namespace client {
14 //这个函数返回Actor当前的位置。
15 geom::Location Actor::GetLocation() const {
16 return GetEpisode().Lock()->GetActorLocation(*this);
17 }
18 //返回Actor当前的变换(位置和方向)。
19 //实现方式与GetLocation类似,通过GetEpisode().Lock()->GetActorTransform(*this)获取。
20 geom::Transform Actor::GetTransform() const {
21 return GetEpisode().Lock()->GetActorTransform(*this);
22 }
23 //返回Actor当前的速度,以三维向量表示。
24 //通过GetEpisode().Lock()->GetActorVelocity(*this)获取。
25 geom::Vector3D Actor::GetVelocity() const {
26 return GetEpisode().Lock()->GetActorVelocity(*this);
27 }
28 //返回Actor当前的角速度,也是以三维向量表示。
29 //实现方式同上,通过GetEpisode().Lock()->GetActorAngularVelocity(*this)获取。
30
31 geom::Vector3D Actor::GetAngularVelocity() const {
32 return GetEpisode().Lock()->GetActorAngularVelocity(*this);
33 }
34 //返回Actor当前的加速度,以三维向量表示。
35 //通过GetEpisode().Lock()->GetActorAcceleration(*this)获取。
36 geom::Vector3D Actor::GetAcceleration() const {
37 return GetEpisode().Lock()->GetActorAcceleration(*this);
38 }
39 //返回指定组件在世界空间中的变换。
40 //这里的componentName是一个字符串,表示Actor上某个特定组件的名称。
41 geom::Transform Actor::GetComponentWorldTransform(const std::string componentName) const {
42 return GetEpisode().Lock()->GetActorComponentWorldTransform(*this, componentName);
43 }
44 //返回指定组件相对于Actor自身的变换。
45 geom::Transform Actor::GetComponentRelativeTransform(const std::string componentName) const {
46 return GetEpisode().Lock()->GetActorComponentRelativeTransform(*this, componentName);
47 }
48 //这个函数返回一个std::vector<geom::Transform>类型的值,代表Actor中所有骨骼的世界变换(World Transforms)。
49 std::vector<geom::Transform> Actor::GetBoneWorldTransforms() const {
50 return GetEpisode().Lock()->GetActorBoneWorldTransforms(*this);
51 }
52 //与GetBoneWorldTransforms类似,这个函数返回Actor中所有骨骼的相对变换(Relative Transforms)
53 std::vector<geom::Transform> Actor::GetBoneRelativeTransforms() const {
54 return GetEpisode().Lock()->GetActorBoneRelativeTransforms(*this);
55 }
56 //这个函数返回一个std::vector<std::string>类型的值,包含Actor中所有组件的名称。
57 std::vector<std::string> Actor::GetComponentNames() const {
58 return GetEpisode().Lock()->GetActorComponentNames(*this);
59 }
60 //这个函数返回一个std::vector<std::string>类型的值,包含Actor中所有骨骼的名称
61 std::vector<std::string> Actor::GetBoneNames() const {
62 return GetEpisode().Lock()->GetActorBoneNames(*this);
63 }
64 //这个函数返回一个std::vector<geom::Transform>类型的值,代表Actor中所有插槽(Sockets)的世界变换
65 std::vector<geom::Transform> Actor::GetSocketWorldTransforms() const {
66 return GetEpisode().Lock()->GetActorSocketWorldTransforms(*this);
67 }
68 //与GetSocketWorldTransforms类似,这个函数返回Actor中所有插槽的相对变换
69 std::vector<geom::Transform> Actor::GetSocketRelativeTransforms() const {
70 return GetEpisode().Lock()->GetActorSocketRelativeTransforms(*this);
71 }
72 //这个函数返回一个std::vector<std::string>类型的值,包含Actor中所有插槽的名称。
73 std::vector<std::string> Actor::GetSocketNames() const {
74 return GetEpisode().Lock()->GetActorSocketNames(*this);
75 }
76/**
77 * 设置Actor的位置。
78 * @param location 新的位置信息。
79 */
80 void Actor::SetLocation(const geom::Location &location) {
81 GetEpisode().Lock()->SetActorLocation(*this, location);
82 }
83/**
84 * 设置Actor的变换,包括位置、旋转和缩放。
85 * @param transform 新的变换信息。
86 */
87 void Actor::SetTransform(const geom::Transform &transform) {
88 GetEpisode().Lock()->SetActorTransform(*this, transform);
89 }
90/**
91 * 设置Actor的目标速度。
92 * @param vector 目标速度向量。
93 */
94 void Actor::SetTargetVelocity(const geom::Vector3D &vector) {
95 GetEpisode().Lock()->SetActorTargetVelocity(*this, vector);
96 }
97/**
98 * 设置Actor的目标角速度。
99 * @param vector 目标角速度向量。
100 */
101 void Actor::SetTargetAngularVelocity(const geom::Vector3D &vector) {
102 GetEpisode().Lock()->SetActorTargetAngularVelocity(*this, vector);
103 }
104/**
105 * 启用Actor的恒定速度。
106 * @param vector 恒定速度向量。
107 */
108 void Actor::EnableConstantVelocity(const geom::Vector3D &vector) {
109 GetEpisode().Lock()->EnableActorConstantVelocity(*this, vector);
110 }
111/**
112 * 禁用Actor的恒定速度。
113 */
114 void Actor::DisableConstantVelocity() {
115 GetEpisode().Lock()->DisableActorConstantVelocity(*this);
116 }
117/**
118 * 向Actor添加冲量(瞬间力)。
119 * @param impulse 冲量向量。
120 */
121 void Actor::AddImpulse(const geom::Vector3D &impulse) {
122 GetEpisode().Lock()->AddActorImpulse(*this, impulse);
123 }
124/**
125 * 向Actor在特定位置添加冲量(瞬间力)。
126 * @param impulse 冲量向量。
127 * @param location 冲量作用的位置。
128 */
129 void Actor::AddImpulse(const geom::Vector3D &impulse, const geom::Vector3D &location) {
130 GetEpisode().Lock()->AddActorImpulse(*this, impulse, location);
131 }
132/**
133 * 向Actor在特定位置添加冲量(瞬间力)。
134 * @param impulse 冲量向量。
135 * @param location 冲量作用的位置。
136 */
137 void Actor::AddForce(const geom::Vector3D &force) {
138 GetEpisode().Lock()->AddActorForce(*this, force);
139 }
140/**
141 * 向Actor在特定位置添加力。
142 * @param force 力向量。
143 * @param location 力作用的位置。
144 */
145 void Actor::AddForce(const geom::Vector3D &force, const geom::Vector3D &location) {
146 GetEpisode().Lock()->AddActorForce(*this, force, location);
147 }
148/**
149 * 向Actor添加角冲量。
150 * @param vector 角冲量向量。
151 */
152 void Actor::AddAngularImpulse(const geom::Vector3D &vector) {
153 GetEpisode().Lock()->AddActorAngularImpulse(*this, vector);
154 }
155/**
156 * 向Actor添加扭矩。
157 * @param torque 扭矩向量。
158 */
159 void Actor::AddTorque(const geom::Vector3D &torque) {
160 GetEpisode().Lock()->AddActorTorque(*this, torque);
161 }
162/**
163 * 设置Actor是否模拟物理。
164 * @param enabled 是否启用物理模拟。
165 */
166 void Actor::SetSimulatePhysics(const bool enabled) {
167 GetEpisode().Lock()->SetActorSimulatePhysics(*this, enabled);
168 }
169/**
170 * 设置Actor是否启用碰撞。
171 * @param enabled 是否启用碰撞。
172 */
173 void Actor::SetCollisions(const bool enabled) {
174 GetEpisode().Lock()->SetActorCollisions(*this, enabled);
175 }
176/**
177 * 标记Actor为死亡状态。
178 */
179 void Actor::SetActorDead() {
180 GetEpisode().Lock()->SetActorDead(*this);
181 }
182/**
183 * 设置Actor是否启用重力。
184 * @param enabled 是否启用重力。
185 */
186 void Actor::SetEnableGravity(const bool enabled) {
187 GetEpisode().Lock()->SetActorEnableGravity(*this, enabled);
188 }
189
190/**
191 * 获取Actor的当前状态。
192 * @return Actor的当前状态。
193 */
194 rpc::ActorState Actor::GetActorState() const {
195 return GetEpisode().Lock()->GetActorState(*this);
196 }
197 // 定义在Actor类中的Destroy成员函数,该函数返回一个布尔值,表示销毁操作是否成功
198 bool Actor::Destroy() {
199 // 调用GetActorState成员函数获取当前Actor的状态,并将其存储在actor_state变量中
200 rpc::ActorState actor_state = GetActorState();
201 // 定义一个布尔变量result,初始化为false,用于记录销毁操作的结果
202 bool result = false;
203 // 判断actor_state是否不等于rpc::ActorState枚举中的Invalid状态。
204 // 如果不等于Invalid,说明该Actor对象是一个有效的对象,可以进行销毁操作
205 if (actor_state != rpc::ActorState::Invalid) {
206 result = GetEpisode().Lock()->DestroyActor(*this);
207 } else {
209 "attempting to destroy an actor that is already dead:",
210 GetDisplayId());
211 }
212 // 返回销毁操作的结果
213 return result;
214 }
215
216} // 命名空间client方便区分函数
217} // 命名空间carla方便区分函数
rpc::ActorState GetActorState() const
const std::string & GetDisplayId() const
SharedPtrType Lock() const
与 TryLock 相同,但永远不会返回 nullptr。
CARLA模拟器的主命名空间。
Definition Carla.cpp:139
static void log_warning(Args &&... args)
Definition Logging.h:101
包含CARLA客户端相关类和函数的命名空间。